Merge "Handle no pageids response field in MessagePoster factory"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 9 Jul 2015 13:42:50 +0000 (13:42 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 9 Jul 2015 13:42:50 +0000 (13:42 +0000)
1771 files changed:
.gitattributes
.jshintignore
Gemfile
Gemfile.lock
RELEASE-NOTES-1.26
autoload.php
composer.json
docs/doxygen_first_page.php
docs/extension.schema.json
docs/hooks.txt
docs/linkcache.txt
docs/scripts.txt
docs/sitelist.txt
img_auth.php
includes/AjaxDispatcher.php
includes/AjaxResponse.php
includes/Block.php
includes/CategoryViewer.php
includes/CdbCompat.php [deleted file]
includes/Collation.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/FileDeleteForm.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HistoryBlob.php
includes/Hooks.php
includes/Html.php
includes/HttpFunctions.php
includes/Import.php
includes/MediaWiki.php
includes/MimeMagic.php
includes/OutputPage.php
includes/Preferences.php
includes/ProtectionForm.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/SquidPurgeClient.php
includes/StreamFile.php
includes/TemplateParser.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/WebResponse.php
includes/Xml.php
includes/ZhConversion.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/RawAction.php
includes/actions/UnprotectAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatDump.php [deleted file]
includes/api/ApiFormatPhp.php
includes/api/ApiFormatWddx.php [deleted file]
includes/api/ApiFormatXml.php
includes/api/ApiHelp.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiQuery.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiResult.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/i18n/bcl.json
includes/api/i18n/be-tarask.json
includes/api/i18n/br.json [new file with mode: 0644]
includes/api/i18n/cs.json
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/fa.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/lb.json
includes/api/i18n/mk.json
includes/api/i18n/nl.json
includes/api/i18n/or.json [new file with mode: 0644]
includes/api/i18n/pl.json
includes/api/i18n/ps.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sv.json
includes/api/i18n/tr.json
includes/api/i18n/vi.json
includes/api/i18n/yi.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/cache/CacheDependency.php
includes/cache/FileCacheBase.php
includes/cache/HTMLFileCache.php
includes/cache/LCStoreStaticArray.php [new file with mode: 0644]
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/UserCache.php
includes/changes/ChangesFeed.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/RecentChange.php
includes/changetags/ChangeTags.php
includes/compat/CdbCompat.php [new file with mode: 0644]
includes/compat/normal/.gitignore [new file with mode: 0644]
includes/compat/normal/UtfNormal.php [new file with mode: 0644]
includes/compat/normal/UtfNormalDefines.php [new file with mode: 0644]
includes/compat/normal/UtfNormalUtil.php [new file with mode: 0644]
includes/content/ContentHandler.php
includes/content/WikitextContent.php
includes/context/DerivativeContext.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/LoadBalancer.php
includes/db/LoadMonitor.php
includes/debug/logger/LegacyLogger.php
includes/deferred/HTMLCacheUpdate.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/exception/HttpError.php
includes/exception/MWException.php
includes/exception/MWExceptionHandler.php
includes/filebackend/FSFile.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/MemoryFileBackend.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filebackend/lockmanager/FSLockManager.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/ArchivedFile.php
includes/gallery/PackedOverlayImageGallery.php
includes/gallery/TraditionalImageGallery.php
includes/htmlform/HTMLButtonField.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLCheckMatrix.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldWithButton.php [new file with mode: 0644]
includes/htmlform/HTMLMultiSelectField.php
includes/htmlform/HTMLRadioField.php
includes/htmlform/HTMLSelectAndOtherField.php
includes/htmlform/HTMLSelectNamespaceWithButton.php [new file with mode: 0644]
includes/htmlform/HTMLSubmitField.php
includes/htmlform/HTMLTextAreaField.php
includes/htmlform/HTMLTextField.php
includes/htmlform/HTMLTextFieldWithButton.php [new file with mode: 0644]
includes/htmlform/OOUIHTMLForm.php
includes/htmlform/VFormHTMLForm.php
includes/installer/DatabaseInstaller.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/ar.json
includes/installer/i18n/cs.json
includes/installer/i18n/es.json
includes/installer/i18n/et.json
includes/installer/i18n/fa.json
includes/installer/i18n/fr.json
includes/installer/i18n/hu.json
includes/installer/i18n/ja.json
includes/installer/i18n/kn.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/ku-latn.json
includes/installer/i18n/lrc.json
includes/installer/i18n/mg.json
includes/installer/i18n/mk.json
includes/installer/i18n/mr.json
includes/installer/i18n/nan.json
includes/installer/i18n/nap.json
includes/installer/i18n/or.json
includes/installer/i18n/pl.json
includes/installer/i18n/ru.json
includes/installer/i18n/sk.json
includes/installer/i18n/udm.json
includes/installer/i18n/uk.json
includes/installer/i18n/yi.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueue.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/JobSpecification.php
includes/jobqueue/aggregator/JobQueueAggregator.php
includes/jobqueue/jobs/EnqueueJob.php [changed mode: 0755->0644]
includes/jobqueue/jobs/RefreshLinksJob.php
includes/json/FormatJson.php
includes/libs/BufferingStatsdDataFactory.php
includes/libs/MultiHttpClient.php
includes/libs/ReplacementArray.php
includes/libs/RiffExtractor.php [new file with mode: 0644]
includes/libs/composer/ComposerLock.php
includes/libs/eventrelayer/EventRelayer.php [changed mode: 0755->0644]
includes/libs/eventrelayer/EventRelayerMCRD.php [changed mode: 0755->0644]
includes/libs/normal/.gitignore [deleted file]
includes/libs/normal/UtfNormal.php [deleted file]
includes/libs/normal/UtfNormalDefines.php [deleted file]
includes/libs/normal/UtfNormalUtil.php [deleted file]
includes/libs/objectcache/ReplicatedBagOStuff.php
includes/libs/objectcache/WANObjectCache.php [changed mode: 0755->0644]
includes/libs/virtualrest/VirtualRESTService.php
includes/logging/ContentModelLogFormatter.php [new file with mode: 0644]
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPager.php
includes/logging/PatrolLogFormatter.php
includes/mail/EmailNotification.php
includes/mail/UserMailer.php
includes/media/Bitmap.php
includes/media/DjVu.php
includes/media/DjVuImage.php
includes/media/Exif.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/GIF.php
includes/media/GIFMetadataExtractor.php
includes/media/IPTC.php
includes/media/ImageHandler.php
includes/media/Jpeg.php
includes/media/JpegMetadataExtractor.php
includes/media/MediaHandler.php
includes/media/MediaTransformInvalidParametersException.php
includes/media/PNG.php
includes/media/PNGMetadataExtractor.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/WebP.php [new file with mode: 0644]
includes/media/XCF.php
includes/media/XMP.php
includes/media/tinyrgb.icc [new file with mode: 0644]
includes/mime.info
includes/objectcache/MemcachedClient.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/parser/CacheTime.php
includes/parser/CoreParserFunctions.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/password/PasswordPolicyChecks.php [new file with mode: 0644]
includes/password/UserPasswordPolicy.php [new file with mode: 0644]
includes/poolcounter/PoolCounter.php
includes/profiler/ProfileSection.php
includes/profiler/Profiler.php
includes/profiler/ProfilerFunctions.php
includes/profiler/SectionProfiler.php
includes/profiler/output/ProfilerOutputDump.php
includes/profiler/output/ProfilerOutputText.php
includes/profiler/output/ProfilerOutputUdp.php
includes/rcfeed/MachineReadableRCFeedFormatter.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/DerivativeResourceLoaderContext.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderJqueryMsgDataModule.php [deleted file]
includes/resourceloader/ResourceLoaderJqueryMsgModule.php [new file with mode: 0644]
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderLanguageNamesModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderOOUIImageModule.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserDefaultsModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/search/SearchHighlighter.php
includes/search/SearchMySQL.php
includes/search/SearchSqlite.php
includes/skins/MediaWikiI18N.php
includes/skins/Skin.php
includes/skins/SkinFallbackTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/QueryPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialAllMessages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialChangeContentModel.php [new file with mode: 0644]
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialExport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialLockdb.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialMyRedirectPages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPageLanguage.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialResetTokens.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialRunJobs.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTags.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnlockdb.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedfiles.php
includes/title/MalformedTitleException.php
includes/upload/UploadBase.php
includes/upload/UploadFromUrl.php
includes/utils/AutoloadGenerator.php
includes/utils/IP.php
includes/utils/MWCryptRand.php
includes/utils/UIDGenerator.php
includes/widget/AUTHORS.txt [new file with mode: 0644]
includes/widget/LICENSE.txt [new file with mode: 0644]
includes/widget/TitleInputWidget.php [new file with mode: 0644]
languages/ConverterRule.php
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/classes/LanguageEo.php
languages/classes/LanguageFi.php
languages/classes/LanguageKsh.php
languages/i18n/af.json
languages/i18n/ar.json
languages/i18n/arn.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/awa.json
languages/i18n/bcc.json
languages/i18n/be-tarask.json
languages/i18n/bgn.json
languages/i18n/bho.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/cps.json
languages/i18n/cs.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/dty.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.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/kw.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/luz.json [new file with mode: 0644]
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/mzn.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/or.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pdc.json
languages/i18n/pl.json
languages/i18n/pnb.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/scn.json
languages/i18n/sdh.json [new file with mode: 0644]
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/tyv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vi.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesAeb.php
languages/messages/MessagesAeb_arab.php
languages/messages/MessagesBs.php
languages/messages/MessagesDty.php [new file with mode: 0644]
languages/messages/MessagesEn.php
languages/messages/MessagesGom.php [new file with mode: 0644]
languages/messages/MessagesGom_deva.php [new file with mode: 0644]
languages/messages/MessagesLrc.php
languages/messages/MessagesPnt.php
load.php
maintenance/Maintenance.php
maintenance/backup.inc
maintenance/backupTextPass.inc
maintenance/checkComposerLockUpToDate.php
maintenance/checkSyntax.php
maintenance/convertExtensionToRegistration.php
maintenance/copyFileBackend.php
maintenance/createAndPromote.php
maintenance/dictionary/mediawiki.dic
maintenance/exportSites.php
maintenance/importImages.php
maintenance/importSites.php
maintenance/install.php
maintenance/jsduck/categories.json
maintenance/jsparse.php
maintenance/language/StatOutputs.php
maintenance/language/generateNormalizerDataAr.php
maintenance/language/generateNormalizerDataMl.php
maintenance/language/zhtable/simp2trad_noconvert.manual
maintenance/language/zhtable/simpphrases.manual
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toSimp.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/trad2simp_noconvert.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/populateContentModel.php [new file with mode: 0644]
maintenance/rebuildFileCache.php
maintenance/sqlite.php
maintenance/storage/fixBug20757.php
maintenance/storage/recompressTracked.php
maintenance/update.php
maintenance/validateRegistrationFile.php
mw-config/index.php5 [deleted file]
package.json
resources/Resources.php
resources/ResourcesOOUI.php
resources/lib/es5-shim/es5-shim.js
resources/lib/jquery.client/jquery.client.js
resources/lib/json2/json2.js
resources/lib/oojs-ui/i18n/ar.json
resources/lib/oojs-ui/i18n/as.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/be-tarask.json
resources/lib/oojs-ui/i18n/cs.json
resources/lib/oojs-ui/i18n/de.json
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/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/gu.json
resources/lib/oojs-ui/i18n/he.json
resources/lib/oojs-ui/i18n/hrx.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/hu.json
resources/lib/oojs-ui/i18n/ilo.json
resources/lib/oojs-ui/i18n/it.json
resources/lib/oojs-ui/i18n/krc.json
resources/lib/oojs-ui/i18n/ksh.json
resources/lib/oojs-ui/i18n/ku-latn.json
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/luz.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/mk.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/pa.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/i18n/ps.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/sa.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/sv.json
resources/lib/oojs-ui/i18n/te.json
resources/lib/oojs-ui/i18n/xmf.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/yi.json
resources/lib/oojs-ui/i18n/yue.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-core.json
resources/lib/oojs-ui/themes/apex/images/icons/add.svg
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.svg
resources/lib/oojs-ui/themes/apex/images/icons/align-center.svg
resources/lib/oojs-ui/themes/apex/images/icons/align-float-left.svg
resources/lib/oojs-ui/themes/apex/images/icons/align-float-right.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/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/bigger-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/bigger-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/block.svg
resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/blockUndo-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-a.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-b.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-te.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-f.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/bold-geor-man.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-l.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-n.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-v.svg
resources/lib/oojs-ui/themes/apex/images/icons/cancel.png
resources/lib/oojs-ui/themes/apex/images/icons/cancel.svg
resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/caret-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/caretDown.svg
resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png
resources/lib/oojs-ui/themes/apex/images/icons/caretUp.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.png
resources/lib/oojs-ui/themes/apex/images/icons/check.svg
resources/lib/oojs-ui/themes/apex/images/icons/circle.svg
resources/lib/oojs-ui/themes/apex/images/icons/close.svg
resources/lib/oojs-ui/themes/apex/images/icons/code.svg
resources/lib/oojs-ui/themes/apex/images/icons/collapse.png
resources/lib/oojs-ui/themes/apex/images/icons/collapse.svg
resources/lib/oojs-ui/themes/apex/images/icons/comment.svg
resources/lib/oojs-ui/themes/apex/images/icons/downTriangle.svg
resources/lib/oojs-ui/themes/apex/images/icons/edit-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/expand.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.svg
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/flag-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/flag-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png
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/indent-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/indent-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/info.png
resources/lib/oojs-ui/themes/apex/images/icons/info.svg
resources/lib/oojs-ui/themes/apex/images/icons/insert.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-a.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.png
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-i.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-i.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-k.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/layout-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/layout-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/link.png
resources/lib/oojs-ui/themes/apex/images/icons/link.svg
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/listBullet-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/lock.svg
resources/lib/oojs-ui/themes/apex/images/icons/menu.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/move.svg
resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/newline-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/noWikiText-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/outdent-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/outdent-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/outline-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/outline-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/picture.svg
resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/redirect-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/redirect-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/redirect-rtl.svg
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/remove.svg
resources/lib/oojs-ui/themes/apex/images/icons/search.svg
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png
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/smaller-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/smaller-rtl.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/star.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.svg
resources/lib/oojs-ui/themes/apex/images/icons/subscript-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/subscript-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/superscript-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/superscript-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-caption.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-column-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-after.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-insert-row-before.svg
resources/lib/oojs-ui/themes/apex/images/icons/table-merge-cells.svg
resources/lib/oojs-ui/themes/apex/images/icons/table.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/templateAdd-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/templateAdd-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-lefttoright.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-dir-righttoleft.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-style.png
resources/lib/oojs-ui/themes/apex/images/icons/text-style.svg
resources/lib/oojs-ui/themes/apex/images/icons/translation-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/translation-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/translation-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/trash.svg
resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/trashUndo-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/apex/images/icons/upTriangle.svg
resources/lib/oojs-ui/themes/apex/images/icons/wikiText.svg
resources/lib/oojs-ui/themes/apex/images/icons/window.svg
resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.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/arrow-up.svg
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/mediawiki/icons-alerts.json
resources/lib/oojs-ui/themes/mediawiki/icons-content.json
resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
resources/lib/oojs-ui/themes/mediawiki/icons-editing-list.json
resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json
resources/lib/oojs-ui/themes/mediawiki/icons-location.json
resources/lib/oojs-ui/themes/mediawiki/icons-media.json
resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
resources/lib/oojs-ui/themes/mediawiki/icons-movement.json
resources/lib/oojs-ui/themes/mediawiki/icons-user.json
resources/lib/oojs-ui/themes/mediawiki/icons-wikimedia.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg
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.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg [new file with mode: 0644]
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-b-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg [new file with mode: 0644]
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-f-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg [new file with mode: 0644]
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/bold-geor-man-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg [new file with mode: 0644]
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/check-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg [new file with mode: 0644]
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/flag-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png
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/image-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg [new file with mode: 0644]
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.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg [new file with mode: 0644]
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-i-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg [new file with mode: 0644]
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/journal-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg [new file with mode: 0644]
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/layout-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg
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/listBullet-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg [new file with mode: 0644]
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 [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg [new file with mode: 0644]
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/quotesAdd-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg [new file with mode: 0644]
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/remove-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg [new file with mode: 0644]
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/speechBubble-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/table.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/templateAdd-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg
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.svg
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/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/qunitjs/qunit.css
resources/lib/qunitjs/qunit.js
resources/lib/sinonjs/sinon-1.10.3.js [deleted file]
resources/lib/sinonjs/sinon-1.15.4.js [new file with mode: 0644]
resources/lib/sinonjs/sinon-ie-1.10.3.js [deleted file]
resources/lib/sinonjs/sinon-ie-1.15.4.js [new file with mode: 0644]
resources/src/jquery/jquery.accessKeyLabel.js
resources/src/jquery/jquery.highlightText.js
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
resources/src/mediawiki.action/mediawiki.action.edit.css
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.less/mediawiki.ui/mixins.less
resources/src/mediawiki.less/mediawiki.ui/variables.less
resources/src/mediawiki.page/mediawiki.page.ready.js
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/mediawiki.special.version.css
resources/src/mediawiki.ui/components/buttons.less
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.css
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.infuse.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.RegExp.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.Uri.js
resources/src/mediawiki/mediawiki.cookie.js
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.htmlform.ooui.js [deleted file]
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.searchSuggest.js
resources/src/mediawiki/mediawiki.toc.js
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.userSuggest.js
resources/src/mediawiki/mediawiki.util.js
tests/TestsAutoLoader.php
tests/browser/environments.yml
tests/browser/features/create_account.feature
tests/browser/features/step_definitions/create_account_steps.rb
tests/browser/features/support/pages/create_account_page.rb
tests/parser/parserTests.txt
tests/parser/preprocess/All_system_messages.expected
tests/parser/preprocess/All_system_messages.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/data/media/2_webp_a.webp [new file with mode: 0644]
tests/phpunit/data/media/2_webp_ll.webp [new file with mode: 0644]
tests/phpunit/data/media/srgb.jpg [new file with mode: 0644]
tests/phpunit/data/media/tinyrgb.icc [new file with mode: 0644]
tests/phpunit/data/media/tinyrgb.jpg [new file with mode: 0644]
tests/phpunit/data/media/webp_animated.webp [new file with mode: 0644]
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/FauxResponseTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfUrlencodeTest.php
tests/phpunit/includes/LinkFilterTest.php
tests/phpunit/includes/MediaWikiTest.php [new file with mode: 0644]
tests/phpunit/includes/MimeMagicTest.php
tests/phpunit/includes/MovePageTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/SanitizerValidateEmailTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitleArrayFromResultTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/XmlJsTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiQueryAllPagesTest.php
tests/phpunit/includes/api/ApiResultTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiUnblockTest.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/format/ApiFormatDumpTest.php [deleted file]
tests/phpunit/includes/api/format/ApiFormatWddxTest.php [deleted file]
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
tests/phpunit/includes/api/query/ApiQueryTest.php
tests/phpunit/includes/api/query/ApiQueryTestBase.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/config/HashConfigTest.php
tests/phpunit/includes/content/JsonContentTest.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
tests/phpunit/includes/exception/MWExceptionTest.php
tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php
tests/phpunit/includes/libs/ArrayUtilsTest.php
tests/phpunit/includes/libs/JavaScriptMinifierTest.php
tests/phpunit/includes/libs/ObjectFactoryTest.php
tests/phpunit/includes/libs/XhprofTest.php
tests/phpunit/includes/libs/composer/ComposerLockTest.php
tests/phpunit/includes/logging/LogFormatterTestCase.php
tests/phpunit/includes/logging/MergeLogFormatterTest.php
tests/phpunit/includes/logging/NewUsersLogFormatterTest.php
tests/phpunit/includes/media/ExifBitmapTest.php
tests/phpunit/includes/media/WebPTest.php [new file with mode: 0644]
tests/phpunit/includes/objectcache/ReplicatedBagOStuffTest.php [new file with mode: 0644]
tests/phpunit/includes/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/password/PasswordPolicyChecksTest.php [new file with mode: 0644]
tests/phpunit/includes/password/UserPasswordPolicyTest.php [new file with mode: 0644]
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
tests/phpunit/includes/site/HashSiteStoreTest.php
tests/phpunit/includes/site/SiteExporterTest.php
tests/phpunit/includes/site/SiteImporterTest.php
tests/phpunit/includes/specials/SpecialBlankPageTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialPageTestBase.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/title/ForeignTitleTest.php
tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
tests/phpunit/includes/utils/IPTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/classes/LanguageArqTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/mocks/MockWebRequest.php [new file with mode: 0644]
tests/phpunit/phpunit.php
tests/phpunit/structure/AutoLoaderTest.php
tests/phpunit/structure/AvailableRightsTest.php
tests/phpunit/structure/ResourcesTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.mwExtension.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/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/testHelpers.inc
thumb.php

index 50ca329..09f86a3 100644 (file)
@@ -1 +1,3 @@
 *.sh eol=lf
+*.icc binary
+*.webp binary
index 494890c..1882151 100644 (file)
@@ -9,6 +9,3 @@ resources/src/jquery.tipsy/**
 resources/src/jquery/jquery.farbtastic.js
 resources/src/mediawiki.libs/**
 tests/frontend/node_modules/**
-
-# github.com/jshint/jshint/issues/729
-tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
diff --git a/Gemfile b/Gemfile
index a67be6b..392558c 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -3,5 +3,5 @@
 
 source 'https://rubygems.org'
 
-gem 'mediawiki_selenium', '~> 1.2.0'
+gem 'mediawiki_selenium', '~> 1.2.1'
 gem 'rubocop', require: false
index 0d0a5c2..7aa9dae 100644 (file)
@@ -33,11 +33,11 @@ GEM
     http-cookie (1.0.2)
       domain_name (~> 0.5)
     i18n (0.7.0)
-    json (1.8.2)
+    json (1.8.3)
     mediawiki_api (0.3.1)
       faraday (~> 0.9, >= 0.9.0)
       faraday-cookie_jar (~> 0.0, >= 0.0.6)
-    mediawiki_selenium (1.2.0)
+    mediawiki_selenium (1.2.1)
       cucumber (~> 1.3, >= 1.3.10)
       headless (~> 1.0, >= 1.0.1)
       json (~> 1.8, >= 1.8.1)
@@ -58,9 +58,9 @@ GEM
       watir-webdriver (>= 0.6.11)
     page_navigation (0.9)
       data_magic (>= 0.14)
-    parser (2.2.0.3)
+    parser (2.2.2.5)
       ast (>= 1.1, < 3.0)
-    powerpack (0.1.0)
+    powerpack (0.1.1)
     rainbow (2.0.0)
     rest-client (1.8.0)
       http-cookie (>= 1.0.2, < 2.0)
@@ -68,13 +68,13 @@ GEM
       netrc (~> 0.7)
     rspec-expectations (2.99.2)
       diff-lcs (>= 1.1.3, < 2.0)
-    rubocop (0.29.1)
+    rubocop (0.31.0)
       astrolabe (~> 1.3)
-      parser (>= 2.2.0.1, < 3.0)
+      parser (>= 2.2.2.1, < 3.0)
       powerpack (~> 0.1)
       rainbow (>= 1.99.1, < 3.0)
       ruby-progressbar (~> 1.4)
-    ruby-progressbar (1.7.1)
+    ruby-progressbar (1.7.5)
     rubyzip (1.1.7)
     selenium-webdriver (2.45.0)
       childprocess (~> 0.5)
@@ -95,5 +95,5 @@ PLATFORMS
   ruby
 
 DEPENDENCIES
-  mediawiki_selenium (~> 1.2.0)
+  mediawiki_selenium (~> 1.2.1)
   rubocop
index 2b54e0a..81269b8 100644 (file)
@@ -11,26 +11,66 @@ production.
 === Configuration changes in 1.26 ===
 * $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.
 
 === New features in 1.26 ===
+* (T51506) Now action=info gives estimates of actual watchers for a page.
+  See $wgRCMaxAge, $wgWatchersMaxAge and $wgUnwatchedPageSecret
+  to learn how to configure if needed.
 * Change tags can now be hidden in the interface by disabling the associated
   "tag-<id>" interface message.
 * ':' (colon) is now invalid in usernames for new accounts. Existing accounts
   are not affected.
 * Added a new hook, 'LogException', to log exceptions in nonstandard ways.
+* Revive the 'SpecialSearchResultsAppend' hook which occurs after the list of
+  search results are rendered. The initial use case is to append a "give us
+  feedback" link beneath the search results.
+* Added a new hook, 'RejectParserCacheValue', which allows extensions to
+  reject an otherwise-successful parser cache lookup. The intent is to allow
+  extensions to manage the eviction of archaic HTML output from the cache.
+* (T68699) The expiration of the UserID and Token login cookies
+  ($wgExtendedLoginCookieExpiration) can be configured independently of the
+  expiration of all other cookies ($wgCookieExpiration).
+* (T50519) Support for generating JPEG/PNG thumbnails from WebP images added
+  if ImageMagick is used as image scaler ($wgUseImageMagick = true). Uploading
+  of WebP images still disabled by default. Add $wgFileExtensions[] =
+  'webp'; to LocalSettings.php to enable uploading of WebP images.
+* Added new hooks 'EnhancedChangesListModifyLineData' &
+  'EnhancedChangesListModifyBlockLineData', to modify the data used to build
+  lines in enhanced recentchanges and watchlist.
 
 ==== External libraries ====
+* Update es5-shim from v4.0.0 to v4.1.5.
+* Update json2 from revision 2014-02-04 to 2015-05-03.
+* Update Sinon.JS from 1.10.3 to 1.15.4.
+* Upgrade jQuery Client from v1.0.0 to v2.0.0.
+* Added mediawiki/at-ease 1.0.0.
+* Update QUnit from v1.17.1 to v1.18.0.
 
 === Bug fixes in 1.26 ===
-* (bug 51283) load.php sometimes sends 304 response without full headers
+* (T53283) load.php sometimes sends 304 response without full headers
+* (T65198) Talk page tabs now have a "rel=discussion" attribute
 
 === Action API changes in 1.26 ===
+* New-style continuation is now the default for 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.
 * API action=query&list=tags: The displayname can now be boolean false if the
   tag is meant to be hidden from user interfaces.
 * action=import no longer allows both the namespace= and rootpage= parameters
   to be set. If they are both set, the value of rootpage= will be ignored.
 * prop=revision output in enum mode is now sorted by timestamp rather than
   revision ID. This usually won't make any difference.
+* (T102645) Namespace list from meta=siteinfo&siprop=namespaces is now an array
+  with formatversion=2.
+* Various other output from meta=siteinfo will now always be arrays instead of
+  sometimes being numerically-indexed objects with formatversion=2.
+* When errors about users being blocked are returned, they now include
+  information about the relevant block.
 
 === Action API internal changes in 1.26 ===
 
@@ -38,8 +78,11 @@ production.
 
 MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
+changes to languages because of Phabricator reports.
 
+* Languages added:
+** dty (डोटेली/Doteli), thanks to translators जनक राज भट्ट, बिप्लब आनन्द,
+   मेश सिंह बोहरा, and राम प्रसाद जोशी
 
 === Other changes in 1.26 ===
 * ChangeTags::tagDescription() will return false if the interface message
@@ -56,6 +99,11 @@ changes to languages because of Bugzilla reports.
 * mediaWiki.confirmCloseWindow now returns an object of functions, instead of
   one function. The callback can't be called directly any more. The callback
   function is replaced with confirmCloseWindow.release().
+* BREAKING CHANGE: Added an optional ResouceLoaderContext parameter to
+  ResourceLoaderModule::getDependencies(). Extension classes that override that
+  method should be updated. If they aren't updated, PHP Strict standards
+  warnings will appear when E_STRICT error reporting is enabled. Note: in the
+  near future, this parameter will probably become non-optional.
 * Removed maintenance script deleteImageMemcached.php.
 * MWFunction::newObj() was removed (deprecated in 1.25).
   ObjectFactory::getObjectFromSpec() should be used instead.
@@ -69,7 +117,16 @@ changes to languages because of Bugzilla reports.
   - The $uniq_prefix argument for Parser::extractTagsAndParams() and the
     $prefix argument for StripState::_construct() are deprecated and their
     value is ignored.
-
+* wfSuppressWarnings() and wfRestoreWarnings() were split into a separate library,
+  mediawiki/at-ease, and are now deprecated. Callers should use
+  MediaWiki\suppressWarnings() and MediaWiki\restoreWarnings() directly.
+* The Block class constructor now takes an associative array of parameters
+  instead of many optional positional arguments. Calling the constructor the old
+  way will issue a deprecation warning.
+* The jquery.mwExtension module was deprecated.
+* $wgSpecialPageGroups was removed (deprecated in 1.21).
+* SpecialPageFactory::setGroup was removed (deprecated in 1.21).
+* SpecialPageFactory::getGroup was removed (deprecated in 1.21).
 
 == Compatibility ==
 
index 3a79cb7..8e4da1e 100644 (file)
@@ -37,14 +37,12 @@ $wgAutoloadLocalClasses = array(
        'ApiFileRevert' => __DIR__ . '/includes/api/ApiFileRevert.php',
        'ApiFormatBase' => __DIR__ . '/includes/api/ApiFormatBase.php',
        'ApiFormatDbg' => __DIR__ . '/includes/api/ApiFormatDbg.php',
-       'ApiFormatDump' => __DIR__ . '/includes/api/ApiFormatDump.php',
        'ApiFormatFeedWrapper' => __DIR__ . '/includes/api/ApiFormatFeedWrapper.php',
        'ApiFormatJson' => __DIR__ . '/includes/api/ApiFormatJson.php',
        'ApiFormatNone' => __DIR__ . '/includes/api/ApiFormatNone.php',
        'ApiFormatPhp' => __DIR__ . '/includes/api/ApiFormatPhp.php',
        'ApiFormatRaw' => __DIR__ . '/includes/api/ApiFormatRaw.php',
        'ApiFormatTxt' => __DIR__ . '/includes/api/ApiFormatTxt.php',
-       'ApiFormatWddx' => __DIR__ . '/includes/api/ApiFormatWddx.php',
        'ApiFormatXml' => __DIR__ . '/includes/api/ApiFormatXml.php',
        'ApiFormatXmlRsd' => __DIR__ . '/includes/api/ApiRsd.php',
        'ApiFormatYaml' => __DIR__ . '/includes/api/ApiFormatYaml.php',
@@ -202,9 +200,9 @@ $wgAutoloadLocalClasses = array(
        'CategoryPage' => __DIR__ . '/includes/page/CategoryPage.php',
        'CategoryPager' => __DIR__ . '/includes/specials/SpecialCategories.php',
        'CategoryViewer' => __DIR__ . '/includes/CategoryViewer.php',
-       'CdbException' => __DIR__ . '/includes/CdbCompat.php',
-       'CdbReader' => __DIR__ . '/includes/CdbCompat.php',
-       'CdbWriter' => __DIR__ . '/includes/CdbCompat.php',
+       'CdbException' => __DIR__ . '/includes/compat/CdbCompat.php',
+       'CdbReader' => __DIR__ . '/includes/compat/CdbCompat.php',
+       'CdbWriter' => __DIR__ . '/includes/compat/CdbCompat.php',
        'CgzCopyTransaction' => __DIR__ . '/maintenance/storage/recompressTracked.php',
        'ChangePassword' => __DIR__ . '/maintenance/changePassword.php',
        'ChangeTags' => __DIR__ . '/includes/changetags/ChangeTags.php',
@@ -258,6 +256,7 @@ $wgAutoloadLocalClasses = array(
        'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
        'Content' => __DIR__ . '/includes/content/Content.php',
        'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php',
+       'ContentModelLogFormatter' => __DIR__ . '/includes/logging/ContentModelLogFormatter.php',
        'ContextSource' => __DIR__ . '/includes/context/ContextSource.php',
        'ContribsPager' => __DIR__ . '/includes/specials/SpecialContributions.php',
        'ConvertExtensionToRegistration' => __DIR__ . '/maintenance/convertExtensionToRegistration.php',
@@ -489,6 +488,7 @@ $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',
@@ -502,11 +502,13 @@ $wgAutoloadLocalClasses = array(
        'HTMLSelectField' => __DIR__ . '/includes/htmlform/HTMLSelectField.php',
        'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/HTMLSelectLimitField.php',
        'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/HTMLSelectNamespace.php',
+       'HTMLSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/HTMLSelectNamespaceWithButton.php',
        'HTMLSelectOrOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectOrOtherField.php',
        'HTMLSubmitField' => __DIR__ . '/includes/htmlform/HTMLSubmitField.php',
        'HTMLTagFilter' => __DIR__ . '/includes/htmlform/HTMLTagFilter.php',
        'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
+       'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLTextFieldWithButton.php',
        'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
        'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
        'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
@@ -607,6 +609,7 @@ $wgAutoloadLocalClasses = array(
        'LCStoreCDB' => __DIR__ . '/includes/cache/LocalisationCache.php',
        'LCStoreDB' => __DIR__ . '/includes/cache/LocalisationCache.php',
        'LCStoreNull' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LCStoreStaticArray' => __DIR__ . '/includes/cache/LCStoreStaticArray.php',
        'LangMemUsage' => __DIR__ . '/maintenance/language/langmemusage.php',
        'Language' => __DIR__ . '/languages/Language.php',
        'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php',
@@ -750,6 +753,7 @@ $wgAutoloadLocalClasses = array(
        '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\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
        'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
        'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php',
        'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php',
@@ -811,6 +815,7 @@ $wgAutoloadLocalClasses = array(
        'NullJob' => __DIR__ . '/includes/jobqueue/jobs/NullJob.php',
        'NullLockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php',
        'NullRepo' => __DIR__ . '/includes/filerepo/NullRepo.php',
+       'OOUIHTMLForm' => __DIR__ . '/includes/htmlform/OOUIHTMLForm.php',
        'ORAField' => __DIR__ . '/includes/db/DatabaseOracle.php',
        'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php',
        'ORMIterator' => __DIR__ . '/includes/db/ORMIterator.php',
@@ -823,7 +828,6 @@ $wgAutoloadLocalClasses = array(
        'ObjectFileCache' => __DIR__ . '/includes/cache/ObjectFileCache.php',
        'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
        'OldLocalFile' => __DIR__ . '/includes/filerepo/file/OldLocalFile.php',
-       'OOUIHTMLForm' => __DIR__ . '/includes/htmlform/OOUIHTMLForm.php',
        'OracleInstaller' => __DIR__ . '/includes/installer/OracleInstaller.php',
        'OracleUpdater' => __DIR__ . '/includes/installer/OracleUpdater.php',
        'OrphanStats' => __DIR__ . '/maintenance/storage/orphanStats.php',
@@ -874,6 +878,7 @@ $wgAutoloadLocalClasses = array(
        'Password' => __DIR__ . '/includes/password/Password.php',
        'PasswordError' => __DIR__ . '/includes/password/PasswordError.php',
        'PasswordFactory' => __DIR__ . '/includes/password/PasswordFactory.php',
+       'PasswordPolicyChecks' => __DIR__ . '/includes/password/PasswordPolicyChecks.php',
        'PatchSql' => __DIR__ . '/maintenance/patchSql.php',
        'PathRouter' => __DIR__ . '/includes/PathRouter.php',
        'PathRouterPatternReplacer' => __DIR__ . '/includes/PathRouter.php',
@@ -993,11 +998,11 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
        'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php',
        'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php',
-       'ResourceLoaderJqueryMsgDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderJqueryMsgDataModule.php',
-       'ResourceLoaderOOUIImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIImageModule.php',
+       'ResourceLoaderJqueryMsgModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderJqueryMsgModule.php',
        'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php',
        'ResourceLoaderLanguageNamesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
        'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php',
+       'ResourceLoaderOOUIImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIImageModule.php',
        'ResourceLoaderRawFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderRawFileModule.php',
        'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php',
        'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php',
@@ -1035,6 +1040,7 @@ $wgAutoloadLocalClasses = array(
        'RevisionList' => __DIR__ . '/includes/RevisionList.php',
        'RevisionListBase' => __DIR__ . '/includes/RevisionList.php',
        'RevisiondeleteAction' => __DIR__ . '/includes/actions/RevisiondeleteAction.php',
+       'RiffExtractor' => __DIR__ . '/includes/libs/RiffExtractor.php',
        'RightsLogFormatter' => __DIR__ . '/includes/logging/RightsLogFormatter.php',
        'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php',
        'RollbackEdits' => __DIR__ . '/maintenance/rollbackEdits.php',
@@ -1103,6 +1109,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialBookSources' => __DIR__ . '/includes/specials/SpecialBooksources.php',
        'SpecialCachedPage' => __DIR__ . '/includes/specials/SpecialCachedPage.php',
        'SpecialCategories' => __DIR__ . '/includes/specials/SpecialCategories.php',
+       'SpecialChangeContentModel' => __DIR__ . '/includes/specials/SpecialChangeContentModel.php',
        'SpecialChangeEmail' => __DIR__ . '/includes/specials/SpecialChangeEmail.php',
        'SpecialChangePassword' => __DIR__ . '/includes/specials/SpecialChangePassword.php',
        'SpecialComparePages' => __DIR__ . '/includes/specials/SpecialComparePages.php',
@@ -1295,12 +1302,13 @@ $wgAutoloadLocalClasses = array(
        'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
        'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php',
        'UserOptions' => __DIR__ . '/maintenance/userOptions.inc',
+       'UserPasswordPolicy' => __DIR__ . '/includes/password/UserPasswordPolicy.php',
        'UserRightsProxy' => __DIR__ . '/includes/UserRightsProxy.php',
        'UsercreateTemplate' => __DIR__ . '/includes/templates/Usercreate.php',
        'UserloginTemplate' => __DIR__ . '/includes/templates/Userlogin.php',
        'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php',
        'UsersPager' => __DIR__ . '/includes/specials/SpecialListusers.php',
-       'UtfNormal' => __DIR__ . '/includes/libs/normal/UtfNormal.php',
+       'UtfNormal' => __DIR__ . '/includes/compat/normal/UtfNormal.php',
        'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php',
        'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php',
        'ValidateRegistrationFile' => __DIR__ . '/maintenance/validateRegistrationFile.php',
@@ -1336,6 +1344,7 @@ $wgAutoloadLocalClasses = array(
        'WebInstallerUpgrade' => __DIR__ . '/includes/installer/WebInstallerPage.php',
        'WebInstallerUpgradeDoc' => __DIR__ . '/includes/installer/WebInstallerPage.php',
        'WebInstallerWelcome' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebPHandler' => __DIR__ . '/includes/media/WebP.php',
        'WebRequest' => __DIR__ . '/includes/WebRequest.php',
        'WebRequestUpload' => __DIR__ . '/includes/WebRequest.php',
        'WebResponse' => __DIR__ . '/includes/WebResponse.php',
index 9222aa4..2570a40 100644 (file)
                "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.12",
-               "oojs/oojs-ui": "0.11.3",
+               "mediawiki/at-ease": "1.0.0",
+               "oojs/oojs-ui": "0.11.8",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
                "wikimedia/assert": "0.2.2",
-               "wikimedia/composer-merge-plugin": "1.1.0",
+               "wikimedia/composer-merge-plugin": "1.2.1",
                "wikimedia/utfnormal": "1.0.2",
                "zordius/lightncandy": "0.21"
        },
        "require-dev": {
-               "jakub-onderka/php-parallel-lint": "~0.8",
+               "jakub-onderka/php-parallel-lint": "0.9",
                "justinrainbow/json-schema": "~1.3",
                "phpunit/phpunit": "3.7.37",
-               "mediawiki/mediawiki-codesniffer": "0.1.0"
+               "mediawiki/mediawiki-codesniffer": "0.3.0"
        },
        "suggest": {
                "ext-fileinfo": "*",
@@ -59,6 +60,7 @@
                "pre-install-cmd": "ComposerHookHandler::onPreInstall"
        },
        "config": {
+               "classmap-authoritative": true,
                "prepend-autoloader": false,
                "optimize-autoloader": true
        },
index 9949d13..77ae1dc 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-die("Not a valid entry point\n");
+die( "Not a valid entry point\n" );
 /**
  * This file does not hold any code. It is only there so we can generate
  * the doxygen documentation main page.
index d7d9e47..c9f629c 100644 (file)
                        "type": "object"
                },
                "FilterLogTypes": {
-                       "type": "array"
+                       "type": "object"
                },
                "LogNames": {
                        "type": "object"
index bf8d164..23df983 100644 (file)
@@ -1300,10 +1300,25 @@ $editToken: The user's edit token.
 
 'EnhancedChangesList::getLogText': to alter, remove or add to the links of a
 group of changes in EnhancedChangesList.
+Hook subscribers can return false to omit this line from recentchanges.
 $changesList: EnhancedChangesList object
 &$links: The links that were generated by EnhancedChangesList
 $block: The RecentChanges objects in that block
 
+'EnhancedChangesListModifyLineData': to alter data used to build
+a grouped recent change inner line in EnhancedChangesList.
+Hook subscribers can return false to omit this line from recentchanges.
+$changesList: EnhancedChangesList object
+&$data: An array with all the components that will be joined in order to create the line
+$block: An array of RecentChange objects in that block
+$rc: The RecentChange object for this line
+
+'EnhancedChangesListModifyBlockLineData': to alter data used to build
+a non-grouped recent change line in EnhancedChangesList.
+$changesList: EnhancedChangesList object
+&$data: An array with all the components that will be joined in order to create the line
+$rc: The RecentChange object for this line
+
 'ExemptFromAccountCreationThrottle': Exemption from the account creation
 throttle.
 $ip: The ip address of the user
@@ -2295,6 +2310,10 @@ run. Use when page save hooks require the presence of custom tables to ensure
 that tests continue to run properly.
 &$tables: array of table names
 
+'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
+
 'PerformRetroactiveAutoblock': Called before a retroactive autoblock is applied
 to a user.
 $block: Block object (which is set to be autoblocking)
@@ -2398,6 +2417,14 @@ names such as "oldid" that are preserved when using redirecting special pages
 such as Special:MyPage and Special:MyTalk.
 &$redirectParams: An array of parameters preserved by redirecting special pages.
 
+'RejectParserCacheValue': Return false to reject an otherwise usable
+cached value from the Parser cache. NOTE: CARELESS USE OF THIS HOOK CAN
+HAVE CATASTROPHIC CONSEQUENCES FOR HIGH-TRAFFIC INSTALLATIONS. USE WITH
+EXTREME CARE.
+$parserOutput: ParserOutput value.
+$wikiPage: WikiPage object.
+$parserOptions: ParserOptions object.
+
 'RequestContextCreateSkin': Called when RequestContext::getSkin creates a skin
 instance. Can be used by an extension override what skin is used in certain
 contexts.
@@ -2848,6 +2875,11 @@ $specialSearch: SpecialSearch object ($this)
 $output: $wgOut
 $term: Search term specified by the user
 
+'SpecialSearchResultsAppend': Called immediately before returning HTML
+on the search results page.  Useful for including a feedback link.
+$specialSearch: SpecialSearch object ($this)
+$output: $wgOut
+
 'SpecialSearchSetupEngine': Allows passing custom data to search engine.
 $search: SpecialSearch special page object
 $profile: String: current search profile
index 266f200..13b6961 100644 (file)
@@ -21,4 +21,4 @@ foreach( $pages as $page ){
 }
 
 $batch = new LinkBatch( $titles );
-$batch->execute();
\ No newline at end of file
+$batch->execute();
index 178bb15..53dff36 100644 (file)
@@ -49,7 +49,4 @@ Primary scripts:
 
 There is also a file with a .php5 extension for each script. They can be used if
 the web server needs a .php5 to run the file with the PHP 5 engine and runs .php
-scripts with PHP 4. To use these files, you have to modify $wgScriptExtension to
-'.php5' is LocalSettings.php but it is already done by the config script if you
-used mw-config/index.php5 for installation.
-
+scripts with PHP 4. You should not use them anymore.
index 48c7ce5..24e1b9a 100644 (file)
@@ -44,4 +44,4 @@ The XML elements are used as follows:
 ** link: Generic URL template, often the document root.
 ** page_path: (for mediawiki sites) URL template for wiki pages (corresponds to the target wiki's $wgArticlePath setting)
 ** file_path: (for mediawiki sites) URL pattern for application entry points and resources (corresponds to the target wiki's $wgScriptPath setting).
-* forward: Whether using a prefix defined by a localid tag in the URL will cause the request to be redirected to the corresponding page on the target wiki (currently unused). E.g. whether http://wiki.acme.com/wiki/foo:Buzz should be forwarded to http://wiki.foo.com/read/Buzz. (CAVEAT: not yet implement, can be specified but has no effect)
\ No newline at end of file
+* forward: Whether using a prefix defined by a localid tag in the URL will cause the request to be redirected to the corresponding page on the target wiki (currently unused). E.g. whether http://wiki.acme.com/wiki/foo:Buzz should be forwarded to http://wiki.foo.com/read/Buzz. (CAVEAT: not yet implement, can be specified but has no effect)
index b26e6a5..8859141 100644 (file)
@@ -195,7 +195,7 @@ function wfForbidden( $msg1, $msg2 ) {
                        wfMessage( $msg2, $args )->inLanguage( 'en' )->text()
        );
 
-       header( 'HTTP/1.0 403 Forbidden' );
+       HttpStatus::header( 403 );
        header( 'Cache-Control: no-cache' );
        header( 'Content-Type: text/html; charset=utf-8' );
        echo <<<ENDS
index b14114d..96892d7 100644 (file)
@@ -124,9 +124,9 @@ class AjaxDispatcher {
                                $result = call_user_func_array( $this->func_name, $this->args );
 
                                if ( $result === false || $result === null ) {
-                                       wfDebug( __METHOD__ . ' ERROR while dispatching '
-                                                       . $this->func_name . "(" . var_export( $this->args, true ) . "): "
-                                                       . "no data returned\n" );
+                                       wfDebug( __METHOD__ . ' ERROR while dispatching ' .
+                                               $this->func_name . "(" . var_export( $this->args, true ) . "): " .
+                                               "no data returned\n" );
 
                                        wfHttpError( 500, 'Internal Error',
                                                "{$this->func_name} returned no data" );
@@ -141,9 +141,9 @@ class AjaxDispatcher {
                                        wfDebug( __METHOD__ . ' dispatch complete for ' . $this->func_name . "\n" );
                                }
                        } catch ( Exception $e ) {
-                               wfDebug( __METHOD__ . ' ERROR while dispatching '
-                                               . $this->func_name . "(" . var_export( $this->args, true ) . "): "
-                                               . get_class( $e ) . ": " . $e->getMessage() . "\n" );
+                               wfDebug( __METHOD__ . ' ERROR while dispatching ' .
+                                       $this->func_name . "(" . var_export( $this->args, true ) . "): " .
+                                       get_class( $e ) . ": " . $e->getMessage() . "\n" );
 
                                if ( !headers_sent() ) {
                                        wfHttpError( 500, 'Internal Error',
index 8e9f490..6c2efc2 100644 (file)
@@ -86,7 +86,7 @@ class AjaxResponse {
 
                $this->mDisabled = false;
                $this->mText = '';
-               $this->mResponseCode = '200 OK';
+               $this->mResponseCode = 200;
                $this->mLastModified = false;
                $this->mContentType = 'application/x-wiki';
 
@@ -158,16 +158,20 @@ class AjaxResponse {
         */
        function sendHeaders() {
                if ( $this->mResponseCode ) {
-                       $n = preg_replace( '/^ *(\d+)/', '\1', $this->mResponseCode );
-                       header( "Status: " . $this->mResponseCode, true, (int)$n );
+                       // For back-compat, it is supported that mResponseCode be a string like " 200 OK"
+                       // (with leading space and the status message after). Cast response code to an integer
+                       // to take advantage of PHP's conversion rules which will turn "  200 OK" into 200.
+                       // http://php.net/string#language.types.string.conversion
+                       $n = intval( trim( $this->mResponseCode ) );
+                       HttpStatus::header( $n );
                }
 
-               header ( "Content-Type: " . $this->mContentType );
+               header( "Content-Type: " . $this->mContentType );
 
                if ( $this->mLastModified ) {
-                       header ( "Last-Modified: " . $this->mLastModified );
+                       header( "Last-Modified: " . $this->mLastModified );
                } else {
-                       header ( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
+                       header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
                }
 
                if ( $this->mCacheDuration ) {
@@ -189,20 +193,20 @@ class AjaxResponse {
 
                        } else {
                                # Let the client do the caching. Cache is not purged.
-                               header ( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" );
-                               header ( "Cache-Control: s-maxage={$this->mCacheDuration}," .
+                               header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" );
+                               header( "Cache-Control: s-maxage={$this->mCacheDuration}," .
                                        "public,max-age={$this->mCacheDuration}" );
                        }
 
                } else {
                        # always expired, always modified
-                       header ( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );    // Date in the past
-                       header ( "Cache-Control: no-cache, must-revalidate" );  // HTTP/1.1
-                       header ( "Pragma: no-cache" );                          // HTTP/1.0
+                       header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );    // Date in the past
+                       header( "Cache-Control: no-cache, must-revalidate" );  // HTTP/1.1
+                       header( "Pragma: no-cache" );                          // HTTP/1.0
                }
 
                if ( $this->mVary ) {
-                       header ( "Vary: " . $this->mVary );
+                       header( "Vary: " . $this->mVary );
                }
        }
 
@@ -246,7 +250,7 @@ class AjaxResponse {
                                $ismodsince >= $wgCacheEpoch
                        ) {
                                ini_set( 'zlib.output_compression', 0 );
-                               $this->setResponseCode( "304 Not Modified" );
+                               $this->setResponseCode( 304 );
                                $this->disable();
                                $this->mLastModified = $lastmod;
 
index d582201..c5a16fc 100644 (file)
@@ -23,15 +23,16 @@ class Block {
        /** @var string */
        public $mReason;
 
-       /** @var bool|string */
+       /** @var string */
        public $mTimestamp;
 
-       /** @var int */
+       /** @var bool */
        public $mAuto;
 
-       /** @var bool|string */
+       /** @var string */
        public $mExpiry;
 
+       /** @var bool */
        public $mHideName;
 
        /** @var int */
@@ -65,10 +66,10 @@ class Block {
        protected $blocker;
 
        /** @var bool */
-       protected $isHardblock = true;
+       protected $isHardblock;
 
        /** @var bool */
-       protected $isAutoblocking = true;
+       protected $isAutoblocking;
 
        # TYPE constants
        const TYPE_USER = 1;
@@ -78,55 +79,84 @@ class Block {
        const TYPE_ID = 5;
 
        /**
-        * @todo FIXME: Don't know what the best format to have for this constructor
-        *   is, but fourteen optional parameters certainly isn't it.
-        * @param string $address
-        * @param int $user
-        * @param int $by
-        * @param string $reason
-        * @param mixed $timestamp
-        * @param int $auto
-        * @param string $expiry
-        * @param int $anonOnly
-        * @param int $createAccount
-        * @param int $enableAutoblock
-        * @param int $hideName
-        * @param int $blockEmail
-        * @param int $allowUsertalk
-        * @param string $byText
+        * Create a new block with specified parameters on a user, IP or IP range.
+        *
+        * @param array $options Parameters of the block:
+        *     address string|User  Target user name, User object, IP address or IP range
+        *     user int             Override target user ID (for foreign users)
+        *     by int               User ID of the blocker
+        *     reason string        Reason of the block
+        *     timestamp string     The time at which the block comes into effect
+        *     auto bool            Is this an automatic block?
+        *     expiry string        Timestamp of expiration of the block or 'infinity'
+        *     anonOnly bool        Only disallow anonymous actions
+        *     createAccount bool   Disallow creation of new accounts
+        *     enableAutoblock bool Enable automatic blocking
+        *     hideName bool        Hide the target user name
+        *     blockEmail bool      Disallow sending emails
+        *     allowUsertalk bool   Allow the target to edit its own talk page
+        *     byText string        Username of the blocker (for foreign users)
+        *
+        * @since 1.26 accepts $options array instead of individual parameters; order
+        * of parameters above reflects the original order
         */
-       function __construct( $address = '', $user = 0, $by = 0, $reason = '',
-               $timestamp = 0, $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0,
-               $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byText = ''
-       ) {
-               if ( $timestamp === 0 ) {
-                       $timestamp = wfTimestampNow();
-               }
+       function __construct( $options = array() ) {
+               $defaults = array(
+                       'address'         => '',
+                       'user'            => null,
+                       'by'              => null,
+                       'reason'          => '',
+                       'timestamp'       => '',
+                       'auto'            => false,
+                       'expiry'          => '',
+                       'anonOnly'        => false,
+                       'createAccount'   => false,
+                       'enableAutoblock' => false,
+                       'hideName'        => false,
+                       'blockEmail'      => false,
+                       'allowUsertalk'   => false,
+                       'byText'          => '',
+               );
 
-               if ( count( func_get_args() ) > 0 ) {
-                       # Soon... :D
-                       # wfDeprecated( __METHOD__ . " with arguments" );
+               if ( func_num_args() > 1 || !is_array( $options ) ) {
+                       $options = array_combine(
+                               array_slice( array_keys( $defaults ), 0, func_num_args() ),
+                               func_get_args()
+                       );
+                       wfDeprecated( __METHOD__ . ' with multiple arguments', '1.26' );
                }
 
-               $this->setTarget( $address );
-               if ( $this->target instanceof User && $user ) {
-                       $this->forcedTargetID = $user; // needed for foreign users
+               $options += $defaults;
+
+               $this->setTarget( $options['address'] );
+
+               if ( $this->target instanceof User && $options['user'] ) {
+                       # Needed for foreign users
+                       $this->forcedTargetID = $options['user'];
                }
-               if ( $by ) { // local user
-                       $this->setBlocker( User::newFromId( $by ) );
-               } else { // foreign user
-                       $this->setBlocker( $byText );
+
+               if ( $options['by'] ) {
+                       # Local user
+                       $this->setBlocker( User::newFromID( $options['by'] ) );
+               } else {
+                       # Foreign user
+                       $this->setBlocker( $options['byText'] );
                }
-               $this->mReason = $reason;
-               $this->mTimestamp = wfTimestamp( TS_MW, $timestamp );
-               $this->mAuto = $auto;
-               $this->isHardblock( !$anonOnly );
-               $this->prevents( 'createaccount', $createAccount );
-               $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $expiry );
-               $this->isAutoblocking( $enableAutoblock );
-               $this->mHideName = $hideName;
-               $this->prevents( 'sendemail', $blockEmail );
-               $this->prevents( 'editownusertalk', !$allowUsertalk );
+
+               $this->mReason = $options['reason'];
+               $this->mTimestamp = wfTimestamp( TS_MW, $options['timestamp'] );
+               $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $options['expiry'] );
+
+               # Boolean settings
+               $this->mAuto = (bool)$options['auto'];
+               $this->mHideName = (bool)$options['hideName'];
+               $this->isHardblock( !$options['anonOnly'] );
+               $this->isAutoblocking( (bool)$options['enableAutoblock'] );
+
+               # Prevention measures
+               $this->prevents( 'sendemail', (bool)$options['blockEmail'] );
+               $this->prevents( 'editownusertalk', !$options['allowUsertalk'] );
+               $this->prevents( 'createaccount', (bool)$options['createAccount'] );
 
                $this->mFromMaster = false;
        }
@@ -1109,7 +1139,7 @@ class Block {
                $blocks = array();
                foreach ( $rows as $row ) {
                        $block = self::newFromRow( $row );
-                       if ( !$block->deleteIfExpired()  ) {
+                       if ( !$block->deleteIfExpired() ) {
                                $blocks[] = $block;
                        }
                }
index 66079c0..e2c31a6 100644 (file)
@@ -329,7 +329,7 @@ class CategoryViewer extends ContextSource {
                                        'category' => array( 'LEFT JOIN', array(
                                                'cat_title = page_title',
                                                'page_namespace' => NS_CATEGORY
-                                       ))
+                                       ) )
                                )
                        );
 
diff --git a/includes/CdbCompat.php b/includes/CdbCompat.php
deleted file mode 100644 (file)
index 0074cc9..0000000
+++ /dev/null
@@ -1,45 +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
- */
-
-/***
- * This file contains a set of backwards-compatability class names
- * after the cdb functions were moved out into a separate library
- * and put under a proper namespace
- *
- * @since 1.25
- */
-
-/**
- * @deprecated since 1.25
- */
-abstract class CdbReader extends \Cdb\Reader {
-}
-
-/**
- * @deprecated since 1.25
- */
-abstract class CdbWriter extends \Cdb\Writer {
-}
-
-/**
- * @deprecated since 1.25
- */
-class CdbException extends \Cdb\Exception {
-}
index 481d8e7..c1f0b38 100644 (file)
@@ -320,16 +320,16 @@ class IcuCollation extends Collation {
                // intl extension produces non null-terminated
                // strings. Appending '' fixes it so that it doesn't generate
                // a warning on each access in debug php.
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $key = $this->mainCollator->getSortKey( $string ) . '';
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                return $key;
        }
 
        function getPrimarySortKey( $string ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $key = $this->primaryCollator->getSortKey( $string ) . '';
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                return $key;
        }
 
index bd0fbc2..813d11d 100644 (file)
@@ -82,6 +82,14 @@ $wgVersion = '1.26alpha';
  */
 $wgSitename = 'MediaWiki';
 
+/**
+ * When the wiki is running behind a proxy and this is set to true, assumes that the proxy exposes
+ * the wiki on the standard ports (443 for https and 80 for http).
+ * @var bool
+ * @since 1.26
+ */
+$wgAssumeProxiesUseDefaultProtocolPorts = true;
+
 /**
  * URL of the server.
  *
@@ -472,13 +480,13 @@ $wgImgAuthUrlPathMap = array();
  *
  * These settings describe a foreign MediaWiki installation. They are optional, and will be ignored
  * for local repositories:
- *   - descBaseUrl       URL of image description pages, e.g. http://en.wikipedia.org/wiki/File:
+ *   - descBaseUrl       URL of image description pages, e.g. https://en.wikipedia.org/wiki/File:
  *   - scriptDirUrl      URL of the MediaWiki installation, equivalent to $wgScriptPath, e.g.
- *                       http://en.wikipedia.org/w
+ *                       https://en.wikipedia.org/w
  *   - scriptExtension   Script extension of the MediaWiki installation, equivalent to
  *                       $wgScriptExtension, e.g. .php5 defaults to .php
  *
- *   - articleUrl        Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1
+ *   - articleUrl        Equivalent to $wgArticlePath, e.g. https://en.wikipedia.org/wiki/$1
  *   - fetchDescription  Fetch the text of the remote file description page. Equivalent to
  *                       $wgFetchCommonsDescriptions.
  *   - abbrvThreshold    File names over this size will use the short form of thumbnail names.
@@ -709,7 +717,7 @@ $wgMaxUploadSize = 1024 * 1024 * 100; # 100MB
  *
  * @par Example:
  * @code
- * $wgUploadNavigationUrl = 'http://commons.wikimedia.org/wiki/Special:Upload';
+ * $wgUploadNavigationUrl = 'https://commons.wikimedia.org/wiki/Special:Upload';
  * @endcode
  */
 $wgUploadNavigationUrl = false;
@@ -769,7 +777,7 @@ $wgHashedSharedUploadDirectory = true;
  *
  * Please specify the namespace, as in the example below.
  */
-$wgRepositoryBaseUrl = "http://commons.wikimedia.org/wiki/File:";
+$wgRepositoryBaseUrl = "https://commons.wikimedia.org/wiki/File:";
 
 /**
  * This is the list of preferred extensions for uploading files. Uploading files
@@ -876,6 +884,7 @@ $wgMediaHandlers = array(
        'image/png' => 'PNGHandler',
        'image/gif' => 'GIFHandler',
        'image/tiff' => 'TiffHandler',
+       'image/webp' => 'WebPHandler',
        'image/x-ms-bmp' => 'BmpHandler',
        'image/x-bmp' => 'BmpHandler',
        'image/x-xcf' => 'XCFHandler',
@@ -970,6 +979,14 @@ $wgJpegTran = '/usr/bin/jpegtran';
  */
 $wgExiv2Command = '/usr/bin/exiv2';
 
+
+/**
+ * Path to exiftool binary. Used for lossless ICC profile swapping.
+ *
+ * @since 1.26
+ */
+$wgExiftool = '/usr/bin/exiftool';
+
 /**
  * Scalable Vector Graphics (SVG) may be uploaded as images.
  * Since SVG support is not yet standard in browsers, it is
@@ -1322,6 +1339,14 @@ $wgUploadThumbnailRenderHttpCustomHost = false;
  */
 $wgUploadThumbnailRenderHttpCustomDomain = false;
 
+/**
+ * When this variable is true and JPGs use the sRGB ICC profile, swaps it for the more lightweight
+ * (and free) TinyRGB profile when generating thumbnails.
+ *
+ * @since 1.26
+ */
+$wgUseTinyRGBForJPGThumbnails = false;
+
 /**
  * Default parameters for the "<gallery>" tag
  */
@@ -1572,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;
 
@@ -2151,6 +2177,19 @@ $wgObjectCaches = array(
        CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ),
        CACHE_MEMCACHED => array( 'factory' => 'ObjectCache::newMemcached', 'loggroup' => 'memcached' ),
 
+       'db-replicated' => array(
+               'class'       => 'ReplicatedBagOStuff',
+               'readFactory' => array(
+                       'class' => 'SqlBagOStuff',
+                       'args'  => array( array( 'slaveOnly' => true ) )
+               ),
+               'writeFactory' => array(
+                       'class' => 'SqlBagOStuff',
+                       'args'  => array( array( 'slaveOnly' => false ) )
+               ),
+               'loggroup'  => 'SQLBagOStuff'
+       ),
+
        'apc' => array( 'class' => 'APCBagOStuff' ),
        'xcache' => array( 'class' => 'XCacheBagOStuff' ),
        'wincache' => array( 'class' => 'WinCacheBagOStuff' ),
@@ -2213,6 +2252,7 @@ $wgWANObjectCaches = array(
  * lightweight data like hit counters and user activity. Sites with multiple
  * data-centers should have this use a store that replicates all writes. The
  * store should have enough consistency for CAS operations to be usable.
+ * Reads outside of those needed for merge() may be eventually consistent.
  *
  * The options are:
  *   - db:      Store cache objects in the DB
@@ -2221,7 +2261,7 @@ $wgWANObjectCaches = array(
  *
  * @since 1.26
  */
-$wgMainStash = 'db';
+$wgMainStash = 'db-replicated';
 
 /**
  * The expiry time for the parser cache, in seconds.
@@ -2297,11 +2337,13 @@ $wgAdaptiveMessageCache = false;
  * Localisation cache configuration. Associative array with keys:
  * class:       The class to use. May be overridden by extensions.
  *
- * store:       The location to store cache data. May be 'files', 'db' or
+ * store:       The location to store cache data. May be 'files', 'array', 'db' or
  *              'detect'. If set to "files", data will be in CDB files. If set
  *              to "db", data will be stored to the database. If set to
  *              "detect", files will be used if $wgCacheDirectory is set,
  *              otherwise the database will be used.
+ *              "array" is an experimental option that uses PHP files that
+ *              store static arrays.
  *
  * storeClass:  The class name for the underlying storage. If set to a class
  *              name, it overrides the "store" setting.
@@ -2500,13 +2542,16 @@ $wgInternalServer = false;
 /**
  * Cache timeout for the squid, will be sent as s-maxage (without ESI) or
  * Surrogate-Control (with ESI). Without ESI, you should strip out s-maxage in
- * the Squid config. 18000 seconds = 5 hours, more cache hits with 2678400 = 31
- * days
+ * the Squid config.
+ *
+* 18000 seconds = 5 hours, more cache hits with 2678400 = 31 days.
  */
 $wgSquidMaxage = 18000;
 
 /**
  * Default maximum age for raw CSS/JS accesses
+ *
+ * 300 seconds = 5 minutes.
  */
 $wgForcedRawSMaxage = 300;
 
@@ -2795,14 +2840,14 @@ $wgBrowserBlackList = array(
         * - Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)
         * - [...]
         *
-        * @link http://en.wikipedia.org/w/index.php?diff=12356041&oldid=12355864
-        * @link http://en.wikipedia.org/wiki/Template%3AOS9
+        * @link https://en.wikipedia.org/w/index.php?diff=12356041&oldid=12355864
+        * @link https://en.wikipedia.org/wiki/Template%3AOS9
         */
        '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/',
 
        /**
         * Google wireless transcoder, seems to eat a lot of chars alive
-        * http://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361
+        * https://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361
         */
        '/^Mozilla\/4\.0 \(compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;\)/'
 );
@@ -4250,6 +4295,59 @@ $wgActiveUserDays = 30;
  * @{
  */
 
+/**
+ * Password policy for local wiki users. A user's effective policy
+ * is the superset of all policy statements from the policies for the
+ * groups where the user is a member. If more than one group policy
+ * include the same policy statement, the value is the max() of the
+ * values. Note true > false. The 'default' policy group is required,
+ * and serves as the minimum policy for all users. New statements can
+ * be added by appending to $wgPasswordPolicy['checks'].
+ * Statements:
+ *     - MinimalPasswordLength - minimum length a user can set
+ *     - MinimumPasswordLengthToLogin - passwords shorter than this will
+ *             not be allowed to login, regardless if it is correct.
+ *     - MaximalPasswordLength - maximum length password a user is allowed
+ *             to attempt. Prevents DoS attacks with pbkdf2.
+ *     - PasswordCannotMatchUsername - Password cannot match username to
+ *     - PasswordCannotMatchBlacklist - Username/password combination cannot
+ *             match a specific, hardcoded blacklist.
+ * @since 1.26
+ */
+$wgPasswordPolicy = array(
+       'policies' => array(
+               'bureaucrat' => array(
+                       'MinimalPasswordLength' => 8,
+                       'MinimumPasswordLengthToLogin' => 1,
+                       'PasswordCannotMatchUsername' => true,
+               ),
+               'sysop' => array(
+                       'MinimalPasswordLength' => 8,
+                       'MinimumPasswordLengthToLogin' => 1,
+                       'PasswordCannotMatchUsername' => true,
+               ),
+               'bot' => array(
+                       'MinimalPasswordLength' => 8,
+                       'MinimumPasswordLengthToLogin' => 1,
+                       'PasswordCannotMatchUsername' => true,
+               ),
+               'default' => array(
+                       'MinimalPasswordLength' => 1,
+                       'PasswordCannotMatchUsername' => true,
+                       'PasswordCannotMatchBlacklist' => true,
+                       'MaximalPasswordLength' => 4096,
+               ),
+       ),
+       'checks' => array(
+               'MinimalPasswordLength' => 'PasswordPolicyChecks::checkMinimalPasswordLength',
+               'MinimumPasswordLengthToLogin' => 'PasswordPolicyChecks::checkMinimumPasswordLengthToLogin',
+               'PasswordCannotMatchUsername' => 'PasswordPolicyChecks::checkPasswordCannotMatchUsername',
+               'PasswordCannotMatchBlacklist' => 'PasswordPolicyChecks::checkPasswordCannotMatchBlacklist',
+               'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength',
+       ),
+);
+
+
 /**
  * For compatibility with old installations set to false
  * @deprecated since 1.24 will be removed in future
@@ -4259,8 +4357,9 @@ $wgPasswordSalt = true;
 /**
  * Specifies the minimal length of a user password. If set to 0, empty pass-
  * words are allowed.
+ * @deprecated since 1.26, use $wgPasswordPolicy's MinimalPasswordLength.
  */
-$wgMinimalPasswordLength = 1;
+$wgMinimalPasswordLength = false;
 
 /**
  * Specifies the maximal length of a user password (T64685).
@@ -4271,8 +4370,9 @@ $wgMinimalPasswordLength = 1;
  *
  * @warning Unlike other password settings, user with passwords greater than
  *      the maximum will not be able to log in.
+ * @deprecated since 1.26, use $wgPasswordPolicy's MaximalPasswordLength.
  */
-$wgMaximalPasswordLength = 4096;
+$wgMaximalPasswordLength = false;
 
 /**
  * Specifies if users should be sent to a password-reset form on login, if their
@@ -4467,7 +4567,7 @@ $wgUserrightsInterwikiDelimiter = '@';
 /**
  * This is to let user authenticate using https when they come from http.
  * Based on an idea by George Herbert on wikitech-l:
- * http://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html
+ * https://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html
  * @since 1.17
  */
 $wgSecureLogin = false;
@@ -4994,7 +5094,7 @@ $wgAccountCreationThrottle = 0;
  * There's no administrator override on-wiki, so be careful what you set. :)
  * May be an array of regexes or a single string for backwards compatibility.
  *
- * @see http://en.wikipedia.org/wiki/Regular_expression
+ * @see https://en.wikipedia.org/wiki/Regular_expression
  *
  * @note Each regex needs a beginning/end delimiter, eg: # or /
  */
@@ -5192,6 +5292,22 @@ $wgProxyList = array();
  */
 $wgCookieExpiration = 180 * 86400;
 
+/**
+ * The identifiers of the login cookies that can have their lifetimes
+ * extended independently of all other login cookies.
+ *
+ * @var string[]
+ */
+$wgExtendedLoginCookies = array( 'UserID', 'Token' );
+
+/**
+ * Default login cookie lifetime, in seconds. Setting
+ * $wgExtendLoginCookieExpiration to null will use $wgCookieExpiration to
+ * calculate the cookie lifetime. As with $wgCookieExpiration, 0 will make
+ * login cookies session-only.
+ */
+$wgExtendedLoginCookieExpiration = null;
+
 /**
  * Set to set an explicit domain on the login cookies eg, "justthis.domain.org"
  * or ".any.subdomain.net"
@@ -5525,7 +5641,7 @@ $wgProfilePerHost = null;
  *
  * The host should be running a daemon which can be obtained from MediaWiki
  * Git at:
- * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
+ * https://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
  *
  * @deprecated set $wgProfiler['udphost'] instead
  */
@@ -5581,6 +5697,29 @@ $wgAggregateStatsID = false;
  */
 $wgStatsFormatString = "stats/%s - %s 1 1 1 1 %s\n";
 
+/**
+ * Destination of statsd metrics.
+ *
+ * A host or host:port of a statsd server. Port defaults to 8125.
+ *
+ * If not set, statsd metrics will not be collected.
+ *
+ * @see wfLogProfilingData
+ * @since 1.25
+ */
+$wgStatsdServer = false;
+
+/**
+ * Prefix for metric names sent to wgStatsdServer.
+ *
+ * Defaults to "MediaWiki".
+ *
+ * @see RequestContext::getStats
+ * @see BufferingStatsdDataFactory
+ * @since 1.25
+ */
+$wgStatsdMetricPrefix = false;
+
 /**
  * InfoAction retrieves a list of transclusion links (both to and from).
  * This number puts a limit on that query in the case of highly transcluded
@@ -5913,6 +6052,21 @@ $wgGitRepositoryViewers = array(
  */
 $wgRCMaxAge = 90 * 24 * 3600;
 
+/**
+ * Page watchers inactive for more than this many seconds are considered inactive.
+ * Used mainly by action=info. Default: 180 days = about six months.
+ * @since 1.26
+ */
+$wgWatchersMaxAge = 180 * 24 * 3600;
+
+/**
+ * If active watchers (per above) are this number or less, do not disclose it.
+ * Left to 1, prevents unprivileged users from knowing for sure that there are 0.
+ * Set to -1 if you want to always complement watchers count with this info.
+ * @since 1.26
+ */
+$wgUnwatchedPageSecret = 1;
+
 /**
  * Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers
  * higher than what will be stored. Note that this is disabled by default
@@ -6698,6 +6852,7 @@ $wgLogTypes = array(
        'suppress',
        'tag',
        'managetags',
+       'contentmodel',
 );
 
 /**
@@ -6832,6 +6987,7 @@ $wgLogActionsHandlers = array(
        'suppress/reblock' => 'BlockLogFormatter',
        'import/upload' => 'LogFormatter',
        'import/interwiki' => 'LogFormatter',
+       'contentmodel/change' => 'ContentModelLogFormatter',
 );
 
 /**
@@ -6857,14 +7013,6 @@ $wgAllowSpecialInclusion = true;
  */
 $wgDisableQueryPageUpdate = false;
 
-/**
- * List of special pages, followed by what subtitle they should go under
- * at Special:SpecialPages
- *
- * @deprecated since 1.21 Override SpecialPage::getGroupName instead
- */
-$wgSpecialPageGroups = array();
-
 /**
  * On Special:Unusedimages, consider images "used", if they are put
  * into a category. Default (false) is not to count those as used.
index 262471e..d55bbcf 100644 (file)
@@ -198,7 +198,7 @@ define( 'LIST_OR', 4 );
 /**
  * Unicode and normalisation related
  */
-require_once __DIR__ . '/libs/normal/UtfNormalDefines.php';
+require_once __DIR__ . '/compat/normal/UtfNormalDefines.php';
 
 /**@{
  * Hook support constants
index e88baaf..bf322ae 100644 (file)
@@ -167,6 +167,12 @@ class EditPage {
         */
        const AS_PARSE_ERROR = 240;
 
+       /**
+        * Status: when changing the content model is disallowed due to
+        * $wgContentHandlerUseDB being false
+        */
+       const AS_CANNOT_USE_CUSTOM_MODEL = 241;
+
        /**
         * HTML id and name for the beginning of the edit form.
         */
@@ -1037,7 +1043,6 @@ class EditPage {
                                $undo = $wgRequest->getInt( 'undo' );
 
                                if ( $undo > 0 && $undoafter > 0 ) {
-
                                        $undorev = Revision::newFromId( $undo );
                                        $oldrev = Revision::newFromId( $undoafter );
 
@@ -1046,8 +1051,8 @@ class EditPage {
                                        # Otherwise, $content will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
-                                               !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
-
+                                               !$oldrev->isDeleted( Revision::DELETED_TEXT )
+                                       ) {
                                                $content = $this->mArticle->getUndoContent( $undorev, $oldrev );
 
                                                if ( $content === false ) {
@@ -1242,9 +1247,9 @@ class EditPage {
 
                        if ( !$converted ) {
                                //TODO: somehow show a warning to the user!
-                               wfDebug( "Attempt to preload incompatible content: "
-                                               . "can't convert " . $content->getModel()
-                                               . " to " . $handler->getModelID() );
+                               wfDebug( "Attempt to preload incompatible content: " .
+                                       "can't convert " . $content->getModel() .
+                                       " to " . $handler->getModelID() );
 
                                return $handler->makeEmptyContent();
                        }
@@ -1362,6 +1367,7 @@ class EditPage {
                        case self::AS_HOOK_ERROR:
                                return false;
 
+                       case self::AS_CANNOT_USE_CUSTOM_MODEL:
                        case self::AS_PARSE_ERROR:
                                $wgOut->addWikiText( '<div class="error">' . $status->getWikiText() . '</div>' );
                                return true;
@@ -1544,6 +1550,7 @@ class EditPage {
         */
        function internalAttemptSave( &$result, $bot = false ) {
                global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize;
+               global $wgContentHandlerUseDB;
 
                $status = Status::newGood();
 
@@ -1664,11 +1671,19 @@ class EditPage {
                        }
                }
 
-               if ( $this->contentModel !== $this->mTitle->getContentModel()
-                       && !$wgUser->isAllowed( 'editcontentmodel' )
-               ) {
-                       $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
-                       return $status;
+               $changingContentModel = false;
+               if ( $this->contentModel !== $this->mTitle->getContentModel() ) {
+                       if ( !$wgContentHandlerUseDB ) {
+                               $status->fatal( 'editpage-cannot-use-custom-model' );
+                               $status->value = self::AS_CANNOT_USE_CUSTOM_MODEL;
+                               return $status;
+                       } elseif ( !$wgUser->isAllowed( 'editcontentmodel' ) ) {
+                               $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
+                               return $status;
+
+                       }
+                       $changingContentModel = true;
+                       $oldContentModel = $this->mTitle->getContentModel();
                }
 
                if ( $this->changeTags ) {
@@ -1967,9 +1982,39 @@ class EditPage {
                        } );
                }
 
+               // If the content model changed, add a log entry
+               if ( $changingContentModel ) {
+                       $this->addContentModelChangeLogEntry(
+                               $wgUser,
+                               $oldContentModel,
+                               $this->contentModel,
+                               $this->summary
+                       );
+               }
+
                return $status;
        }
 
+       /**
+        * @param Title $title
+        * @param string $oldModel
+        * @param string $newModel
+        * @param string $reason
+        */
+       protected function addContentModelChangeLogEntry( User $user, $oldModel, $newModel, $reason ) {
+               $log = new ManualLogEntry( 'contentmodel', 'change' );
+               $log->setPerformer( $user );
+               $log->setTarget( $this->mTitle );
+               $log->setComment( $reason );
+               $log->setParameters( array(
+                       '4::oldmodel' => $oldModel,
+                       '5::newmodel' => $newModel
+               ) );
+               $logid = $log->insert();
+               $log->publish( $logid );
+       }
+
+
        /**
         * Register the change of watch status
         */
@@ -3464,6 +3509,8 @@ HTML
                global $wgOut, $wgUser, $wgRawHtml, $wgLang;
                global $wgAllowUserCss, $wgAllowUserJs;
 
+               $stats = $wgOut->getContext()->getStats();
+
                if ( $wgRawHtml && !$this->mTokenOk ) {
                        // Could be an offsite preview attempt. This is very unsafe if
                        // HTML is enabled, as it could be an attack.
@@ -3475,6 +3522,7 @@ HTML
                                $parsedNote = $wgOut->parse( "<div class='previewnote'>" .
                                        wfMessage( 'session_fail_preview_html' )->text() . "</div>", true, /* interface */true );
                        }
+                       $stats->increment( 'edit.failures.session_loss' );
                        return $parsedNote;
                }
 
@@ -3498,11 +3546,16 @@ HTML
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = wfMessage( 'token_suffix_mismatch' )->plain();
+                                       $stats->increment( 'edit.failures.bad_token' );
                                } else {
                                        $note = wfMessage( 'session_fail_preview' )->plain();
+                                       $stats->increment( 'edit.failures.session_loss' );
                                }
                        } elseif ( $this->incompleteForm ) {
                                $note = wfMessage( 'edit_form_incomplete' )->plain();
+                               if ( $this->mTriedSave ) {
+                                       $stats->increment( 'edit.failures.incomplete_form' );
+                               }
                        } else {
                                $note = wfMessage( 'previewnote' )->plain() . ' ' . $continueEditing;
                        }
index 6d74af2..bcd6db2 100644 (file)
@@ -297,7 +297,7 @@ class FileDeleteForm {
 
                        if ( $wgUser->isAllowed( 'editinterface' ) ) {
                                $title = wfMessage( 'filedelete-reason-dropdown' )->inContentLanguage()->getTitle();
-                               $link = Linker::link(
+                               $link = Linker::linkKnown(
                                        $title,
                                        wfMessage( 'filedelete-edit-reasonlist' )->escaped(),
                                        array(),
index fb298cf..7f05bb0 100644 (file)
@@ -281,9 +281,9 @@ class GitInfo {
                        $config = "{$this->basedir}/config";
                        $url = false;
                        if ( is_readable( $config ) ) {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $configArray = parse_ini_file( $config, true );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                                $remote = false;
 
                                // Use the "origin" remote repo if available or any other repo if not.
index 8b3b959..00d3d3a 100644 (file)
@@ -402,12 +402,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 +431,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 +442,7 @@ function wfUrlencode( $s ) {
        $s = urlencode( $s );
        $s = str_ireplace(
                $needle,
-               array( ';', '@', '$', '!', '*', '(', ')', ',', '/', ':' ),
+               array( ';', '@', '$', '!', '*', '(', ')', ',', '/', '~', ':' ),
                $s
        );
 
@@ -860,9 +865,9 @@ function wfParseUrl( $url ) {
        if ( $wasRelative ) {
                $url = "http:$url";
        }
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        $bits = parse_url( $url );
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
        // parse_url() returns an array without scheme for some invalid URLs, e.g.
        // parse_url("%0Ahttp://example.com") == array( 'host' => '%0Ahttp', 'path' => 'example.com' )
        if ( !$bits || !isset( $bits['scheme'] ) ) {
@@ -1248,7 +1253,7 @@ function wfLogProfilingData() {
        $profiler->logData();
 
        $config = $context->getConfig();
-       if ( $config->has( 'StatsdServer' ) ) {
+       if ( $config->get( 'StatsdServer' ) ) {
                $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
                $statsdHost = $statsdServer[0];
                $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
@@ -1756,7 +1761,7 @@ function wfMsgExt( $key, $options ) {
        }
 
        if ( in_array( 'escape', $options, true ) ) {
-               $string = htmlspecialchars ( $string );
+               $string = htmlspecialchars( $string );
        } elseif ( in_array( 'escapenoentities', $options, true ) ) {
                $string = Sanitizer::escapeHtmlAllowEntities( $string );
        }
@@ -2129,15 +2134,14 @@ function wfVarDump( $var ) {
  */
 function wfHttpError( $code, $label, $desc ) {
        global $wgOut;
-       header( "HTTP/1.0 $code $label" );
-       header( "Status: $code $label" );
+       HttpStatus::header( $code );
        if ( $wgOut ) {
                $wgOut->disable();
                $wgOut->sendCacheControl();
        }
 
        header( 'Content-type: text/html; charset=utf-8' );
-       print "<!doctype html>" .
+       print '<!DOCTYPE html>' .
                '<html><head><title>' .
                htmlspecialchars( $label ) .
                '</title></head><body><h1>' .
@@ -2323,40 +2327,19 @@ function wfNegotiateType( $cprefs, $sprefs ) {
 /**
  * Reference-counted warning suppression
  *
+ * @deprecated since 1.26, use MediaWiki\suppressWarnings() directly
  * @param bool $end
  */
 function wfSuppressWarnings( $end = false ) {
-       static $suppressCount = 0;
-       static $originalLevel = false;
-
-       if ( $end ) {
-               if ( $suppressCount ) {
-                       --$suppressCount;
-                       if ( !$suppressCount ) {
-                               error_reporting( $originalLevel );
-                       }
-               }
-       } else {
-               if ( !$suppressCount ) {
-                       $originalLevel = error_reporting( E_ALL & ~(
-                               E_WARNING |
-                               E_NOTICE |
-                               E_USER_WARNING |
-                               E_USER_NOTICE |
-                               E_DEPRECATED |
-                               E_USER_DEPRECATED |
-                               E_STRICT
-                       ) );
-               }
-               ++$suppressCount;
-       }
+       MediaWiki\suppressWarnings( $end );
 }
 
 /**
+ * @deprecated since 1.26, use MediaWiki\restoreWarnings() directly
  * Restore error level to previous value
  */
 function wfRestoreWarnings() {
-       wfSuppressWarnings( true );
+       MediaWiki\suppressWarnings( true );
 }
 
 # Autodetect, convert and provide timestamps of various types
@@ -2537,9 +2520,9 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
        }
 
        // Turn off the normal warning, we're doing our own below
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        $ok = mkdir( $dir, $mode, true ); // PHP5 <3
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
 
        if ( !$ok ) {
                //directory may have been created on another request since we last checked
@@ -2780,7 +2763,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
 
        $useLogPipe = false;
        if ( is_executable( '/bin/bash' ) ) {
-               $time = intval ( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
+               $time = intval( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
                if ( isset( $limits['walltime'] ) ) {
                        $wallTime = intval( $limits['walltime'] );
                } elseif ( isset( $limits['time'] ) ) {
@@ -2788,8 +2771,8 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
                } else {
                        $wallTime = intval( $wgMaxShellWallClockTime );
                }
-               $mem = intval ( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
-               $filesize = intval ( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
+               $mem = intval( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
+               $filesize = intval( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
 
                if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
                        $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
@@ -3034,9 +3017,9 @@ function wfMerge( $old, $mine, $yours, &$result ) {
 
        # This check may also protect against code injection in
        # case of broken installations.
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
 
        if ( !$haveDiff3 ) {
                wfDebug( "diff3 not found\n" );
@@ -3113,9 +3096,9 @@ function wfDiff( $before, $after, $params = '-u' ) {
        }
 
        global $wgDiff;
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        $haveDiff = $wgDiff && file_exists( $wgDiff );
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
 
        # This check may also protect against code injection in
        # case of broken installations.
@@ -3492,9 +3475,9 @@ function wfSetupSession( $sessionId = false ) {
        } else {
                wfFixSessionID();
        }
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        session_start();
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
 }
 
 /**
@@ -3517,7 +3500,7 @@ function wfGetPrecompiledData( $name ) {
 }
 
 /**
- * Get a cache key
+ * Make a cache key for the local wiki.
  *
  * @param string $args,...
  * @return string
@@ -3532,7 +3515,9 @@ function wfMemcKey( /*...*/ ) {
 }
 
 /**
- * Get a cache key for a foreign DB
+ * Make a cache key for a foreign DB.
+ *
+ * Must match what wfMemcKey() would produce in context of the foreign wiki.
  *
  * @param string $db
  * @param string $prefix
@@ -3542,6 +3527,7 @@ function wfMemcKey( /*...*/ ) {
 function wfForeignMemcKey( $db, $prefix /*...*/ ) {
        $args = array_slice( func_get_args(), 2 );
        if ( $prefix ) {
+               // Match wfWikiID() logic
                $key = "$db-$prefix:" . implode( ':', $args );
        } else {
                $key = $db . ':' . implode( ':', $args );
@@ -3549,6 +3535,24 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) {
        return str_replace( ' ', '_', $key );
 }
 
+/**
+ * Make a cache key with database-agnostic prefix.
+ *
+ * Doesn't have a wiki-specific namespace. Uses a generic 'global' prefix
+ * instead. Must have a prefix as otherwise keys that use a database name
+ * in the first segment will clash with wfMemcKey/wfForeignMemcKey.
+ *
+ * @since 1.26
+ * @param string $args,...
+ * @return string
+ */
+function wfGlobalCacheKey( /*...*/ ) {
+       $args = func_get_args();
+       $key = 'global:' . implode( ':', $args );
+       $key = str_replace( ' ', '_', $key );
+       return $key;
+}
+
 /**
  * Get an ASCII string identifying this wiki
  * This is used as a prefix in memcached keys
@@ -3847,15 +3851,15 @@ function wfMemoryLimit() {
                $conflimit = wfShorthandToInteger( $wgMemoryLimit );
                if ( $conflimit == -1 ) {
                        wfDebug( "Removing PHP's memory limit\n" );
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        ini_set( 'memory_limit', $conflimit );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        return $conflimit;
                } elseif ( $conflimit > $memlimit ) {
                        wfDebug( "Raising PHP's memory limit to $conflimit bytes\n" );
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        ini_set( 'memory_limit', $conflimit );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        return $conflimit;
                }
        }
@@ -4000,9 +4004,9 @@ function wfUnpack( $format, $data, $length = false ) {
                }
        }
 
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        $result = unpack( $format, $data );
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
 
        if ( $result === false ) {
                // If it cannot extract the packed data.
index 69f1120..494cbfa 100644 (file)
@@ -522,9 +522,9 @@ class DiffHistoryBlob implements HistoryBlob {
        function diff( $t1, $t2 ) {
                # Need to do a null concatenation with warnings off, due to bugs in the current version of xdiff
                # "String is not zero-terminated"
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $diff = xdiff_string_rabdiff( $t1, $t2 ) . '';
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                return $diff;
        }
 
@@ -535,9 +535,9 @@ class DiffHistoryBlob implements HistoryBlob {
         */
        function patch( $base, $diff ) {
                if ( function_exists( 'xdiff_string_bpatch' ) ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $text = xdiff_string_bpatch( $base, $diff ) . '';
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        return $text;
                }
 
index dffc7bc..28c54d2 100644 (file)
@@ -135,9 +135,7 @@ class Hooks {
         *   returning null) is equivalent to returning true.
         */
        public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
-               $profiler = Profiler::instance();
-               $eventPS = $profiler->scopedProfileIn( 'hook: ' . $event );
-
+               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 ) ) {
@@ -196,8 +194,6 @@ class Hooks {
                        $badhookmsg = null;
                        $hook_args = array_merge( $hook, $args );
 
-                       // Profile first in case the Profiler causes errors
-                       $funcPS = $profiler->scopedProfileIn( $func );
                        set_error_handler( 'Hooks::hookErrorHandler' );
 
                        // mark hook as deprecated, if deprecation version is specified
@@ -215,7 +211,6 @@ class Hooks {
                        }
 
                        restore_error_handler();
-                       $profiler->scopedProfileOut( $funcPS );
 
                        // Process the return value.
                        if ( is_string( $retval ) ) {
index 6da70b1..235096d 100644 (file)
@@ -715,6 +715,9 @@ class Html {
                if ( in_array( $type, array( 'text', 'search', 'email', 'password', 'number' ) ) ) {
                        $attribs = self::getTextInputAttributes( $attribs );
                }
+               if ( in_array( $type, array( 'button', 'reset', 'submit' ) ) ) {
+                       $attribs = self::buttonAttributes( $attribs );
+               }
                return self::element( 'input', $attribs );
        }
 
index 8e05f59..825cd06 100644 (file)
@@ -792,14 +792,14 @@ class CurlHttpRequest extends MWHttpRequest {
                }
 
                if ( $this->followRedirects && $this->canFollowRedirects() ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        if ( !curl_setopt( $curlHandle, CURLOPT_FOLLOWLOCATION, true ) ) {
                                wfDebug( __METHOD__ . ": Couldn't set CURLOPT_FOLLOWLOCATION. " .
                                        "Probably safe_mode or open_basedir is set.\n" );
                                // Continue the processing. If it were in curl_setopt_array,
                                // processing would have halted on its entry
                        }
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
 
                if ( $this->profiler ) {
@@ -938,9 +938,9 @@ class PhpHttpRequest extends MWHttpRequest {
                }
                do {
                        $reqCount++;
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $fh = fopen( $url, "r", false, $context );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        if ( !$fh ) {
                                break;
index ee57a9e..6a0bfd0 100644 (file)
@@ -394,9 +394,9 @@ class WikiImporter {
                        $countKey = 'title_' . $title->getPrefixedText();
                        $countable = $page->isCountable( $editInfo );
                        if ( array_key_exists( $countKey, $this->countableCache ) &&
-                               $countable != $this->countableCache[ $countKey ] ) {
+                               $countable != $this->countableCache[$countKey] ) {
                                DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array(
-                                       'articles' => ( (int)$countable - (int)$this->countableCache[ $countKey ] )
+                                       'articles' => ( (int)$countable - (int)$this->countableCache[$countKey] )
                                ) ) );
                        }
                }
@@ -611,7 +611,7 @@ class WikiImporter {
                        $tag = $this->reader->localName;
 
                        if ( $tag == 'namespace' ) {
-                               $this->foreignNamespaces[ $this->nodeAttribute( 'key' ) ] =
+                               $this->foreignNamespaces[$this->nodeAttribute( 'key' )] =
                                        $this->nodeContents();
                        } elseif ( in_array( $tag, $normalFields ) ) {
                                $siteInfo[$tag] = $this->nodeContents();
@@ -1857,9 +1857,9 @@ class ImportStreamSource implements ImportSource {
         * @return Status
         */
        static function newFromFile( $filename ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $file = fopen( $filename, 'rt' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$file ) {
                        return Status::newFatal( "importcantopen" );
                }
index d03b76a..5510d35 100644 (file)
@@ -239,63 +239,107 @@ class MediaWiki {
                                }
                                throw new BadTitleError();
                        }
-               // Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
-               } elseif ( $request->getVal( 'action', 'view' ) == 'view' && !$request->wasPosted()
-                       && ( $request->getVal( 'title' ) === null
-                               || $title->getPrefixedDBkey() != $request->getVal( 'title' ) )
-                       && !count( $request->getValueNames( array( 'action', 'title' ) ) )
-                       && Hooks::run( 'TestCanonicalRedirect', array( $request, $title, $output ) )
-               ) {
-                       if ( $title->isSpecialPage() ) {
-                               list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
-                               if ( $name ) {
-                                       $title = SpecialPage::getTitleFor( $name, $subpage );
-                               }
-                       }
-                       $targetUrl = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
-                       // Redirect to canonical url, make it a 301 to allow caching
-                       if ( $targetUrl == $request->getFullRequestURL() ) {
-                               $message = "Redirect loop detected!\n\n" .
-                                       "This means the wiki got confused about what page was " .
-                                       "requested; this sometimes happens when moving a wiki " .
-                                       "to a new server or changing the server configuration.\n\n";
-
-                               if ( $this->config->get( 'UsePathInfo' ) ) {
-                                       $message .= "The wiki is trying to interpret the page " .
-                                               "title from the URL path portion (PATH_INFO), which " .
-                                               "sometimes fails depending on the web server. Try " .
-                                               "setting \"\$wgUsePathInfo = false;\" in your " .
-                                               "LocalSettings.php, or check that \$wgArticlePath " .
-                                               "is correct.";
+               // Handle any other redirects.
+               // Redirect loops, titleless URL, $wgUsePathInfo URLs, and URLs with a variant
+               } elseif ( !$this->tryNormaliseRedirect( $title ) ) {
+
+                       // Special pages
+                       if ( NS_SPECIAL == $title->getNamespace() ) {
+                               // Actions that need to be made when we have a special pages
+                               SpecialPageFactory::executePath( $title, $this->context );
+                       } else {
+                               // ...otherwise treat it as an article view. The article
+                               // may still be a wikipage redirect to another article or URL.
+                               $article = $this->initializeArticle();
+                               if ( is_object( $article ) ) {
+                                       $this->performAction( $article, $requestTitle );
+                               } elseif ( is_string( $article ) ) {
+                                       $output->redirect( $article );
                                } else {
-                                       $message .= "Your web server was detected as possibly not " .
-                                               "supporting URL path components (PATH_INFO) correctly; " .
-                                               "check your LocalSettings.php for a customized " .
-                                               "\$wgArticlePath setting and/or toggle \$wgUsePathInfo " .
-                                               "to true.";
+                                       throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle()"
+                                               . " returned neither an object nor a URL" );
                                }
-                               throw new HttpError( 500, $message );
-                       } else {
-                               $output->setSquidMaxage( 1200 );
-                               $output->redirect( $targetUrl, '301' );
                        }
-               // Special pages
-               } elseif ( NS_SPECIAL == $title->getNamespace() ) {
-                       // Actions that need to be made when we have a special pages
-                       SpecialPageFactory::executePath( $title, $this->context );
-               } else {
-                       // ...otherwise treat it as an article view. The article
-                       // may be a redirect to another article or URL.
-                       $article = $this->initializeArticle();
-                       if ( is_object( $article ) ) {
-                               $this->performAction( $article, $requestTitle );
-                       } elseif ( is_string( $article ) ) {
-                               $output->redirect( $article );
+               }
+       }
+
+       /**
+        * Handle redirects for uncanonical title requests.
+        *
+        * Handles:
+        * - Redirect loops.
+        * - No title in URL.
+        * - $wgUsePathInfo URLs.
+        * - URLs with a variant.
+        * - Other non-standard URLs (as long as they have no extra query parameters).
+        *
+        * Behaviour:
+        * - Normalise title values:
+        *   /wiki/Foo%20Bar -> /wiki/Foo_Bar
+        * - Normalise empty title:
+        *   /wiki/ -> /wiki/Main
+        *   /w/index.php?title= -> /wiki/Main
+        * - Normalise non-standard title urls:
+        *   /w/index.php?title=Foo_Bar -> /wiki/Foo_Bar
+        * - Don't redirect anything with query parameters other than 'title' or 'action=view'.
+        *
+        * @return bool True if a redirect was set.
+        */
+       private function tryNormaliseRedirect( $title ) {
+               $request = $this->context->getRequest();
+               $output = $this->context->getOutput();
+
+               if ( $request->getVal( 'action', 'view' ) != 'view'
+                       || $request->wasPosted()
+                       || count( $request->getValueNames( array( 'action', 'title' ) ) )
+                       || !Hooks::run( 'TestCanonicalRedirect', array( $request, $title, $output ) )
+               ) {
+                       return false;
+               }
+
+               if ( $title->isSpecialPage() ) {
+                       list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                       if ( $name ) {
+                               $title = SpecialPage::getTitleFor( $name, $subpage );
+                       }
+               }
+               // Redirect to canonical url, make it a 301 to allow caching
+               $targetUrl = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
+
+               if ( $targetUrl != $request->getFullRequestURL() ) {
+                       $output->setSquidMaxage( 1200 );
+                       $output->redirect( $targetUrl, '301' );
+                       return true;
+               }
+
+               // If there is no title, or the title is in a non-standard encoding, we demand
+               // a redirect. If cgi somehow changed the 'title' query to be non-standard while
+               // the url is standard, the server is misconfigured.
+               if ( $request->getVal( 'title' ) === null
+                       || $title->getPrefixedDBkey() != $request->getVal( 'title' )
+               ) {
+                       $message = "Redirect loop detected!\n\n" .
+                               "This means the wiki got confused about what page was " .
+                               "requested; this sometimes happens when moving a wiki " .
+                               "to a new server or changing the server configuration.\n\n";
+
+                       if ( $this->config->get( 'UsePathInfo' ) ) {
+                               $message .= "The wiki is trying to interpret the page " .
+                                       "title from the URL path portion (PATH_INFO), which " .
+                                       "sometimes fails depending on the web server. Try " .
+                                       "setting \"\$wgUsePathInfo = false;\" in your " .
+                                       "LocalSettings.php, or check that \$wgArticlePath " .
+                                       "is correct.";
                        } else {
-                               throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle()"
-                                       . " returned neither an object nor a URL" );
+                               $message .= "Your web server was detected as possibly not " .
+                                       "supporting URL path components (PATH_INFO) correctly; " .
+                                       "check your LocalSettings.php for a customized " .
+                                       "\$wgArticlePath setting and/or toggle \$wgUsePathInfo " .
+                                       "to true.";
                        }
+                       throw new HttpError( 500, $message );
                }
+               return false;
        }
 
        /**
@@ -509,7 +553,7 @@ class MediaWiki {
                        list( $host, $lag ) = wfGetLB()->getMaxLag();
                        if ( $lag > $maxLag ) {
                                $resp = $this->context->getRequest()->response();
-                               $resp->header( 'HTTP/1.1 503 Service Unavailable' );
+                               $resp->statusHeader( 503 );
                                $resp->header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
                                $resp->header( 'X-Database-Lag: ' . intval( $lag ) );
                                $resp->header( 'Content-Type: text/plain' );
@@ -715,7 +759,7 @@ class MediaWiki {
 
                $errno = $errstr = null;
                $info = wfParseUrl( $this->config->get( 'Server' ) );
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $sock = fsockopen(
                        $info['host'],
                        isset( $info['port'] ) ? $info['port'] : 80,
@@ -725,7 +769,7 @@ class MediaWiki {
                        // is a problem elsewhere.
                        0.1
                );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$sock ) {
                        $runJobsLogger->error( "Failed to start cron API (socket error $errno): $errstr" );
                        // Fall back to running the job here while the user waits
index ebe98a3..2b240c3 100644 (file)
@@ -617,16 +617,18 @@ class MimeMagic {
        /**
         * Guess the MIME type from the file contents.
         *
+        * @todo Remove $ext param
+        *
         * @param string $file
         * @param mixed $ext
         * @return bool|string
         * @throws MWException
         */
-       private function doGuessMimeType( $file, $ext ) { // TODO: remove $ext param
+       private function doGuessMimeType( $file, $ext ) {
                // Read a chunk of the file
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $f = fopen( $file, 'rb' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$f ) {
                        return 'unknown/unknown';
@@ -693,7 +695,7 @@ class MimeMagic {
                }
 
                /* Look for WebP */
-               if ( strncmp( $head, "RIFF", 4 ) == 0 && strncmp( substr( $head, 8, 8 ), "WEBPVP8 ", 8 ) == 0 ) {
+               if ( strncmp( $head, "RIFF", 4 ) == 0 && strncmp( substr( $head, 8, 7 ), "WEBPVP8", 7 ) == 0 ) {
                        wfDebug( __METHOD__ . ": recognized file as image/webp\n" );
                        return "image/webp";
                }
@@ -780,9 +782,9 @@ class MimeMagic {
                        return $this->detectZipType( $head, $tail, $ext );
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $gis = getimagesize( $file );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $gis && isset( $gis['mime'] ) ) {
                        $mime = $gis['mime'];
index ba9fcba..30ee19c 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * This class should be covered by a general architecture document which does
  * not exist as of January 2011.  This is one of the Core classes and should
@@ -302,6 +304,11 @@ class OutputPage extends ContextSource {
         */
        private $mEnableSectionEditLinks = true;
 
+       /**
+        * @var string|null The URL to send in a <link> element with rel=copyright
+        */
+       private $copyrightUrl;
+
        /**
         * Constructor for OutputPage. This should not be called directly.
         * Instead a new RequestContext should be created and it will implicitly create
@@ -338,6 +345,18 @@ class OutputPage extends ContextSource {
                return $this->mRedirect;
        }
 
+       /**
+        * Set the copyright URL to send with the output.
+        * Empty string to omit, null to reset.
+        *
+        * @since 1.26
+        *
+        * @param string|null $url
+        */
+       public function setCopyrightUrl( $url ) {
+               $this->copyrightUrl = $url;
+       }
+
        /**
         * Set the HTTP status code to send with the output.
         *
@@ -598,7 +617,8 @@ class OutputPage extends ContextSource {
                        $module = $resourceLoader->getModule( $val );
 
                        if ( $module instanceof ResourceLoaderModule && $module->isPositionDefault() ) {
-                               $warning = __METHOD__ . ': style module should define its position explicitly: ' . $val . ' ' . get_class( $module );
+                               $warning = __METHOD__ . ': style module should define its position explicitly: ' .
+                                       $val . ' ' . get_class( $module );
                                wfDebugLog( 'resourceloader', $warning );
                                wfLogWarning( $warning );
                        }
@@ -807,9 +827,9 @@ class OutputPage extends ContextSource {
                # this breaks strtotime().
                $clientHeader = preg_replace( '/;.*$/', '', $clientHeader );
 
-               wfSuppressWarnings(); // E_STRICT system time bitching
+               MediaWiki\suppressWarnings(); // E_STRICT system time bitching
                $clientHeaderTime = strtotime( $clientHeader );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$clientHeaderTime ) {
                        wfDebug( __METHOD__
                                . ": unable to parse the client's If-Modified-Since header: $clientHeader\n" );
@@ -836,10 +856,10 @@ class OutputPage extends ContextSource {
                }
 
                # Not modified
-               # Give a 304 response code and disable body output
+               # Give a 304 Not Modified response code and disable body output
                wfDebug( __METHOD__ . ": NOT MODIFIED, $info\n", 'log' );
                ini_set( 'zlib.output_compression', 0 );
-               $this->getRequest()->response()->header( "HTTP/1.1 304 Not Modified" );
+               $this->getRequest()->response()->statusHeader( 304 );
                $this->sendCacheControl();
                $this->disable();
 
@@ -2218,8 +2238,7 @@ class OutputPage extends ContextSource {
                        if ( Hooks::run( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) {
                                if ( $code == '301' || $code == '303' ) {
                                        if ( !$config->get( 'DebugRedirects' ) ) {
-                                               $message = HttpStatus::getMessage( $code );
-                                               $response->header( "HTTP/1.1 $code $message" );
+                                               $response->statusHeader( $code );
                                        }
                                        $this->mLastModified = wfTimestamp( TS_RFC2822 );
                                }
@@ -2241,10 +2260,7 @@ class OutputPage extends ContextSource {
 
                        return;
                } elseif ( $this->mStatusCode ) {
-                       $message = HttpStatus::getMessage( $this->mStatusCode );
-                       if ( $message ) {
-                               $response->header( 'HTTP/1.1 ' . $this->mStatusCode . ' ' . $message );
-                       }
+                       $response->statusHeader( $this->mStatusCode );
                }
 
                # Buffer output; final headers may depend on later processing
@@ -2266,7 +2282,6 @@ class OutputPage extends ContextSource {
                if ( $this->mArticleBodyOnly ) {
                        echo $this->mBodytext;
                } else {
-
                        $sk = $this->getSkin();
                        // add skin specific modules
                        $modules = $sk->getDefaultModules();
@@ -2737,7 +2752,10 @@ class OutputPage extends ContextSource {
         */
        public function getResourceLoader() {
                if ( is_null( $this->mResourceLoader ) ) {
-                       $this->mResourceLoader = new ResourceLoader( $this->getConfig() );
+                       $this->mResourceLoader = new ResourceLoader(
+                               $this->getConfig(),
+                               LoggerFactory::getInstance( 'resourceloader' )
+                       );
                }
                return $this->mResourceLoader;
        }
@@ -3422,26 +3440,30 @@ class OutputPage extends ContextSource {
                                                'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) )
                                        );
                                }
+                               # x-default link per https://support.google.com/webmasters/answer/189077?hl=en
+                               $tags["variant-x-default"] = Html::element( 'link', array(
+                                       'rel' => 'alternate',
+                                       'hreflang' => 'x-default',
+                                       'href' => $this->getTitle()->getLocalURL() ) );
                        }
-                       # x-default link per https://support.google.com/webmasters/answer/189077?hl=en
-                       $tags["variant-x-default"] = Html::element( 'link', array(
-                               'rel' => 'alternate',
-                               'hreflang' => 'x-default',
-                               'href' => $this->getTitle()->getLocalURL() ) );
                }
 
                # Copyright
-               $copyright = '';
-               if ( $config->get( 'RightsPage' ) ) {
-                       $copy = Title::newFromText( $config->get( 'RightsPage' ) );
+               if ( $this->copyrightUrl !== null ) {
+                       $copyright = $this->copyrightUrl;
+               } else {
+                       $copyright = '';
+                       if ( $config->get( 'RightsPage' ) ) {
+                               $copy = Title::newFromText( $config->get( 'RightsPage' ) );
 
-                       if ( $copy ) {
-                               $copyright = $copy->getLocalURL();
+                               if ( $copy ) {
+                                       $copyright = $copy->getLocalURL();
+                               }
                        }
-               }
 
-               if ( !$copyright && $config->get( 'RightsUrl' ) ) {
-                       $copyright = $config->get( 'RightsUrl' );
+                       if ( !$copyright && $config->get( 'RightsUrl' ) ) {
+                               $copyright = $config->get( 'RightsUrl' );
+                       }
                }
 
                if ( $copyright ) {
@@ -3502,8 +3524,25 @@ class OutputPage extends ContextSource {
                        if ( $canonicalUrl !== false ) {
                                $canonicalUrl = wfExpandUrl( $canonicalUrl, PROTO_CANONICAL );
                        } else {
-                               $reqUrl = $this->getRequest()->getRequestURL();
-                               $canonicalUrl = wfExpandUrl( $reqUrl, PROTO_CANONICAL );
+                               if ( $this->isArticleRelated() ) {
+                                       // This affects all requests where "setArticleRelated" is true. This is
+                                       // typically all requests that show content (query title, curid, oldid, diff),
+                                       // and all wikipage actions (edit, delete, purge, info, history etc.).
+                                       // It does not apply to File pages and Special pages.
+                                       // 'history' and 'info' actions address page metadata rather than the page
+                                       // content itself, so they may not be canonicalized to the view page url.
+                                       // TODO: this ought to be better encapsulated in the Action class.
+                                       $action = Action::getActionName( $this->getContext() );
+                                       if ( in_array( $action, array( 'history', 'info' ) ) ) {
+                                               $query = "action={$action}";
+                                       } else {
+                                               $query = '';
+                                       }
+                                       $canonicalUrl = $this->getTitle()->getCanonicalURL( $query );
+                               } else {
+                                       $reqUrl = $this->getRequest()->getRequestURL();
+                                       $canonicalUrl = wfExpandUrl( $reqUrl, PROTO_CANONICAL );
+                               }
                        }
                }
                if ( $canonicalUrl !== false ) {
index 9b0ada8..9497ee7 100644 (file)
@@ -1294,12 +1294,19 @@ class Preferences {
                $opt = array();
 
                $localTZoffset = $context->getConfig()->get( 'LocalTZoffset' );
+               $timeZoneList = self::getTimeZoneList( $context->getLanguage() );
+
                $timestamp = MWTimestamp::getLocalInstance();
                // Check that the LocalTZoffset is the same as the local time zone offset
                if ( $localTZoffset == $timestamp->format( 'Z' ) / 60 ) {
+                       $timezoneName = $timestamp->getTimezone()->getName();
+                       // Localize timezone
+                       if ( isset( $timeZoneList[$timezoneName] ) ) {
+                               $timezoneName = $timeZoneList[$timezoneName]['name'];
+                       }
                        $server_tz_msg = $context->msg(
                                'timezoneuseserverdefault',
-                               $timestamp->getTimezone()->getName()
+                               $timezoneName
                        )->text();
                } else {
                        $tzstring = sprintf(
@@ -1313,49 +1320,12 @@ class Preferences {
                $opt[$context->msg( 'timezoneuseoffset' )->text()] = 'other';
                $opt[$context->msg( 'guesstimezone' )->text()] = 'guess';
 
-               if ( function_exists( 'timezone_identifiers_list' ) ) {
-                       # Read timezone list
-                       $tzs = timezone_identifiers_list();
-                       sort( $tzs );
-
-                       $tzRegions = array();
-                       $tzRegions['Africa'] = $context->msg( 'timezoneregion-africa' )->text();
-                       $tzRegions['America'] = $context->msg( 'timezoneregion-america' )->text();
-                       $tzRegions['Antarctica'] = $context->msg( 'timezoneregion-antarctica' )->text();
-                       $tzRegions['Arctic'] = $context->msg( 'timezoneregion-arctic' )->text();
-                       $tzRegions['Asia'] = $context->msg( 'timezoneregion-asia' )->text();
-                       $tzRegions['Atlantic'] = $context->msg( 'timezoneregion-atlantic' )->text();
-                       $tzRegions['Australia'] = $context->msg( 'timezoneregion-australia' )->text();
-                       $tzRegions['Europe'] = $context->msg( 'timezoneregion-europe' )->text();
-                       $tzRegions['Indian'] = $context->msg( 'timezoneregion-indian' )->text();
-                       $tzRegions['Pacific'] = $context->msg( 'timezoneregion-pacific' )->text();
-                       asort( $tzRegions );
-
-                       $prefill = array_fill_keys( array_values( $tzRegions ), array() );
-                       $opt = array_merge( $opt, $prefill );
-
-                       $now = date_create( 'now' );
-
-                       foreach ( $tzs as $tz ) {
-                               $z = explode( '/', $tz, 2 );
-
-                               # timezone_identifiers_list() returns a number of
-                               # backwards-compatibility entries. This filters them out of the
-                               # list presented to the user.
-                               if ( count( $z ) != 2 || !array_key_exists( $z[0], $tzRegions ) ) {
-                                       continue;
-                               }
-
-                               # Localize region
-                               $z[0] = $tzRegions[$z[0]];
-
-                               $minDiff = floor( timezone_offset_get( timezone_open( $tz ), $now ) / 60 );
-
-                               $display = str_replace( '_', ' ', $z[0] . '/' . $z[1] );
-                               $value = "ZoneInfo|$minDiff|$tz";
-
-                               $opt[$z[0]][$display] = $value;
+               foreach ( $timeZoneList as $timeZoneInfo ) {
+                       $region = $timeZoneInfo['region'];
+                       if ( !isset( $opt[$region] ) ) {
+                               $opt[$region] = array();
                        }
+                       $opt[$region][$timeZoneInfo['name']] = $timeZoneInfo['timecorrection'];
                }
                return $opt;
        }
@@ -1394,7 +1364,7 @@ class Preferences {
                                }
 
                                # Max is +14:00 and min is -12:00, see:
-                               # http://en.wikipedia.org/wiki/Timezone
+                               # https://en.wikipedia.org/wiki/Timezone
                                $minDiff = min( $minDiff, 840 );  # 14:00
                                $minDiff = max( $minDiff, - 720 ); # -12:00
                                return 'Offset|' . $minDiff;
@@ -1491,6 +1461,68 @@ class Preferences {
 
                return Status::newGood();
        }
+
+       /**
+        * Get a list of all time zones
+        * @param Language $language Language used for the localized names
+        * @return array A list of all time zones. The system name of the time zone is used as key and
+        *  the value is an array which contains localized name, the timecorrection value used for
+        *  preferences and the region
+        * @since 1.26
+        */
+       public static function getTimeZoneList( Language $language ) {
+               $identifiers = DateTimeZone::listIdentifiers();
+               if ( $identifiers === false ) {
+                       return array();
+               }
+               sort( $identifiers );
+
+               $tzRegions = array(
+                       'Africa' => wfMessage( 'timezoneregion-africa' )->inLanguage( $language )->text(),
+                       'America' => wfMessage( 'timezoneregion-america' )->inLanguage( $language )->text(),
+                       'Antarctica' => wfMessage( 'timezoneregion-antarctica' )->inLanguage( $language )->text(),
+                       'Arctic' => wfMessage( 'timezoneregion-arctic' )->inLanguage( $language )->text(),
+                       'Asia' => wfMessage( 'timezoneregion-asia' )->inLanguage( $language )->text(),
+                       'Atlantic' => wfMessage( 'timezoneregion-atlantic' )->inLanguage( $language )->text(),
+                       'Australia' => wfMessage( 'timezoneregion-australia' )->inLanguage( $language )->text(),
+                       'Europe' => wfMessage( 'timezoneregion-europe' )->inLanguage( $language )->text(),
+                       'Indian' => wfMessage( 'timezoneregion-indian' )->inLanguage( $language )->text(),
+                       'Pacific' => wfMessage( 'timezoneregion-pacific' )->inLanguage( $language )->text(),
+               );
+               asort( $tzRegions );
+
+               $timeZoneList = array();
+
+               $now = new DateTime();
+
+               foreach ( $identifiers as $identifier ) {
+                       $parts = explode( '/', $identifier, 2 );
+
+                       // DateTimeZone::listIdentifiers() returns a number of
+                       // backwards-compatibility entries. This filters them out of the
+                       // list presented to the user.
+                       if ( count( $parts ) !== 2 || !array_key_exists( $parts[0], $tzRegions ) ) {
+                               continue;
+                       }
+
+                       // Localize region
+                       $parts[0] = $tzRegions[$parts[0]];
+
+                       $dateTimeZone = new DateTimeZone( $identifier );
+                       $minDiff = floor( $dateTimeZone->getOffset( $now ) / 60 );
+
+                       $display = str_replace( '_', ' ', $parts[0] . '/' . $parts[1] );
+                       $value = "ZoneInfo|$minDiff|$identifier";
+
+                       $timeZoneList[$identifier] = array(
+                               'name' => $display,
+                               'timecorrection' => $value,
+                               'region' => $parts[0],
+                       );
+               }
+
+               return $timeZoneList;
+       }
 }
 
 /** Some tweaks to allow js prefs to work */
index 69b64dd..1443d1c 100644 (file)
@@ -541,7 +541,7 @@ class ProtectionForm {
                $out .= Xml::closeElement( 'fieldset' );
 
                if ( $user->isAllowed( 'editinterface' ) ) {
-                       $link = Linker::link(
+                       $link = Linker::linkKnown(
                                $context->msg( 'protect-dropdown' )->inContentLanguage()->getTitle(),
                                $context->msg( 'protect-edit-reasonlist' )->escaped(),
                                array(),
index 9bb4d16..71bdf58 100644 (file)
@@ -194,8 +194,8 @@ class Revision implements IDBAccessObject {
 
                if ( !isset( $attribs['title'] )
                        && isset( $row->ar_namespace )
-                       && isset( $row->ar_title ) ) {
-
+                       && isset( $row->ar_title )
+               ) {
                        $attribs['title'] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
                }
 
@@ -1087,7 +1087,7 @@ class Revision implements IDBAccessObject {
        /**
         * Returns the content model for this revision.
         *
-        * If no content model was stored in the database, $this->getTitle()->getContentModel() is
+        * If no content model was stored in the database, the default content model for the title is
         * used to determine the content model to use. If no title is know, CONTENT_MODEL_WIKITEXT
         * is used as a last resort.
         *
@@ -1097,7 +1097,11 @@ class Revision implements IDBAccessObject {
        public function getContentModel() {
                if ( !$this->mContentModel ) {
                        $title = $this->getTitle();
-                       $this->mContentModel = ( $title ? $title->getContentModel() : CONTENT_MODEL_WIKITEXT );
+                       if ( $title ) {
+                               $this->mContentModel = ContentHandler::getDefaultModelFor( $title );
+                       } else {
+                               $this->mContentModel = CONTENT_MODEL_WIKITEXT;
+                       }
 
                        assert( !empty( $this->mContentModel ) );
                }
index 8256db9..2340cd9 100644 (file)
@@ -374,7 +374,6 @@ class Sanitizer {
                // are changed (like in the screwed up test system) we will re-initialise the settings.
                $globalContext = implode( '-', compact( 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
                if ( !$staticInitialised || $staticInitialised != $globalContext ) {
-
                        $htmlpairsStatic = array( # Tags that must be closed
                                'b', 'bdi', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
                                'h2', 'h3', 'h4', 'h5', 'h6', 'cite', 'code', 'em', 's',
@@ -488,9 +487,9 @@ class Sanitizer {
                                                $badtag = true;
                                        } elseif ( $slash ) {
                                                # Closing a tag... is it the one we just opened?
-                                               wfSuppressWarnings();
+                                               MediaWiki\suppressWarnings();
                                                $ot = array_pop( $tagstack );
-                                               wfRestoreWarnings();
+                                               MediaWiki\restoreWarnings();
 
                                                if ( $ot != $t ) {
                                                        if ( isset( $htmlsingleallowed[$ot] ) ) {
@@ -498,32 +497,32 @@ class Sanitizer {
                                                                # and see if we find a match below them
                                                                $optstack = array();
                                                                array_push( $optstack, $ot );
-                                                               wfSuppressWarnings();
+                                                               MediaWiki\suppressWarnings();
                                                                $ot = array_pop( $tagstack );
-                                                               wfRestoreWarnings();
+                                                               MediaWiki\restoreWarnings();
                                                                while ( $ot != $t && isset( $htmlsingleallowed[$ot] ) ) {
                                                                        array_push( $optstack, $ot );
-                                                                       wfSuppressWarnings();
+                                                                       MediaWiki\suppressWarnings();
                                                                        $ot = array_pop( $tagstack );
-                                                                       wfRestoreWarnings();
+                                                                       MediaWiki\restoreWarnings();
                                                                }
                                                                if ( $t != $ot ) {
                                                                        # No match. Push the optional elements back again
                                                                        $badtag = true;
-                                                                       wfSuppressWarnings();
+                                                                       MediaWiki\suppressWarnings();
                                                                        $ot = array_pop( $optstack );
-                                                                       wfRestoreWarnings();
+                                                                       MediaWiki\restoreWarnings();
                                                                        while ( $ot ) {
                                                                                array_push( $tagstack, $ot );
-                                                                               wfSuppressWarnings();
+                                                                               MediaWiki\suppressWarnings();
                                                                                $ot = array_pop( $optstack );
-                                                                               wfRestoreWarnings();
+                                                                               MediaWiki\restoreWarnings();
                                                                        }
                                                                }
                                                        } else {
-                                                               wfSuppressWarnings();
+                                                               MediaWiki\suppressWarnings();
                                                                array_push( $tagstack, $ot );
-                                                               wfRestoreWarnings();
+                                                               MediaWiki\restoreWarnings();
 
                                                                # <li> can be nested in <ul> or <ol>, skip those cases:
                                                                if ( !isset( $htmllist[$ot] ) || !isset( $listtags[$t] ) ) {
index 4671252..0c1e99d 100644 (file)
@@ -236,9 +236,7 @@ if ( $wgUseInstantCommons ) {
        $wgForeignFileRepos[] = array(
                'class' => 'ForeignAPIRepo',
                'name' => 'wikimediacommons',
-               'apibase' => WebRequest::detectProtocol() === 'https' ?
-                       'https://commons.wikimedia.org/w/api.php' :
-                       'http://commons.wikimedia.org/w/api.php',
+               'apibase' => 'https://commons.wikimedia.org/w/api.php',
                'hashLevels' => 2,
                'fetchDescription' => true,
                'descriptionCacheExpiry' => 43200,
@@ -365,13 +363,13 @@ if ( $wgMetaNamespace === false ) {
 
 // Default value is 2000 or the suhosin limit if it is between 1 and 2000
 if ( $wgResourceLoaderMaxQueryLength === false ) {
-       $suhosinMaxValueLength = (int) ini_get( 'suhosin.get.max_value_length' );
+       $suhosinMaxValueLength = (int)ini_get( 'suhosin.get.max_value_length' );
        if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
                $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
        } else {
                $wgResourceLoaderMaxQueryLength = 2000;
        }
-       unset($suhosinMaxValueLength);
+       unset( $suhosinMaxValueLength );
 }
 
 /**
@@ -431,12 +429,12 @@ if ( !$wgHtml5Version && $wgAllowRdfaAttributes ) {
 }
 
 // Blacklisted file extensions shouldn't appear on the "allowed" list
-$wgFileExtensions = array_values( array_diff ( $wgFileExtensions, $wgFileBlacklist ) );
+$wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) );
 
 if ( $wgInvalidateCacheOnLocalSettingsChange ) {
-       // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged - No GlobalFunction here yet.
-       $wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( "$IP/LocalSettings.php" ) ) );
-       // @codingStandardsIgnoreEnd
+       MediaWiki\suppressWarnings();
+       $wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', filemtime( "$IP/LocalSettings.php" ) ) );
+       MediaWiki\restoreWarnings();
 }
 
 if ( $wgNewUserLog ) {
@@ -470,6 +468,15 @@ if ( $wgProfileOnly ) {
        $wgDebugLogFile = '';
 }
 
+// Backwards compatibility with old password limits
+if ( $wgMinimalPasswordLength !== false ) {
+       $wgPasswordPolicy['policies']['default']['MinimalPasswordLength'] = $wgMinimalPasswordLength;
+}
+
+if ( $wgMaximalPasswordLength !== false ) {
+       $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength;
+}
+
 Profiler::instance()->scopedProfileOut( $ps_default );
 
 // Disable MWDebug for command line mode, this prevents MWDebug from eating up
@@ -485,7 +492,7 @@ if ( !class_exists( 'AutoLoader' ) ) {
 
 MWExceptionHandler::installHandler();
 
-require_once "$IP/includes/libs/normal/UtfNormalUtil.php";
+require_once "$IP/includes/compat/normal/UtfNormalUtil.php";
 
 $ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' );
 
@@ -529,7 +536,9 @@ if ( $wgTmpDirectory === false ) {
 
 // We don't use counters anymore. Left here for extensions still
 // expecting this to exist. Should be removed sometime 1.26 or later.
-$wgDisableCounters = true;
+if ( !isset( $wgDisableCounters ) ) {
+       $wgDisableCounters = true;
+}
 
 if ( $wgMainWANCache === false ) {
        // Setup a WAN cache from $wgMainCacheType with no relayer.
@@ -556,9 +565,9 @@ wfMemoryLimit();
  * explicitly set. Inspired by phpMyAdmin's treatment of the problem.
  */
 if ( is_null( $wgLocaltimezone ) ) {
-       wfSuppressWarnings();
+       MediaWiki\suppressWarnings();
        $wgLocaltimezone = date_default_timezone_get();
-       wfRestoreWarnings();
+       MediaWiki\restoreWarnings();
 }
 
 date_default_timezone_set( $wgLocaltimezone );
index 824dd06..ca8f11a 100644 (file)
@@ -95,9 +95,9 @@ class SquidPurgeClient {
                }
                $this->socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
                socket_set_nonblock( $this->socket );
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $ok = socket_connect( $this->socket, $ip, $this->port );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$ok ) {
                        $error = socket_last_error( $this->socket );
                        if ( $error !== self::EINPROGRESS ) {
@@ -153,12 +153,12 @@ class SquidPurgeClient {
                        } elseif ( IP::isIPv6( $this->host ) ) {
                                throw new MWException( '$wgSquidServers does not support IPv6' );
                        } else {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $this->ip = gethostbyname( $this->host );
                                if ( $this->ip === $this->host ) {
                                        $this->ip = false;
                                }
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                        }
                }
                return $this->ip;
@@ -178,11 +178,11 @@ class SquidPurgeClient {
         */
        public function close() {
                if ( $this->socket ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        socket_set_block( $this->socket );
                        socket_shutdown( $this->socket );
                        socket_close( $this->socket );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
                $this->socket = null;
                $this->readBuffer = '';
@@ -252,9 +252,9 @@ class SquidPurgeClient {
                        $buf = substr( $this->writeBuffer, 0, self::BUFFER_SIZE );
                        $flags = 0;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $bytesSent = socket_send( $socket, $buf, strlen( $buf ), $flags );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $bytesSent === false ) {
                        $error = socket_last_error( $socket );
@@ -278,9 +278,9 @@ class SquidPurgeClient {
                }
 
                $buf = '';
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $bytesRead = socket_recv( $socket, $buf, self::BUFFER_SIZE, 0 );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $bytesRead === false ) {
                        $error = socket_last_error( $socket );
                        if ( $error != self::EAGAIN && $error != self::EINTR ) {
@@ -442,9 +442,9 @@ class SquidPurgeClientPool {
                        }
                        $exceptSockets = null;
                        $timeout = min( $startTime + $this->timeout - microtime( true ), 1 );
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $numReady = socket_select( $readSockets, $writeSockets, $exceptSockets, $timeout );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $numReady === false ) {
                                wfDebugLog( 'squid', __METHOD__ . ': Error in stream_select: ' .
                                        socket_strerror( socket_last_error() ) . "\n" );
index a52b25b..3f73ae3 100644 (file)
@@ -44,9 +44,9 @@ class StreamFile {
                        throw new MWException( __FUNCTION__ . " given storage path '$fname'." );
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $stat = stat( $fname );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                $res = self::prepareForStream( $fname, $stat, $headers, $sendErrors );
                if ( $res == self::NOT_MODIFIED ) {
@@ -78,7 +78,7 @@ class StreamFile {
        ) {
                if ( !is_array( $info ) ) {
                        if ( $sendErrors ) {
-                               header( 'HTTP/1.0 404 Not Found' );
+                               HttpStatus::header( 404 );
                                header( 'Cache-Control: no-cache' );
                                header( 'Content-Type: text/html; charset=utf-8' );
                                $encFile = htmlspecialchars( $path );
@@ -126,7 +126,7 @@ class StreamFile {
                        $modsince = preg_replace( '/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
                        if ( wfTimestamp( TS_UNIX, $info['mtime'] ) <= strtotime( $modsince ) ) {
                                ini_set( 'zlib.output_compression', 0 );
-                               header( "HTTP/1.0 304 Not Modified" );
+                               HttpStatus::header( 304 );
                                return self::NOT_MODIFIED; // ok
                        }
                }
index 3de70fa..d53d593 100644 (file)
@@ -130,7 +130,8 @@ class TemplateParser {
                if ( !is_callable( $renderer ) ) {
                        throw new RuntimeException( "Requested template, {$templateName}, is not callable" );
                }
-               return $this->renderers[$templateName] = $renderer;
+               $this->renderers[$templateName] = $renderer;
+               return $renderer;
        }
 
        /**
index d5eff46..9c8ed47 100644 (file)
@@ -3632,7 +3632,7 @@ class Title {
                        );
                }
 
-               return $errors ? : true;
+               return $errors ?: true;
        }
 
        /**
@@ -4380,9 +4380,10 @@ class Title {
        /**
         * Updates page_touched for this page; called from LinksUpdate.php
         *
+        * @param integer $purgeTime TS_MW timestamp [optional]
         * @return bool True if the update succeeded
         */
-       public function invalidateCache() {
+       public function invalidateCache( $purgeTime = null ) {
                if ( wfReadOnly() ) {
                        return false;
                }
@@ -4394,11 +4395,13 @@ class Title {
                $method = __METHOD__;
                $dbw = wfGetDB( DB_MASTER );
                $conds = $this->pageCond();
-               $dbw->onTransactionIdle( function () use ( $dbw, $conds, $method ) {
+               $dbw->onTransactionIdle( function () use ( $dbw, $conds, $method, $purgeTime ) {
+                       $dbTimestamp = $dbw->timestamp( $purgeTime ?: time() );
+
                        $dbw->update(
                                'page',
-                               array( 'page_touched' => $dbw->timestamp() ),
-                               $conds,
+                               array( 'page_touched' => $dbTimestamp ),
+                               $conds + array( 'page_touched < ' . $dbw->addQuotes( $dbTimestamp ) ),
                                $method
                        );
                } );
index bf0326a..63c0d37 100644 (file)
@@ -330,7 +330,7 @@ class User implements IDBAccessObject {
         *
         * @param integer $flags User::READ_* constant bitfield
         */
-       public function load( $flags = self::READ_LATEST ) {
+       public function load( $flags = self::READ_NORMAL ) {
                if ( $this->mLoadedItems === true ) {
                        return;
                }
@@ -344,9 +344,13 @@ class User implements IDBAccessObject {
                                $this->loadDefaults();
                                break;
                        case 'name':
-                               // @TODO: this gets the ID from a slave, assuming renames
-                               // are rare. This should be controllable and more consistent.
-                               $this->mId = self::idFromName( $this->mName );
+                               // Make sure this thread sees its own changes
+                               if ( wfGetLB()->hasOrMadeRecentMasterChanges() ) {
+                                       $flags |= self::READ_LATEST;
+                                       $this->queryFlagsUsed = $flags;
+                               }
+
+                               $this->mId = self::idFromName( $this->mName, $flags );
                                if ( !$this->mId ) {
                                        // Nonexistent user placeholder object
                                        $this->loadDefaults( $this->mName );
@@ -365,7 +369,8 @@ class User implements IDBAccessObject {
                                Hooks::run( 'UserLoadAfterLoadFromSession', array( $this ) );
                                break;
                        default:
-                               throw new MWException( "Unrecognised value for User->mFrom: \"{$this->mFrom}\"" );
+                               throw new UnexpectedValueException(
+                                       "Unrecognised value for User->mFrom: \"{$this->mFrom}\"" );
                }
        }
 
@@ -374,27 +379,25 @@ class User implements IDBAccessObject {
         * @param integer $flags User::READ_* constant bitfield
         * @return bool False if the ID does not exist, true otherwise
         */
-       public function loadFromId( $flags = self::READ_LATEST ) {
+       public function loadFromId( $flags = self::READ_NORMAL ) {
                if ( $this->mId == 0 ) {
                        $this->loadDefaults();
                        return false;
                }
 
-               // Try cache
-               $cache = $this->loadFromCache();
-               if ( !$cache ) {
+               // 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() ) {
                        wfDebug( "User: cache miss for user {$this->mId}\n" );
-                       // Load from DB
+                       // Load from DB (make sure this thread sees its own changes)
+                       if ( wfGetLB()->hasOrMadeRecentMasterChanges() ) {
+                               $flags |= self::READ_LATEST;
+                       }
                        if ( !$this->loadFromDatabase( $flags ) ) {
                                // Can't load from ID, user is anonymous
                                return false;
                        }
-                       if ( $flags & self::READ_LATEST ) {
-                               // Only save master data back to the cache to keep it consistent.
-                               // @TODO: save it anyway and have callers specifiy $flags and have
-                               // load() called as needed. That requires updating MANY callers...
-                               $this->saveToCache();
-                       }
+                       $this->saveToCache();
                }
 
                $this->mLoadedItems = true;
@@ -415,9 +418,8 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               $cache = ObjectCache::getMainWANInstance();
                $key = wfMemcKey( 'user', 'id', $this->mId );
-               $data = $cache->get( $key );
+               $data = ObjectCache::getMainWANInstance()->get( $key );
                if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
                        // Object is expired
                        return false;
@@ -448,15 +450,6 @@ class User implements IDBAccessObject {
                        return;
                }
 
-               $cache = ObjectCache::getMainWANInstance();
-
-               // The cache needs good consistency due to its high TTL, so the user
-               // should have been loaded from the master to avoid lag amplification.
-               if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
-                       wfWarn( "Cannot cache slave-loaded User object with ID '{$this->mId}'." );
-                       return;
-               }
-
                $data = array();
                foreach ( self::$mCacheVars as $name ) {
                        $data[$name] = $this->$name;
@@ -464,7 +457,7 @@ class User implements IDBAccessObject {
                $data['mVersion'] = self::VERSION;
                $key = wfMemcKey( 'user', 'id', $this->mId );
 
-               $cache->set( $key, $data );
+               ObjectCache::getMainWANInstance()->set( $key, $data, 3600 );
        }
 
        /** @name newFrom*() static factory methods */
@@ -598,9 +591,10 @@ class User implements IDBAccessObject {
        /**
         * Get database id given a user name
         * @param string $name Username
+        * @param integer $flags User::READ_* constant bitfield
         * @return int|null The corresponding user's ID, or null if user is nonexistent
         */
-       public static function idFromName( $name ) {
+       public static function idFromName( $name, $flags = self::READ_NORMAL ) {
                $nt = Title::makeTitleSafe( NS_USER, $name );
                if ( is_null( $nt ) ) {
                        // Illegal name
@@ -611,8 +605,11 @@ class User implements IDBAccessObject {
                        return self::$idCacheByName[$name];
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $s = $dbr->selectRow(
+               $db = ( $flags & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $s = $db->selectRow(
                        'user',
                        array( 'user_id' ),
                        array( 'user_name' => $nt->getText() ),
@@ -844,15 +841,14 @@ class User implements IDBAccessObject {
         * @since 1.23
         */
        public function checkPasswordValidity( $password ) {
-               global $wgMinimalPasswordLength, $wgMaximalPasswordLength, $wgContLang;
+               global $wgPasswordPolicy;
 
-               static $blockedLogins = array(
-                       'Useruser' => 'Passpass', 'Useruser1' => 'Passpass1', # r75589
-                       'Apitestsysop' => 'testpass', 'Apitestuser' => 'testpass' # r75605
+               $upp = new UserPasswordPolicy(
+                       $wgPasswordPolicy['policies'],
+                       $wgPasswordPolicy['checks']
                );
 
                $status = Status::newGood();
-
                $result = false; //init $result to false for the internal checks
 
                if ( !Hooks::run( 'isValidPassword', array( $password, &$result, $this ) ) ) {
@@ -861,28 +857,8 @@ class User implements IDBAccessObject {
                }
 
                if ( $result === false ) {
-                       if ( strlen( $password ) < $wgMinimalPasswordLength ) {
-                               $status->error( 'passwordtooshort', $wgMinimalPasswordLength );
-                               return $status;
-                       } elseif ( strlen( $password ) > $wgMaximalPasswordLength ) {
-                               // T64685: Password too long, might cause DoS attack
-                               $status->fatal( 'passwordtoolong', $wgMaximalPasswordLength );
-                               return $status;
-                       } elseif ( $wgContLang->lc( $password ) == $wgContLang->lc( $this->mName ) ) {
-                               $status->error( 'password-name-match' );
-                               return $status;
-                       } elseif ( isset( $blockedLogins[$this->getName()] )
-                               && $password == $blockedLogins[$this->getName()]
-                       ) {
-                               $status->error( 'password-login-forbidden' );
-                               return $status;
-                       } else {
-                               //it seems weird returning a Good status here, but this is because of the
-                               //initialization of $result to false above. If the hook is never run or it
-                               //doesn't modify $result, then we will likely get down into this if with
-                               //a valid password.
-                               return $status;
-                       }
+                       $status->merge( $upp->checkUserPassword( $this, $password ) );
+                       return $status;
                } elseif ( $result === true ) {
                        return $status;
                } else {
@@ -968,7 +944,7 @@ class User implements IDBAccessObject {
         *   - 'usable'     Valid for batch processes and login
         *   - 'creatable'  Valid for batch processes, login and account creation
         *
-        * @throws MWException
+        * @throws InvalidArgumentException
         * @return bool|string
         */
        public static function getCanonicalName( $name, $validate = 'valid' ) {
@@ -1015,7 +991,8 @@ class User implements IDBAccessObject {
                                }
                                break;
                        default:
-                               throw new MWException( 'Invalid parameter value for $validate in ' . __METHOD__ );
+                               throw new InvalidArgumentException(
+                                       'Invalid parameter value for $validate in ' . __METHOD__ );
                }
                return $name;
        }
@@ -1162,7 +1139,6 @@ class User implements IDBAccessObject {
                }
 
                $proposedUser = User::newFromId( $sId );
-               $proposedUser->load( self::READ_LATEST );
                if ( !$proposedUser->isLoggedIn() ) {
                        // Not a valid ID
                        return false;
@@ -2350,6 +2326,10 @@ class User implements IDBAccessObject {
 
        /**
         * Get the user touched timestamp
+        *
+        * Use this value only to validate caches via inequalities
+        * such as in the case of HTTP If-Modified-Since response logic
+        *
         * @return string TS_MW Timestamp
         */
        public function getTouched() {
@@ -2357,16 +2337,10 @@ class User implements IDBAccessObject {
 
                if ( $this->mId ) {
                        if ( $this->mQuickTouched === null ) {
-                               $cache = ObjectCache::getMainWANInstance();
                                $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
+                               $cache = ObjectCache::getMainWANInstance();
 
-                               $timestamp = $cache->getCheckKeyTime( $key );
-                               if ( $timestamp ) {
-                                       $this->mQuickTouched = wfTimestamp( TS_MW, $timestamp );
-                               } else {
-                                       # Set the timestamp to get HTTP 304 cache hits
-                                       $this->touch();
-                               }
+                               $this->mQuickTouched = wfTimestamp( TS_MW, $cache->getCheckKeyTime( $key ) );
                        }
 
                        return max( $this->mTouched, $this->mQuickTouched );
@@ -3518,6 +3492,31 @@ class User implements IDBAccessObject {
                $this->setCookie( $name, '', time() - 86400, $secure, $params );
        }
 
+       /**
+        * Set an extended login cookie on the user's client. The expiry of the cookie
+        * is controlled by the $wgExtendedLoginCookieExpiration configuration
+        * variable.
+        *
+        * @see User::setCookie
+        *
+        * @param string $name Name of the cookie to set
+        * @param string $value Value to set
+        * @param bool $secure
+        *  true: Force setting the secure attribute when setting the cookie
+        *  false: Force NOT setting the secure attribute when setting the cookie
+        *  null (default): Use the default ($wgCookieSecure) to set the secure attribute
+        */
+       protected function setExtendedLoginCookie( $name, $value, $secure ) {
+               global $wgExtendedLoginCookieExpiration, $wgCookieExpiration;
+
+               $exp = time();
+               $exp += $wgExtendedLoginCookieExpiration !== null
+                       ? $wgExtendedLoginCookieExpiration
+                       : $wgCookieExpiration;
+
+               $this->setCookie( $name, $value, $exp, $secure );
+       }
+
        /**
         * Set the default cookies for this session on the user's client.
         *
@@ -3527,6 +3526,8 @@ class User implements IDBAccessObject {
         * @param bool $rememberMe Whether to add a Token cookie for elongated sessions
         */
        public function setCookies( $request = null, $secure = null, $rememberMe = false ) {
+               global $wgExtendedLoginCookies;
+
                if ( $request === null ) {
                        $request = $this->getRequest();
                }
@@ -3568,6 +3569,8 @@ class User implements IDBAccessObject {
                foreach ( $cookies as $name => $value ) {
                        if ( $value === false ) {
                                $this->clearCookie( $name );
+                       } elseif ( $rememberMe && in_array( $name, $wgExtendedLoginCookies ) ) {
+                               $this->setExtendedLoginCookie( $name, $value, $secure );
                        } else {
                                $this->setCookie( $name, $value, 0, $secure, array(), $request );
                        }
@@ -3640,12 +3643,6 @@ class User implements IDBAccessObject {
                        return; // anon
                }
 
-               // This method is for updating existing users, so the user should
-               // have been loaded from the master to begin with to avoid problems.
-               if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
-                       wfWarn( "Attempting to save slave-loaded User object with ID '{$this->mId}'." );
-               }
-
                // Get a new user_touched that is higher than the old one.
                // This will be used for a CAS check as a last-resort safety
                // check against race conditions and slave lag.
@@ -3681,8 +3678,9 @@ class User implements IDBAccessObject {
                        // Maybe the problem was a missed cache update; clear it to be safe
                        $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(
-                               "CAS update failed on user_touched for user ID '{$this->mId}';" .
+                               "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."
                        ) );
 
index a5fd9d8..03410cc 100644 (file)
@@ -104,9 +104,9 @@ class WebRequest {
                        if ( !preg_match( '!^https?://!', $url ) ) {
                                $url = 'http://unused' . $url;
                        }
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $a = parse_url( $url );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $a ) {
                                $path = isset( $a['path'] ) ? $a['path'] : '';
 
@@ -176,6 +176,8 @@ class WebRequest {
         * @return string
         */
        public static function detectServer() {
+               global $wgAssumeProxiesUseDefaultProtocolPorts;
+
                $proto = self::detectProtocol();
                $stdPort = $proto === 'https' ? 443 : 80;
 
@@ -186,13 +188,15 @@ class WebRequest {
                        if ( !isset( $_SERVER[$varName] ) ) {
                                continue;
                        }
+
                        $parts = IP::splitHostAndPort( $_SERVER[$varName] );
                        if ( !$parts ) {
                                // Invalid, do not use
                                continue;
                        }
+
                        $host = $parts[0];
-                       if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
+                       if ( $wgAssumeProxiesUseDefaultProtocolPorts && isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
                                // Bug 70021: Assume that upstream proxy is running on the default
                                // port based on the protocol. We have no reliable way to determine
                                // the actual port in use upstream.
@@ -691,7 +695,7 @@ class WebRequest {
                        // This shouldn't happen!
                        throw new MWException( "Web server doesn't provide either " .
                                "REQUEST_URI, HTTP_X_ORIGINAL_URL or SCRIPT_NAME. Report details " .
-                               "of your web server configuration to http://bugzilla.wikimedia.org/" );
+                               "of your web server configuration to https://phabricator.wikimedia.org/" );
                }
                // User-agents should not send a fragment with the URI, but
                // if they do, and the web server passes it on to us, we
@@ -774,7 +778,7 @@ class WebRequest {
         *
         * @param int $deflimit Limit to use if no input and the user hasn't set the option.
         * @param string $optionname To specify an option other than rclimit to pull from.
-        * @return array First element is limit, second is offset
+        * @return int[] First element is limit, second is offset
         */
        public function getLimitOffset( $deflimit = 50, $optionname = 'rclimit' ) {
                global $wgUser;
@@ -1293,6 +1297,7 @@ class FauxRequest extends WebRequest {
        private $wasPosted = false;
        private $session = array();
        private $requestUrl;
+       protected $cookies = array();
 
        /**
         * @param array $data Array of *non*-urlencoded key => value pairs, the
@@ -1367,7 +1372,38 @@ class FauxRequest extends WebRequest {
        }
 
        public function getCookie( $key, $prefix = null, $default = null ) {
-               return $default;
+               if ( $prefix === null ) {
+                       global $wgCookiePrefix;
+                       $prefix = $wgCookiePrefix;
+               }
+               $name = $prefix . $key;
+               return isset( $this->cookies[$name] ) ? $this->cookies[$name] : $default;
+       }
+
+       /**
+        * @since 1.26
+        * @param string $name Unprefixed name of the cookie to set
+        * @param string|null $value Value of the cookie to set
+        * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
+        */
+       public function setCookie( $key, $value, $prefix = null ) {
+               $this->setCookies( array( $key => $value ), $prefix );
+       }
+
+       /**
+        * @since 1.26
+        * @param array $cookies
+        * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
+        */
+       public function setCookies( $cookies, $prefix = null ) {
+               if ( $prefix === null ) {
+                       global $wgCookiePrefix;
+                       $prefix = $wgCookiePrefix;
+               }
+               foreach ( $cookies as $key => $value ) {
+                       $name = $prefix . $key;
+                       $this->cookies[$name] = $value;
+               }
        }
 
        public function checkSessionCookie() {
@@ -1398,8 +1434,18 @@ class FauxRequest extends WebRequest {
         * @param string $val
         */
        public function setHeader( $name, $val ) {
-               $name = strtoupper( $name );
-               $this->headers[$name] = $val;
+               $this->setHeaders( array( $name => $val ) );
+       }
+
+       /**
+        * @since 1.26
+        * @param array $headers
+        */
+       public function setHeaders( $headers ) {
+               foreach ( $headers as $name => $val ) {
+                       $name = strtoupper( $name );
+                       $this->headers[$name] = $val;
+               }
        }
 
        /**
index ab34931..1b6947c 100644 (file)
@@ -28,7 +28,7 @@
 class WebResponse {
 
        /**
-        * Output a HTTP header, wrapper for PHP's header()
+        * Output an HTTP header, wrapper for PHP's header()
         * @param string $string Header to output
         * @param bool $replace Replace current similar header
         * @param null|int $http_response_code Forces the HTTP response code to the specified value.
@@ -53,6 +53,15 @@ class WebResponse {
                return null;
        }
 
+       /**
+        * Output an HTTP status code header
+        * @since 1.26
+        * @param int $code Status code
+        */
+       public function statusHeader( $code ) {
+               HttpStatus::header( $code );
+       }
+
        /**
         * Set the browser cookie
         * @param string $name The name of the cookie.
@@ -162,6 +171,14 @@ class FauxResponse extends WebResponse {
                }
        }
 
+       /**
+        * @since 1.26
+        * @param int $code Status code
+        */
+       public function statusHeader( $code ) {
+               $this->code = intval( $code );
+       }
+
        /**
         * @param string $key The name of the header to get (case insensitive).
         * @return string|null The header value (if set); null otherwise.
index c356c6d..37cffde 100644 (file)
@@ -144,26 +144,19 @@ class Xml {
        public static function monthSelector( $selected = '', $allmonths = null, $id = 'month' ) {
                global $wgLang;
                $options = array();
+               $data = new XmlSelect( 'month', $id, $selected );
                if ( is_null( $selected ) ) {
                        $selected = '';
                }
                if ( !is_null( $allmonths ) ) {
-                       $options[] = self::option(
-                               wfMessage( 'monthsall' )->text(),
-                               $allmonths,
-                               $selected === $allmonths
-                       );
+                       $options[wfMessage( 'monthsall' )->text()] = $allmonths;
                }
                for ( $i = 1; $i < 13; $i++ ) {
-                       $options[] = self::option( $wgLang->getMonthName( $i ), $i, $selected === $i );
-               }
-               return self::openElement( 'select', array(
-                       'id' => $id,
-                       'name' => 'month',
-                       'class' => 'mw-month-selector'
-               ) )
-                       . implode( "\n", $options )
-                       . self::closeElement( 'select' );
+                       $options[$wgLang->getMonthName( $i )] = $i;
+               }
+               $data->addOptions( $options );
+               $data->setAttribute( 'class', 'mw-month-selector' );
+               return $data->getHTML();
        }
 
        /**
index 32f69d9..87cc48e 100644 (file)
@@ -1474,7 +1474,6 @@ $zh2Hant = array(
 '虑' => '慮',
 '虚' => '虛',
 '虫' => '蟲',
-'虬' => '虯',
 '虮' => '蟣',
 '虽' => '雖',
 '虾' => '蝦',
@@ -3075,6 +3074,7 @@ $zh2Hant = array(
 '9余' => '9餘',
 '·范' => '·范',
 '’s ' => '’s',
+'、面点' => '、麵點',
 '。个中' => '。箇中',
 '〇周后' => '〇周後',
 '〇年' => '〇年',
@@ -3186,6 +3186,7 @@ $zh2Hant = array(
 '下签' => '下籤',
 '下课钟' => '下課鐘',
 '不干不净' => '不乾不淨',
+'不干胶' => '不乾膠',
 '不克自制' => '不克自制',
 '不加自制' => '不加自制',
 '不占凶吉' => '不占凶吉',
@@ -3372,7 +3373,6 @@ $zh2Hant = array(
 '干擦' => '乾擦',
 '干支剌' => '乾支剌',
 '干支支' => '乾支支',
-'干敲梆子不卖油' => '乾敲梆子不賣油',
 '干料' => '乾料',
 '干旱' => '乾旱',
 '干暖' => '乾暖',
@@ -3480,8 +3480,7 @@ $zh2Hant = array(
 '乱发生' => '亂發生',
 '乱发脾气' => '亂發脾氣',
 '乱发' => '亂髮',
-'乱哄' => '亂鬨',
-'乱哄不过来' => '亂鬨不過來',
+'乱哄哄' => '亂鬨鬨',
 '了然后' => '了然後',
 '事有斗巧' => '事有鬥巧',
 '事里' => '事裡',
@@ -3726,6 +3725,7 @@ $zh2Hant = array(
 '亮钟' => '亮鐘',
 '人云' => '人云',
 '人如风后入江云' => '人如風後入江雲',
+'人干的' => '人幹的',
 '人欲' => '人慾',
 '人数只' => '人數只',
 '人数里' => '人數裡',
@@ -3734,6 +3734,7 @@ $zh2Hant = array(
 '什锦面' => '什錦麵',
 '仇仇' => '仇讎',
 '介胄' => '介冑',
+'他干的' => '他幹的',
 '他钟' => '他鐘',
 '付托' => '付託',
 '仙后' => '仙后',
@@ -3846,6 +3847,7 @@ $zh2Hant = array(
 '个里' => '個裡',
 '个钟' => '個鐘',
 '个钟表' => '個鐘錶',
+'们干的' => '們幹的',
 '幸免' => '倖免',
 '幸存' => '倖存',
 '幸幸' => '倖幸',
@@ -4109,7 +4111,6 @@ $zh2Hant = array(
 '利于' => '利於',
 '刮来刮去' => '刮來刮去',
 '刮起来' => '刮起來',
-'刮风下雪倒便宜' => '刮風下雪倒便宜',
 '刮胡' => '刮鬍',
 '到山里' => '到山裡',
 '制冷机' => '制冷機',
@@ -4235,7 +4236,6 @@ $zh2Hant = array(
 '博尔术' => '博爾朮',
 '卜云吉' => '卜云吉',
 '占了卜' => '占了卜',
-'占便宜的是呆' => '占便宜的是獃',
 '印累绶若' => '印纍綬若',
 '印制' => '印製',
 '印鉴' => '印鑑',
@@ -4702,7 +4702,6 @@ $zh2Hant = array(
 '太后' => '太后',
 '太丑' => '太醜',
 '太阁' => '太閤',
-'夯干' => '夯幹',
 '夸克' => '夸克',
 '夸父' => '夸父',
 '夸特' => '夸特',
@@ -4839,6 +4838,7 @@ $zh2Hant = array(
 '对准表' => '對準錶',
 '对准钟' => '對準鐘',
 '对准钟表' => '對準鐘錶',
+'对着干' => '對着幹',
 '对华发' => '對華發',
 '对表中' => '對表中',
 '对表扬' => '對表揚',
@@ -4934,7 +4934,6 @@ $zh2Hant = array(
 '工作台' => '工作檯',
 '工致' => '工緻',
 '左冲右突' => '左衝右突',
-'巧妇做不得无面馎饦' => '巧婦做不得無麵餺飥',
 '巧干' => '巧幹',
 '巧历' => '巧曆',
 '巧历史' => '巧歷史',
@@ -4996,6 +4995,7 @@ $zh2Hant = array(
 '干吗' => '幹嗎',
 '干嘛' => '幹嘛',
 '干坏事' => '幹壞事',
+'干大事' => '幹大事',
 '干完' => '幹完',
 '干家' => '幹家',
 '干得' => '幹得',
@@ -5013,7 +5013,8 @@ $zh2Hant = array(
 '干甚么' => '幹甚麼',
 '干略' => '幹略',
 '干当' => '幹當',
-'干的停当' => '幹的停當',
+'干的事' => '幹的事',
+'干的好事' => '幹的好事',
 '干细胞' => '幹細胞',
 '干线' => '幹線',
 '干练' => '幹練',
@@ -5141,6 +5142,7 @@ $zh2Hant = array(
 '很凶' => '很兇',
 '很准' => '很準',
 '很丑' => '很醜',
+'很松' => '很鬆',
 '律历志' => '律曆志',
 '后印' => '後印',
 '后台老板' => '後台老板',
@@ -5356,7 +5358,9 @@ $zh2Hant = array(
 '怪里怪气' => '怪裡怪氣',
 '怫郁' => '怫鬱',
 '恂栗' => '恂慄',
+'恒基' => '恒基',
 '恒生' => '恒生',
+'恒隆' => '恒隆',
 '恕乏价催' => '恕乏价催',
 '息交绝游' => '息交絕遊',
 '息谷' => '息穀',
@@ -5503,7 +5507,6 @@ $zh2Hant = array(
 '批复' => '批覆',
 '批注' => '批註',
 '批斗' => '批鬥',
-'承制' => '承製',
 '抑制作用' => '抑制作用',
 '抑制剂' => '抑制劑',
 '抑郁' => '抑鬱',
@@ -5803,6 +5806,7 @@ $zh2Hant = array(
 '支干' => '支幹',
 '支配欲' => '支配慾',
 '收获' => '收穫',
+'改制成' => '改制成',
 '改征' => '改徵',
 '改采' => '改採',
 '放懞挣' => '放懞掙',
@@ -5874,25 +5878,40 @@ $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天',
 '于一' => '於一',
+'于一天' => '於一天',
 '于一役' => '於一役',
 '于七' => '於七',
+'于七天' => '於七天',
 '于三' => '於三',
+'于三天' => '於三天',
 '于世' => '於世',
 '于之' => '於之',
 '于乎' => '於乎',
 '于九' => '於九',
+'于九天' => '於九天',
 '于事' => '於事',
 '于二' => '於二',
+'于二天' => '於二天',
 '于五' => '於五',
+'于五天' => '於五天',
 '于人' => '於人',
 '于今' => '於今',
 '于他' => '於他',
@@ -5900,14 +5919,18 @@ $zh2Hant = array(
 '于何' => '於何',
 '于你' => '於你',
 '于八' => '於八',
+'于八天' => '於八天',
 '于六' => '於六',
+'于六天' => '於六天',
 '于前' => '於前',
 '于劣' => '於劣',
 '于勤' => '於勤',
 '于十' => '於十',
+'于十天' => '於十天',
 '于半' => '於半',
 '于呼哀哉' => '於呼哀哉',
 '于四' => '於四',
+'于四天' => '於四天',
 '于国' => '於國',
 '于坏' => '於坏',
 '于垂' => '於垂',
@@ -6161,6 +6184,7 @@ $zh2Hant = array(
 '柜上' => '柜上',
 '柜子' => '柜子',
 '柜柳' => '柜柳',
+'查封后' => '查封後',
 '柱梁' => '柱樑',
 '柳斌杰' => '柳斌杰',
 '柳诒征' => '柳詒徵',
@@ -6186,6 +6210,7 @@ $zh2Hant = array(
 '杆秤' => '桿秤',
 '杆菌' => '桿菌',
 '梁上君子' => '梁上君子',
+'梁启超' => '梁啓超',
 '条干' => '條幹',
 '梨干' => '梨乾',
 '梯冲' => '梯衝',
@@ -6435,6 +6460,7 @@ $zh2Hant = array(
 '涂长望' => '涂長望',
 '涂鴻欽' => '涂鴻欽',
 '涂鸿钦' => '涂鴻欽',
+'涌水塘' => '涌水塘',
 '涳蒙' => '涳濛',
 '涸干' => '涸乾',
 '凉席' => '涼蓆',
@@ -6472,6 +6498,7 @@ $zh2Hant = array(
 '涌入' => '湧入',
 '涌出' => '湧出',
 '涌向' => '湧向',
+'涌水' => '湧水',
 '涌泉' => '湧泉',
 '涌现' => '湧現',
 '涌起' => '湧起',
@@ -6523,6 +6550,7 @@ $zh2Hant = array(
 '滃郁' => '滃鬱',
 '滑借' => '滑藉',
 '汇丰' => '滙豐',
+'渗漓' => '滲灕',
 '卤了' => '滷了',
 '卤五花' => '滷五花',
 '卤味' => '滷味',
@@ -6566,7 +6594,6 @@ $zh2Hant = array(
 '澄江县' => '澂江縣',
 '澄澹精致' => '澄澹精致',
 '澒蒙' => '澒濛',
-'泽渗漓而下降' => '澤滲灕而下降',
 '淀乃不耕之地' => '澱乃不耕之地',
 '淀北片' => '澱北片',
 '淀山' => '澱山',
@@ -6635,6 +6662,7 @@ $zh2Hant = array(
 '烘制' => '烘製',
 '烤干' => '烤乾',
 '烤卤' => '烤滷',
+'烹制' => '烹製',
 '焙干' => '焙乾',
 '无征不信' => '無徵不信',
 '无业游民' => '無業游民',
@@ -6706,7 +6734,6 @@ $zh2Hant = array(
 '犹如表' => '猶如錶',
 '犹如钟' => '猶如鐘',
 '犹如钟表' => '猶如鐘錶',
-'呆串了皮' => '獃串了皮',
 '狱里' => '獄裡',
 '奖杯' => '獎盃',
 '独裁制' => '獨裁制',
@@ -6719,6 +6746,7 @@ $zh2Hant = array(
 '玉米面' => '玉米面',
 '王侯后' => '王侯后',
 '王后' => '王后',
+'王添灯' => '王添灯',
 '王田里' => '王田里',
 '王鉴' => '王鑑',
 '王余鱼' => '王餘魚',
@@ -7133,6 +7161,7 @@ $zh2Hant = array(
 '节欲' => '節慾',
 '节目里' => '節目裡',
 '节余' => '節餘',
+'范亭' => '範亭',
 '范例' => '範例',
 '范围' => '範圍',
 '范字' => '範字',
@@ -7311,7 +7340,6 @@ $zh2Hant = array(
 '系辞' => '繫辭',
 '系鞋带' => '繫鞋帶',
 '系风捕影' => '繫風捕影',
-'继承制' => '繼承制',
 '累囚' => '纍囚',
 '累堆' => '纍堆',
 '累瓦结绳' => '纍瓦結繩',
@@ -7330,7 +7358,6 @@ $zh2Hant = array(
 '羁系' => '羈繫',
 '美容美发' => '美容美髮',
 '美于' => '美於',
-'美制' => '美製',
 '美丑' => '美醜',
 '美发学' => '美髮學',
 '美发师' => '美髮師',
@@ -7438,6 +7465,7 @@ $zh2Hant = array(
 '卧游' => '臥遊',
 '臧谷亡羊' => '臧穀亡羊',
 '临潼斗宝' => '臨潼鬥寶',
+'自干五' => '自乾五',
 '自制一下' => '自制一下',
 '自制下来' => '自制下來',
 '自制不' => '自制不',
@@ -7885,6 +7913,7 @@ $zh2Hant = array(
 '角落里' => '角落裡',
 '觚棱' => '觚稜',
 '解雇' => '解僱',
+'解封后' => '解封後',
 '解铃仍须系铃人' => '解鈴仍須繫鈴人',
 '解铃还须系铃人' => '解鈴還須繫鈴人',
 '解发佯狂' => '解髮佯狂',
@@ -7927,7 +7956,6 @@ $zh2Hant = array(
 '托附' => '託附',
 '许愿起经' => '許愿起經',
 '許聖杰' => '許聖杰',
-'许虬' => '許虬',
 '注上' => '註上',
 '注册' => '註冊',
 '注失' => '註失',
@@ -8372,7 +8400,6 @@ $zh2Hant = array(
 '鄭凱云' => '鄭凱云',
 '配制饲料' => '配制飼料',
 '配图里' => '配圖裡',
-'配水干管' => '配水幹管',
 '配制' => '配製',
 '酒帘' => '酒帘',
 '酒气冲天' => '酒氣衝天',
@@ -8739,6 +8766,7 @@ $zh2Hant = array(
 '雪里蕻' => '雪裡蕻',
 '云吞' => '雲吞',
 '云笈七签' => '雲笈七籤',
+'云里雾里' => '雲裡霧裡',
 '云游' => '雲遊',
 '云须' => '雲鬚',
 '零个' => '零個',
@@ -8868,6 +8896,7 @@ $zh2Hant = array(
 '飘荡' => '飄蕩',
 '飘游' => '飄遊',
 '飘飘荡荡' => '飄飄蕩蕩',
+'飘发自由女神' => '飄髮自由女神',
 '飞扎' => '飛紮',
 '飞刍挽粟' => '飛芻輓粟',
 '飞行钟' => '飛行鐘',
@@ -9156,6 +9185,7 @@ $zh2Hant = array(
 '斗合' => '鬥合',
 '斗嘴' => '鬥嘴',
 '斗地主' => '鬥地主',
+'斗垮' => '鬥垮',
 '斗士' => '鬥士',
 '斗富' => '鬥富',
 '斗巧' => '鬥巧',
@@ -9171,6 +9201,7 @@ $zh2Hant = array(
 '斗打' => '鬥打',
 '斗批改' => '鬥批改',
 '斗技' => '鬥技',
+'斗败' => '鬥敗',
 '斗文' => '鬥文',
 '斗智' => '鬥智',
 '斗暴' => '鬥暴',
@@ -9186,6 +9217,7 @@ $zh2Hant = array(
 '斗牛' => '鬥牛',
 '斗犀台' => '鬥犀臺',
 '斗犬' => '鬥犬',
+'斗狗' => '鬥狗',
 '斗狠' => '鬥狠',
 '斗兽' => '鬥獸',
 '斗叠' => '鬥疊',
@@ -9200,6 +9232,7 @@ $zh2Hant = array(
 '斗草' => '鬥草',
 '斗叶儿' => '鬥葉兒',
 '斗叶子' => '鬥葉子',
+'斗蛐' => '鬥蛐',
 '斗蟋蟀' => '鬥蟋蟀',
 '斗话' => '鬥話',
 '斗艳' => '鬥豔',
@@ -9333,7 +9366,6 @@ $zh2Hant = array(
 '曲霉' => '麴黴',
 '麹霉' => '麴黴',
 '面人儿' => '麵人兒',
-'面价' => '麵價',
 '面包' => '麵包',
 '面坊' => '麵坊',
 '面坯儿' => '麵坯兒',
@@ -9345,7 +9377,6 @@ $zh2Hant = array(
 '面条' => '麵條',
 '面汤' => '麵湯',
 '面浆' => '麵漿',
-'面灰' => '麵灰',
 '面疙瘩' => '麵疙瘩',
 '面皮' => '麵皮',
 '面码儿' => '麵碼兒',
@@ -9355,10 +9386,13 @@ $zh2Hant = array(
 '面团' => '麵糰',
 '面缸' => '麵缸',
 '面茶' => '麵茶',
+'面制品' => '麵製品',
 '面食' => '麵食',
 '面饺' => '麵餃',
 '面饼' => '麵餅',
 '面馆' => '麵館',
+'面点、' => '麵點、',
+'面点师' => '麵點師',
 '麻将席' => '麻將蓆',
 '麻酱面' => '麻醬麵',
 '黄干黑瘦' => '黃乾黑瘦',
@@ -12098,6 +12132,7 @@ $zh2Hans = array(
 '鈿' => '钿',
 '鉀' => '钾',
 '鉁' => '𨱅',
+'鉄' => '铁',
 '鉅' => '钜',
 '鉆' => '钻',
 '鉈' => '铊',
@@ -13299,7 +13334,6 @@ $zh2Hans = array(
 '乾崗' => '乾岗',
 '乾巛' => '乾巛',
 '乾州' => '乾州',
-'乾式' => '乾式',
 '乾录' => '乾录',
 '乾錄' => '乾录',
 '乾律' => '乾律',
@@ -13722,6 +13756,7 @@ $zh2Hans = array(
 '穀旦' => '穀旦',
 '穀梁' => '穀梁',
 '穀水' => '穀水',
+'穀阳' => '穀阳',
 '穀陽' => '穀阳',
 '穿著者' => '穿着者',
 '竹昇' => '竹升',
@@ -13757,6 +13792,7 @@ $zh2Hans = array(
 '著者' => '著者',
 '著身' => '著身',
 '著述' => '著述',
+'蔡孝乾' => '蔡孝乾',
 '蔡絛' => '蔡絛',
 '行餘' => '行馀',
 '覆蓋' => '覆盖',
@@ -13971,7 +14007,7 @@ $zh2TW = array(
 '叱咤叱' => '叱咤叱',
 '叱咤咤' => '叱咤咤',
 '叱咤樂壇' => '叱咤樂壇',
-'斯坦福' => '史丹福',
+'斯坦福大学' => '史丹福大學',
 '斯皮尔伯格' => '史匹柏',
 '斯特劳斯' => '史特勞斯',
 '斯威士兰' => '史瓦濟蘭',
@@ -14060,6 +14096,7 @@ $zh2TW = array(
 '老挝语' => '寮語',
 '老撾語' => '寮語',
 '波里活' => '寶萊塢',
+'对着干' => '對著幹',
 '高峰时段' => '尖峰時段',
 '高峰时间' => '尖峰時間',
 '贊比亞' => '尚比亞',
@@ -14179,7 +14216,8 @@ $zh2TW = array(
 '东盟' => '東協',
 '亚细安' => '東協',
 '東盟' => '東協',
-'东南亚国家联盟' => '東南亞國協',
+'东南亚国家联盟' => '東南亞國家協會',
+'東南亞國家聯盟' => '東南亞國家協會',
 '柏林墙' => '柏林圍牆',
 '柏林牆' => '柏林圍牆',
 '乍得' => '查德',
@@ -14253,7 +14291,9 @@ $zh2TW = array(
 '铁托' => '狄托',
 '塞拉利昂' => '獅子山',
 '独联体' => '獨立國協',
+'獨聯體' => '獨立國協',
 '独立国家联合体' => '獨立國家國協',
+'獨立國家聯合體' => '獨立國家國協',
 '波利尼西亚' => '玻里尼西亞',
 '波利尼西亞' => '玻里尼西亞',
 '本傑明' => '班傑明',
@@ -14482,6 +14522,7 @@ $zh2TW = array(
 '集装箱' => '貨櫃',
 '数据库' => '資料庫',
 '數據庫' => '資料庫',
+'信息时代' => '資訊時代',
 '信息论' => '資訊理論',
 '乔布斯' => '賈伯斯',
 '宾西法尼亚' => '賓夕法尼亞',
@@ -15047,6 +15088,8 @@ $zh2HK = array(
 '恺撒' => '凱撒',
 '函数里' => '函數裏',
 '分布' => '分佈',
+'分佈著' => '分佈着',
+'分布著' => '分佈着',
 '分占' => '分佔',
 '錢尼' => '切尼',
 '切尔诺贝利' => '切爾諾貝爾',
@@ -15167,7 +15210,7 @@ $zh2HK = array(
 '叫著錄' => '叫著錄',
 '古柯鹼' => '可卡因',
 '叱吒' => '叱咤',
-'斯坦福' => '史丹福',
+'斯坦福大学' => '史丹福大學',
 '史匹柏' => '史匹堡',
 '斯皮尔伯格' => '史匹堡',
 '史蒂芬·史匹柏' => '史提芬·史匹堡',
@@ -15947,6 +15990,8 @@ $zh2HK = array(
 '敞著述' => '敞著述',
 '敞著錄' => '敞著錄',
 '散布' => '散佈',
+'散佈著' => '散佈着',
+'散布著' => '散佈着',
 '數著' => '數着',
 '数字技术' => '數碼技術',
 '數位技術' => '數碼技術',
@@ -16065,6 +16110,7 @@ $zh2HK = array(
 '村里' => '村裏',
 '杜塞道夫' => '杜塞爾多夫',
 '迪拜' => '杜拜',
+'東南亞國家協會' => '東南亞國家聯盟',
 '亚细安' => '東盟',
 '東協' => '東盟',
 '板著臉' => '板着臉',
@@ -16362,6 +16408,8 @@ $zh2HK = array(
 '独占' => '獨佔',
 '獨占' => '獨佔',
 '獨著' => '獨着',
+'獨立國家國協' => '獨立國家聯合體',
+'獨立國協' => '獨聯體',
 '獨著作' => '獨著作',
 '獨著名' => '獨著名',
 '獨著書' => '獨著書',
@@ -16661,6 +16709,7 @@ $zh2HK = array(
 '箱里' => '箱裏',
 '节目里' => '節目裏',
 '簽著' => '簽着',
+'篮板球' => '籃板球',
 '籃板球' => '籃板球',
 '迈克尔' => '米高',
 '麦克尔' => '米高',
@@ -17096,6 +17145,7 @@ $zh2HK = array(
 '買凶' => '買兇',
 '費占' => '費佔',
 '费占' => '費佔',
+'信息时代' => '資訊時代',
 '赌台' => '賭枱',
 '尚比亞' => '贊比亞',
 '西臺人' => '赫梯人',
@@ -17483,6 +17533,7 @@ $zh2HK = array(
 '冰淇淋' => '雪糕',
 '冰激凌' => '雪糕',
 '雪里' => '雪裏',
+'云里雾里' => '雲裏霧裏',
 '莱特湾' => '雷伊泰灣',
 '萊特灣' => '雷伊泰灣',
 '晶体管' => '電晶體',
@@ -17718,8 +17769,10 @@ $zh2CN = array(
 '邱吉爾' => '丘吉尔',
 'C型肝炎' => '丙型肝炎',
 'C肝' => '丙肝',
+'東南亞國家協會' => '东南亚国家联盟',
 '亚细安' => '东盟',
 '東協' => '东盟',
+'仲介' => '中介',
 '臨著' => '临着',
 '臨著書' => '临著书',
 '臨著作' => '临著作',
@@ -17879,6 +17932,7 @@ $zh2CN = array(
 '保障著稱' => '保障著称',
 '保障著者' => '保障著者',
 '保障著述' => '保障著述',
+'資訊時代' => '信息时代',
 '資訊理論' => '信息论',
 '信著' => '信着',
 '信著書' => '信著书',
@@ -18014,6 +18068,8 @@ $zh2CN = array(
 '嘉芙蓮' => '凯瑟琳',
 '份內' => '分内',
 '份外' => '分外',
+'分佈著' => '分布着',
+'分布著' => '分布着',
 '解像度' => '分辨率',
 '解析度' => '分辨率',
 '份量' => '分量',
@@ -18922,6 +18978,8 @@ $zh2CN = array(
 '敞著稱' => '敞著称',
 '敞著者' => '敞著者',
 '敞著述' => '敞著述',
+'散佈著' => '散布着',
+'散布著' => '散布着',
 '數位訊號' => '数字信号',
 '數碼訊號' => '数字信号',
 '數位技術' => '数字技术',
@@ -18954,7 +19012,7 @@ $zh2CN = array(
 '斥著稱' => '斥著称',
 '斥著者' => '斥著者',
 '斥著述' => '斥著述',
-'史丹福' => '斯坦福',
+'史丹福大學' => '斯坦福大学',
 '史達林' => '斯大林',
 '史瓦濟蘭' => '斯威士兰',
 '斯洛維尼亞' => '斯洛文尼亚',
@@ -19199,6 +19257,7 @@ $zh2CN = array(
 '涵著者' => '涵著者',
 '涵著述' => '涵著述',
 '混帳' => '混账',
+'清澈' => '清澈',
 '清帳' => '清账',
 '渴著' => '渴着',
 '渴著書' => '渴著书',
@@ -19290,6 +19349,8 @@ $zh2CN = array(
 '千里達托貝哥' => '特立尼达和托巴哥',
 '狗隻' => '犬只',
 '獨著' => '独着',
+'獨立國家國協' => '独立国家联合体',
+'獨立國協' => '独联体',
 '獨著書' => '独著书',
 '獨著作' => '独著作',
 '獨著名' => '独著名',
@@ -20386,6 +20447,8 @@ $zh2CN = array(
 '髭著稱' => '髭著称',
 '髭著者' => '髭著者',
 '髭著述' => '髭著述',
+'魚雷' => '鱼雷',
+'鱼雷' => '鱼雷',
 '咪高峰' => '麦克风',
 '黏著' => '黏着',
 '黏著書' => '黏著书',
index f4f2a2a..a81adf9 100644 (file)
@@ -368,6 +368,9 @@ class HistoryPager extends ReverseChronologicalPager {
         */
        protected $parentLens;
 
+       /** @var bool Whether to show the tag editing UI */
+       protected $showTagEditUI;
+
        /**
         * @param HistoryAction $historyPage
         * @param string $year
@@ -381,6 +384,7 @@ class HistoryPager extends ReverseChronologicalPager {
                $this->tagFilter = $tagFilter;
                $this->getDateCond( $year, $month );
                $this->conds = $conds;
+               $this->showTagEditUI = ChangeTags::showTagEditingUI( $this->getUser() );
        }
 
        // For hook compatibility...
@@ -504,7 +508,7 @@ class HistoryPager extends ReverseChronologicalPager {
                if ( $user->isAllowed( 'deleterevision' ) ) {
                        $actionButtons .= $this->getRevisionButton( 'revisiondelete', 'showhideselectedversions' );
                }
-               if ( ChangeTags::showTagEditingUI( $user ) ) {
+               if ( $this->showTagEditUI ) {
                        $actionButtons .= $this->getRevisionButton( 'editchangetags', 'history-edit-tags' );
                }
                if ( $actionButtons ) {
@@ -631,14 +635,13 @@ class HistoryPager extends ReverseChronologicalPager {
                $del = '';
                $user = $this->getUser();
                $canRevDelete = $user->isAllowed( 'deleterevision' );
-               $showTagEditUI = ChangeTags::showTagEditingUI( $user );
                // Show checkboxes for each revision, to allow for revision deletion and
                // change tags
-               if ( $canRevDelete || $showTagEditUI ) {
+               if ( $canRevDelete || $this->showTagEditUI ) {
                        $this->preventClickjacking();
                        // If revision was hidden from sysops and we don't need the checkbox
                        // for anything else, disable it
-                       if ( !$showTagEditUI && !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
+                       if ( !$this->showTagEditUI && !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                        // Otherwise, enable the checkbox...
                        } else {
index 203c687..0c1a344 100644 (file)
@@ -234,7 +234,7 @@ class InfoAction extends FormlessAction {
 
                // Display title
                $displayTitle = $title->getPrefixedText();
-               if ( !empty( $pageProperties['displaytitle'] ) ) {
+               if ( isset( $pageProperties['displaytitle'] ) ) {
                        $displayTitle = $pageProperties['displaytitle'];
                }
 
@@ -259,7 +259,7 @@ class InfoAction extends FormlessAction {
 
                // Default sort key
                $sortKey = $title->getCategorySortkey();
-               if ( !empty( $pageProperties['defaultsort'] ) ) {
+               if ( isset( $pageProperties['defaultsort'] ) ) {
                        $sortKey = $pageProperties['defaultsort'];
                }
 
@@ -325,8 +325,27 @@ class InfoAction extends FormlessAction {
                ) {
                        // Number of page watchers
                        $pageInfo['header-basic'][] = array(
-                               $this->msg( 'pageinfo-watchers' ), $lang->formatNum( $pageCounts['watchers'] )
+                               $this->msg( 'pageinfo-watchers' ),
+                               $lang->formatNum( $pageCounts['watchers'] )
                        );
+                       if (
+                               $config->get( 'ShowUpdatedMarker' ) &&
+                               isset( $pageCounts['visitingWatchers'] )
+                       ) {
+                               $minToDisclose = $config->get( 'UnwatchedPageSecret' );
+                               if ( $pageCounts['visitingWatchers'] > $minToDisclose ||
+                                       $user->isAllowed( 'unwatchedpages' ) ) {
+                                       $pageInfo['header-basic'][] = array(
+                                               $this->msg( 'pageinfo-visiting-watchers' ),
+                                               $lang->formatNum( $pageCounts['visitingWatchers'] )
+                                       );
+                               } else {
+                                       $pageInfo['header-basic'][] = array(
+                                               $this->msg( 'pageinfo-visiting-watchers' ),
+                                               $this->msg( 'pageinfo-few-visiting-watchers' )
+                                       );
+                               }
+                       }
                } elseif ( $unwatchedPageThreshold !== false ) {
                        $pageInfo['header-basic'][] = array(
                                $this->msg( 'pageinfo-watchers' ),
@@ -448,7 +467,8 @@ class InfoAction extends FormlessAction {
                                }
                        }
                        $expiry = $title->getRestrictionExpiry( $restrictionType );
-                       $formattedexpiry = $this->msg( 'parentheses', $this->getLanguage()->formatExpiry( $expiry ) )->escaped();
+                       $formattedexpiry = $this->msg( 'parentheses',
+                               $this->getLanguage()->formatExpiry( $expiry ) )->escaped();
                        $message .= $this->msg( 'word-separator' )->escaped() . $formattedexpiry;
 
                        // Messages: restriction-edit, restriction-move, restriction-create,
@@ -670,6 +690,26 @@ class InfoAction extends FormlessAction {
                );
                $result['watchers'] = $watchers;
 
+               if ( $config->get( 'ShowUpdatedMarker' ) ) {
+                       // 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 );
+                       // Number of page watchers who also visited a "recent" edit
+                       $visitingWatchers = (int)$dbr->selectField(
+                               'watchlist',
+                               'COUNT(*)',
+                               array(
+                                       'wl_namespace' => $title->getNamespace(),
+                                       'wl_title' => $title->getDBkey(),
+                                       'wl_notificationtimestamp >= ' . $dbr->addQuotes( $threshold ) .
+                                       ' OR wl_notificationtimestamp IS NULL'
+                               ),
+                               __METHOD__
+                       );
+                       $result['visitingWatchers'] = $visitingWatchers;
+               }
+
                // Total number of edits
                $edits = (int)$dbr->selectField(
                        'revision',
index 727bed2..b71b0e9 100644 (file)
  */
 class RawAction extends FormlessAction {
        /**
-        * @var bool Does the request include a gen=css|javascript parameter
-        * @deprecated This used to be a string for "css" or "javascript" but
-        * it is no longer used. Setting this parameter results in empty content
-        * being served
+        * Whether the request includes a 'gen' parameter
+        * @var bool
+        * @deprecated since 1.17 This used to be a string for "css" or "javascript" but
+        * it is no longer used. Setting this parameter results in an empty response.
         */
        private $gen = false;
 
@@ -56,6 +56,7 @@ class RawAction extends FormlessAction {
        function onView() {
                $this->getOutput()->disable();
                $request = $this->getRequest();
+               $response = $request->response();
                $config = $this->context->getConfig();
 
                if ( !$request->checkUrlExtension() ) {
@@ -66,42 +67,35 @@ class RawAction extends FormlessAction {
                        return; // Client cache fresh and headers sent, nothing more to do.
                }
 
-               # special case for 'generated' raw things: user css/js
-               # This is deprecated and will only return empty content
                $gen = $request->getVal( 'gen' );
-               $smaxage = $request->getIntOrNull( 'smaxage' );
-
                if ( $gen == 'css' || $gen == 'js' ) {
                        $this->gen = true;
-                       if ( $smaxage === null ) {
-                               $smaxage = $config->get( 'SquidMaxage' );
-                       }
                }
 
                $contentType = $this->getContentType();
 
-               # Force caching for CSS and JS raw content, default: 5 minutes.
-               # Note: If using a canonical url for userpage css/js, we send an HTCP purge.
+               $maxage = $request->getInt( 'maxage', $config->get( 'SquidMaxage' ) );
+               $smaxage = $request->getIntOrNull( 'smaxage' );
                if ( $smaxage === null ) {
-                       if ( $contentType == 'text/css' || $contentType == 'text/javascript' ) {
+                       if ( $this->gen ) {
+                               $smaxage = $config->get( 'SquidMaxage' );
+                       } elseif ( $contentType == 'text/css' || $contentType == 'text/javascript' ) {
+                               // CSS/JS raw content has its own squid max age configuration.
+                               // Note: Title::getSquidURLs() includes action=raw for css/js pages,
+                               // so if using the canonical url, this will get HTCP purges.
                                $smaxage = intval( $config->get( 'ForcedRawSMaxage' ) );
                        } else {
+                               // No squid cache for anything else
                                $smaxage = 0;
                        }
                }
 
-               $maxage = $request->getInt( 'maxage', $config->get( 'SquidMaxage' ) );
-
-               $response = $request->response();
-
                $response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' );
-               # Output may contain user-specific data;
-               # vary generated content for open sessions on private wikis
+               // Output may contain user-specific data;
+               // vary generated content for open sessions on private wikis
                $privateCache = !User::isEveryoneAllowed( 'read' ) && ( $smaxage == 0 || session_id() != '' );
-               // Bug 53032 - make this private if user is logged in,
-               // so we don't accidentally cache cookies
-               $privateCache = $privateCache ?: $this->getUser()->isLoggedIn();
-               # allow the client to cache this for 24 hours
+               // Don't accidentally cache cookies if user is logged in (T55032)
+               $privateCache = $privateCache || $this->getUser()->isLoggedIn();
                $mode = $privateCache ? 'private' : 'public';
                $response->header(
                        'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage
@@ -109,12 +103,12 @@ class RawAction extends FormlessAction {
 
                $text = $this->getRawText();
 
+               // Don't return a 404 response for CSS or JavaScript;
+               // 404s aren't generally cached and it would create
+               // extra hits when user CSS/JS are on and the user doesn't
+               // have the pages.
                if ( $text === false && $contentType == 'text/x-wiki' ) {
-                       # Don't return a 404 response for CSS or JavaScript;
-                       # 404s aren't generally cached and it would create
-                       # extra hits when user CSS/JS are on and the user doesn't
-                       # have the pages.
-                       $response->header( 'HTTP/1.x 404 Not Found' );
+                       $response->statusHeader( 404 );
                }
 
                if ( !Hooks::run( 'RawPageViewBeforeOutput', array( &$this, &$text ) ) ) {
index bc28c8e..559cfaf 100644 (file)
@@ -37,7 +37,6 @@ class UnprotectAction extends ProtectAction {
        }
 
        public function show() {
-
                $this->page->unprotect();
        }
 }
index 55f9677..393ff49 100644 (file)
@@ -1056,7 +1056,6 @@ abstract class ApiBase extends ContextSource {
         */
        protected function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
                if ( !is_null( $min ) && $value < $min ) {
-
                        $msg = $this->encodeParamName( $paramName ) . " may not be less than $min (set to $value)";
                        $this->warnOrDie( $msg, $enforceLimits );
                        $value = $min;
@@ -2482,7 +2481,7 @@ abstract class ApiBase extends ContextSource {
         * Returns the description string for this module
         *
         * Ignored if an i18n message exists for
-        * "apihelp-{$this->getModulePathString()}-description".
+        * "apihelp-{$this->getModulePath()}-description".
         *
         * @deprecated since 1.25
         * @return Message|string|array
@@ -2496,7 +2495,7 @@ abstract class ApiBase extends ContextSource {
         *
         * For each parameter, ignored if an i18n message exists for the parameter.
         * By default that message is
-        * "apihelp-{$this->getModulePathString()}-param-{$param}", but it may be
+        * "apihelp-{$this->getModulePath()}-param-{$param}", but it may be
         * overridden using ApiBase::PARAM_HELP_MSG in the data returned by
         * self::getFinalParams().
         *
@@ -2646,7 +2645,6 @@ abstract class ApiBase extends ContextSource {
                wfDeprecated( __METHOD__, '1.25' );
                $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
                if ( $params ) {
-
                        $paramsDescription = $this->getFinalParamDescription();
                        $msg = '';
                        $paramPrefix = "\n" . str_repeat( ' ', 24 );
index 26b5f0e..6adfc1a 100644 (file)
@@ -52,7 +52,13 @@ class ApiBlock extends ApiBase {
                if ( $user->isBlocked() ) {
                        $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
                        if ( $status !== true ) {
-                               $this->dieUsageMsg( array( $status ) );
+                               $msg = $this->parseMsg( $status );
+                               $this->dieUsage(
+                                       $msg['info'],
+                                       $msg['code'],
+                                       0,
+                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                               );
                        }
                }
 
index 57f96c6..b3a543a 100644 (file)
@@ -48,7 +48,12 @@ class ApiCreateAccount extends ApiBase {
                        );
                }
                if ( $this->getUser()->isBlockedFromCreateAccount() ) {
-                       $this->dieUsage( 'You cannot create a new account because you are blocked', 'blocked' );
+                       $this->dieUsage(
+                               'You cannot create a new account because you are blocked',
+                               'blocked',
+                               0,
+                               array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $this->getUser()->getBlock() ) )
+                       );
                }
 
                $params = $this->extractRequestParams();
index d8b5718..6279dfd 100644 (file)
@@ -131,7 +131,7 @@ class ApiDelete extends ApiBase {
                $error = '';
 
                // Luckily, Article.php provides a reusable delete function that does the hard work for us
-               return $page->doDeleteArticleReal( $reason, false, 0, true, $error );
+               return $page->doDeleteArticleReal( $reason, false, 0, true, $error, $user );
        }
 
        /**
index aad71b9..b623849 100644 (file)
@@ -96,9 +96,11 @@ class ApiEditPage extends ApiBase {
                        $contentHandler = ContentHandler::getForModelID( $params['contentmodel'] );
                }
 
+               $name = $titleObj->getPrefixedDBkey();
+               $model = $contentHandler->getModelID();
                if ( $contentHandler->supportsDirectApiEditing() === false ) {
                        $this->dieUsage(
-                               'Direct editing via API is not supported for this content type.',
+                               "Direct editing via API is not supported for content model $model used by $name",
                                'no-direct-editing'
                        );
                }
@@ -110,8 +112,6 @@ class ApiEditPage extends ApiBase {
                $contentFormat = $params['contentformat'];
 
                if ( !$contentHandler->isSupportedFormat( $contentFormat ) ) {
-                       $name = $titleObj->getPrefixedDBkey();
-                       $model = $contentHandler->getModelID();
 
                        $this->dieUsage( "The requested format $contentFormat is not supported for content model " .
                                " $model used by $name", 'badformat' );
@@ -130,7 +130,30 @@ class ApiEditPage extends ApiBase {
                        $errors = array_merge( $errors, $titleObj->getUserPermissionsErrors( 'create', $user ) );
                }
                if ( count( $errors ) ) {
-                       $this->dieUsageMsg( $errors[0] );
+                       if ( is_array( $errors[0] ) ) {
+                               switch ( $errors[0][0] ) {
+                                       case 'blockedtext':
+                                               $this->dieUsage(
+                                                       'You have been blocked from editing',
+                                                       'blocked',
+                                                       0,
+                                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                                               );
+                                               break;
+                                       case 'autoblockedtext':
+                                               $this->dieUsage(
+                                                       'Your IP address has been blocked automatically, because it was used by a blocked user',
+                                                       'autoblocked',
+                                                       0,
+                                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                                               );
+                                               break;
+                                       default:
+                                               $this->dieUsageMsg( $errors[0] );
+                               }
+                       } else {
+                               $this->dieUsageMsg( $errors[0] );
+                       }
                }
 
                $toMD5 = $params['text'];
@@ -246,7 +269,7 @@ class ApiEditPage extends ApiBase {
                                $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo']
                        ) {
                                $params['summary'] = wfMessage( 'undo-summary' )
-                                       ->params ( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+                                       ->params( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
                        }
                }
 
@@ -450,7 +473,12 @@ class ApiEditPage extends ApiBase {
                                $this->dieUsageMsg( array( 'spamdetected', $result['spam'] ) );
 
                        case EditPage::AS_BLOCKED_PAGE_FOR_USER:
-                               $this->dieUsageMsg( 'blockedtext' );
+                               $this->dieUsage(
+                                       'You have been blocked from editing',
+                                       'blocked',
+                                       0,
+                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                               );
 
                        case EditPage::AS_MAX_ARTICLE_SIZE_EXCEEDED:
                        case EditPage::AS_CONTENT_TOO_BIG:
index be1a695..6112534 100644 (file)
@@ -111,8 +111,9 @@ class ApiExpandTemplates extends ApiBase {
                                // the old way
                                ApiResult::setContentValue( $retval, 'wikitext', $wikitext );
                        } else {
+                               $p_output = $wgParser->getOutput();
                                if ( isset( $prop['categories'] ) ) {
-                                       $categories = $wgParser->getOutput()->getCategories();
+                                       $categories = $p_output->getCategories();
                                        if ( $categories ) {
                                                $categories_result = array();
                                                foreach ( $categories as $category => $sortkey ) {
@@ -126,7 +127,7 @@ class ApiExpandTemplates extends ApiBase {
                                        }
                                }
                                if ( isset( $prop['properties'] ) ) {
-                                       $properties = $wgParser->getOutput()->getProperties();
+                                       $properties = $p_output->getProperties();
                                        if ( $properties ) {
                                                ApiResult::setArrayType( $properties, 'BCkvp', 'name' );
                                                ApiResult::setIndexedTagName( $properties, 'property' );
@@ -142,6 +143,27 @@ class ApiExpandTemplates extends ApiBase {
                                if ( isset( $prop['wikitext'] ) ) {
                                        $retval['wikitext'] = $wikitext;
                                }
+                               if ( isset( $prop['modules'] ) ) {
+                                       $retval['modules'] = array_values( array_unique( $p_output->getModules() ) );
+                                       $retval['modulescripts'] = array_values( array_unique( $p_output->getModuleScripts() ) );
+                                       $retval['modulestyles'] = array_values( array_unique( $p_output->getModuleStyles() ) );
+                               }
+                               if ( isset( $prop['jsconfigvars'] ) ) {
+                                       $retval['jsconfigvars'] =
+                                               ApiResult::addMetadataToResultVars( $p_output->getJsConfigVars() );
+                               }
+                               if ( isset( $prop['encodedjsconfigvars'] ) ) {
+                                       $retval['encodedjsconfigvars'] = FormatJson::encode(
+                                               $p_output->getJsConfigVars(), false, FormatJson::ALL_OK
+                                       );
+                                       $retval[ApiResult::META_SUBELEMENTS][] = 'encodedjsconfigvars';
+                               }
+                               if ( isset( $prop['modules'] ) &&
+                                       !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
+                                       $this->setWarning( "Property 'modules' was set but not 'jsconfigvars' " .
+                                               "or 'encodedjsconfigvars'. Configuration variables are necessary " .
+                                               "for proper module usage." );
+                               }
                        }
                }
                ApiResult::setSubelementsList( $retval, array( 'wikitext', 'parsetree' ) );
@@ -167,9 +189,13 @@ class ApiExpandTemplates extends ApiBase {
                                        'properties',
                                        'volatile',
                                        'ttl',
+                                       'modules',
+                                       'jsconfigvars',
+                                       'encodedjsconfigvars',
                                        'parsetree',
                                ),
                                ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'includecomments' => false,
                        'generatexml' => array(
index d1beef8..853b138 100644 (file)
@@ -126,7 +126,8 @@ class ApiFeedWatchlist extends ApiBase {
 
                        $msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
 
-                       $feedTitle = $this->getConfig()->get( 'Sitename' ) . ' - ' . $msg . ' [' . $this->getConfig()->get( 'LanguageCode' ) . ']';
+                       $feedTitle = $this->getConfig()->get( 'Sitename' ) . ' - ' . $msg .
+                               ' [' . $this->getConfig()->get( 'LanguageCode' ) . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
 
                        $feed = new $feedClasses[$params['feedformat']] (
index d078dc4..4d80163 100644 (file)
@@ -173,6 +173,7 @@ abstract class ApiFormatBase extends ApiBase {
                $mime = $this->getMimeType();
                if ( $this->getIsHtml() && $mime !== null ) {
                        $format = $this->getFormat();
+                       $lcformat = strtolower( $format );
                        $result = $this->getBuffer();
 
                        $context = new DerivativeContext( $this->getMain() );
@@ -184,9 +185,14 @@ abstract class ApiFormatBase extends ApiBase {
                        $out->addModules( 'mediawiki.apipretty' );
                        $out->setPageTitle( $context->msg( 'api-format-title' ) );
 
-                       $header = $context->msg( 'api-format-prettyprint-header' )
-                               ->params( $format, strtolower( $format ) )
-                               ->parseAsBlock();
+                       // When the format without suffix 'fm' is defined, there is a non-html version
+                       if ( $this->getMain()->getModuleManager()->isDefined( $lcformat, 'format' ) ) {
+                               $msg = $context->msg( 'api-format-prettyprint-header' )->params( $format, $lcformat );
+                       } else {
+                               $msg = $context->msg( 'api-format-prettyprint-header-only-html' )->params( $format );
+                       }
+
+                       $header = $msg->parseAsBlock();
                        $out->addHTML(
                                Html::rawElement( 'div', array( 'class' => 'api-pretty-header' ),
                                        ApiHelp::fixHelpLinks( $header )
@@ -240,7 +246,7 @@ abstract class ApiFormatBase extends ApiBase {
        }
 
        /**
-        * To avoid code duplication with the deprecation of dbg, dump, txt, wddx,
+        * To avoid code duplication with the deprecation of dbg, txt
         * and yaml, this method is added to do the necessary work. It should be
         * removed when those deprecated formats are removed.
         */
@@ -306,7 +312,7 @@ abstract class ApiFormatBase extends ApiBase {
                // Escape everything first for full coverage
                $text = htmlspecialchars( $text );
 
-               if ( $this->mFormat === 'XML' || $this->mFormat === 'WDDX' ) {
+               if ( $this->mFormat === 'XML' ) {
                        // encode all comments or tags as safe blue strings
                        $text = str_replace( '&lt;', '<span style="color:blue;">&lt;', $text );
                        $text = str_replace( '&gt;', '&gt;</span>', $text );
diff --git a/includes/api/ApiFormatDump.php b/includes/api/ApiFormatDump.php
deleted file mode 100644 (file)
index f34e1ae..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/**
- *
- *
- * Created on August 8, 2010
- *
- * Copyright © 2010 Soxred93
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * API PHP's var_dump() output formatter
- * @deprecated since 1.24
- * @ingroup API
- */
-class ApiFormatDump extends ApiFormatBase {
-
-       public function getMimeType() {
-               // This looks like it should be text/plain, but IE7 is so
-               // brain-damaged it tries to parse text/plain as HTML if it
-               // contains HTML tags. Using MIME text/text works around this bug
-               return 'text/text';
-       }
-
-       public function execute() {
-               $this->markDeprecated();
-               $data = $this->getResult()->getResultData( null, array(
-                       'BC' => array(),
-                       'Types' => array(),
-                       'Strip' => 'all',
-               ) );
-               ob_start();
-               var_dump( $data );
-               $result = ob_get_contents();
-               ob_end_clean();
-               $this->printText( $result );
-       }
-
-       public function isDeprecated() {
-               return true;
-       }
-}
index d88dd40..6420a5b 100644 (file)
@@ -68,7 +68,8 @@ class ApiFormatPhp extends ApiFormatBase {
                        preg_match( '/\<\s*cross-domain-policy\s*\>/i', $text )
                ) {
                        $this->dieUsage(
-                               'This response cannot be represented using format=php. See https://bugzilla.wikimedia.org/show_bug.cgi?id=66776',
+                               'This response cannot be represented using format=php. ' .
+                               'See https://bugzilla.wikimedia.org/show_bug.cgi?id=66776',
                                'internalerror'
                        );
                }
diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php
deleted file mode 100644 (file)
index c18353f..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-/**
- *
- *
- * Created on Oct 22, 2006
- *
- * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * API WDDX output formatter
- * @deprecated since 1.24
- * @ingroup API
- */
-class ApiFormatWddx extends ApiFormatBase {
-
-       public function getMimeType() {
-               return 'text/xml';
-       }
-
-       public function execute() {
-               $this->markDeprecated();
-
-               $data = $this->getResult()->getResultData( null, array(
-                       'BC' => array(),
-                       'Types' => array( 'AssocAsObject' => true ),
-                       'Strip' => 'all',
-               ) );
-
-               if ( !$this->getIsHtml() && !static::useSlowPrinter() ) {
-                       $txt = wddx_serialize_value( $data );
-                       $txt = str_replace(
-                               '<struct><var name=\'php_class_name\'><string>stdClass</string></var>',
-                               '<struct>',
-                               $txt
-                       );
-                       $this->printText( $txt );
-               } else {
-                       // Don't do newlines and indentation if we weren't asked
-                       // for pretty output
-                       $nl = ( $this->getIsHtml() ? "\n" : '' );
-                       $indstr = ( $this->getIsHtml() ? ' ' : '' );
-                       $this->printText( "<?xml version=\"1.0\"?>$nl" );
-                       $this->printText( "<wddxPacket version=\"1.0\">$nl" );
-                       $this->printText( "$indstr<header />$nl" );
-                       $this->printText( "$indstr<data>$nl" );
-                       $this->slowWddxPrinter( $data, 4 );
-                       $this->printText( "$indstr</data>$nl" );
-                       $this->printText( "</wddxPacket>$nl" );
-               }
-       }
-
-       public static function useSlowPrinter() {
-               if ( !function_exists( 'wddx_serialize_value' ) ) {
-                       return true;
-               }
-
-               // Some versions of PHP have a broken wddx_serialize_value, see
-               // PHP bug 45314. Test encoding an affected character (U+00A0)
-               // to avoid this.
-               $expected =
-                       "<wddxPacket version='1.0'><header/><data><string>\xc2\xa0</string></data></wddxPacket>";
-               if ( wddx_serialize_value( "\xc2\xa0" ) !== $expected ) {
-                       return true;
-               }
-
-               // Some versions of HHVM don't correctly encode ampersands.
-               $expected =
-                       "<wddxPacket version='1.0'><header/><data><string>&amp;</string></data></wddxPacket>";
-               if ( wddx_serialize_value( '&' ) !== $expected ) {
-                       return true;
-               }
-
-               // Some versions of HHVM don't correctly encode empty arrays as subvalues.
-               $expected =
-                       "<wddxPacket version='1.0'><header/><data><array length='1'><array length='0'></array></array></data></wddxPacket>";
-               if ( wddx_serialize_value( array( array() ) ) !== $expected ) {
-                       return true;
-               }
-
-               // Some versions of HHVM don't correctly encode associative arrays with numeric keys.
-               $expected =
-                       "<wddxPacket version='1.0'><header/><data><struct><var name='2'><number>1</number></var></struct></data></wddxPacket>";
-               if ( wddx_serialize_value( array( 2 => 1 ) ) !== $expected ) {
-                       return true;
-               }
-
-               return false;
-       }
-
-       /**
-        * Recursively go through the object and output its data in WDDX format.
-        * @param mixed $elemValue
-        * @param int $indent
-        */
-       function slowWddxPrinter( $elemValue, $indent = 0 ) {
-               $indstr = ( $this->getIsHtml() ? str_repeat( ' ', $indent ) : '' );
-               $indstr2 = ( $this->getIsHtml() ? str_repeat( ' ', $indent + 2 ) : '' );
-               $nl = ( $this->getIsHtml() ? "\n" : '' );
-
-               if ( is_array( $elemValue ) ) {
-                       $cnt = count( $elemValue );
-                       if ( $cnt != 0 && array_keys( $elemValue ) !== range( 0, $cnt - 1 ) ) {
-                               $elemValue = (object)$elemValue;
-                       }
-               }
-
-               if ( is_array( $elemValue ) ) {
-                       // Regular array
-                       $this->printText( $indstr . Xml::element( 'array', array(
-                               'length' => count( $elemValue ) ), null ) . $nl );
-                       foreach ( $elemValue as $subElemValue ) {
-                               $this->slowWddxPrinter( $subElemValue, $indent + 2 );
-                       }
-                       $this->printText( "$indstr</array>$nl" );
-               } elseif ( is_object( $elemValue ) ) {
-                       // Associative array (<struct>)
-                       $this->printText( "$indstr<struct>$nl" );
-                       foreach ( $elemValue as $subElemName => $subElemValue ) {
-                               $this->printText( $indstr2 . Xml::element( 'var', array(
-                                       'name' => $subElemName
-                               ), null ) . $nl );
-                               $this->slowWddxPrinter( $subElemValue, $indent + 4 );
-                               $this->printText( "$indstr2</var>$nl" );
-                       }
-                       $this->printText( "$indstr</struct>$nl" );
-               } elseif ( is_int( $elemValue ) || is_float( $elemValue ) ) {
-                       $this->printText( $indstr . Xml::element( 'number', null, $elemValue ) . $nl );
-               } elseif ( is_string( $elemValue ) ) {
-                       $this->printText( $indstr . Xml::element( 'string', null, $elemValue, false ) . $nl );
-               } elseif ( is_bool( $elemValue ) ) {
-                       $this->printText( $indstr . Xml::element( 'boolean',
-                               array( 'value' => $elemValue ? 'true' : 'false' ) ) . $nl
-                       );
-               } elseif ( $elemValue === null ) {
-                       $this->printText( $indstr . Xml::element( 'null', array() ) . $nl );
-               } else {
-                       ApiBase::dieDebug( __METHOD__, 'Unknown type ' . gettype( $elemValue ) );
-               }
-       }
-
-       public function isDeprecated() {
-               return true;
-       }
-}
index fa0bac3..4be7d93 100644 (file)
@@ -72,7 +72,7 @@ class ApiFormatXml extends ApiFormatBase {
                        'Custom' => function ( &$data, &$metadata ) {
                                if ( isset( $metadata[ApiResult::META_TYPE] ) ) {
                                        // We want to use non-BC for BCassoc to force outputting of _idx.
-                                       switch( $metadata[ApiResult::META_TYPE] ) {
+                                       switch ( $metadata[ApiResult::META_TYPE] ) {
                                                case 'BCassoc':
                                                        $metadata[ApiResult::META_TYPE] = 'assoc';
                                                        break;
@@ -267,7 +267,7 @@ class ApiFormatXml extends ApiFormatBase {
                return '_' . preg_replace_callback(
                        "/[^$nc]/uS",
                        function ( $m ) {
-                               return sprintf( '.%X.', utf8ToCodepoint( $m[0] ) );
+                               return sprintf( '.%X.', UtfNormal\Utils::utf8ToCodepoint( $m[0] ) );
                        },
                        str_replace( '.', '.2E.', $name )
                );
index a81ae3f..f6d124f 100644 (file)
@@ -45,6 +45,7 @@ class ApiHelp extends ApiBase {
                $context->setLanguage( $this->getMain()->getLanguage() );
                $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
                $out = new OutputPage( $context );
+               $out->setCopyrightUrl( 'https://www.mediawiki.org/wiki/Special:MyLanguage/Copyright' );
                $context->setOutput( $out );
 
                self::getHelp( $context, $modules, $params );
index d8b390c..c4e7022 100644 (file)
@@ -144,6 +144,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() )
+                               );
                                break;
 
                        case LoginForm::THROTTLED:
@@ -154,6 +158,10 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::USER_BLOCKED:
                                $result['result'] = 'Blocked';
+                               $result = array_merge(
+                                       $result,
+                                       ApiQueryUserInfo::getBlockInfo( User::newFromName( $params['name'] )->getBlock() )
+                               );
                                break;
 
                        case LoginForm::ABORTED:
index 2b7937e..46dc7df 100644 (file)
@@ -100,8 +100,6 @@ class ApiMain extends ApiBase {
                'jsonfm' => 'ApiFormatJson',
                'php' => 'ApiFormatPhp',
                'phpfm' => 'ApiFormatPhp',
-               'wddx' => 'ApiFormatWddx',
-               'wddxfm' => 'ApiFormatWddx',
                'xml' => 'ApiFormatXml',
                'xmlfm' => 'ApiFormatXml',
                'yaml' => 'ApiFormatYaml',
@@ -111,8 +109,6 @@ class ApiMain extends ApiBase {
                'txtfm' => 'ApiFormatTxt',
                'dbg' => 'ApiFormatDbg',
                'dbgfm' => 'ApiFormatDbg',
-               'dump' => 'ApiFormatDump',
-               'dumpfm' => 'ApiFormatDump',
                'none' => 'ApiFormatNone',
        );
 
@@ -577,8 +573,7 @@ class ApiMain extends ApiBase {
                if ( !in_array( $originParam, $origins ) ) {
                        // origin parameter set but incorrect
                        // Send a 403 response
-                       $message = HttpStatus::getMessage( 403 );
-                       $response->header( "HTTP/1.1 403 $message", true, 403 );
+                       $response->statusHeader( 403 );
                        $response->header( 'Cache-Control: no-cache' );
                        echo "'origin' parameter does not match Origin header\n";
 
@@ -1095,6 +1090,8 @@ 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 8a4ef49..2ab37ad 100644 (file)
@@ -337,7 +337,7 @@ class ApiParamInfo extends ApiBase {
                                                        ? '' : ( $module->getModulePath() . '+' );
                                                $item['submodules'] = array();
                                                foreach ( $item['type'] as $v ) {
-                                                       $item['submodules'][$v] = $prefix.$v;
+                                                       $item['submodules'][$v] = $prefix . $v;
                                                }
                                        }
                                        if ( isset( $settings[ApiBase::PARAM_SUBMODULE_PARAM_PREFIX] ) ) {
index 36be777..577b525 100644 (file)
@@ -71,7 +71,9 @@ class ApiParse extends ApiBase {
                if ( isset( $params['section'] ) ) {
                        $this->section = $params['section'];
                        if ( !preg_match( '/^((T-)?\d+|new)$/', $this->section ) ) {
-                               $this->dieUsage( "The section parameter must be a valid section id or 'new'", "invalidsection" );
+                               $this->dieUsage(
+                                       "The section parameter must be a valid section id or 'new'", "invalidsection"
+                               );
                        }
                } else {
                        $this->section = false;
@@ -89,7 +91,10 @@ class ApiParse extends ApiBase {
 
                if ( !is_null( $oldid ) || !is_null( $pageid ) || !is_null( $page ) ) {
                        if ( $this->section === 'new' ) {
-                                       $this->dieUsage( 'section=new cannot be combined with oldid, pageid or page parameters. Please use text', 'params' );
+                                       $this->dieUsage(
+                                               'section=new cannot be combined with oldid, pageid or page parameters. ' .
+                                               'Please use text', 'params'
+                                       );
                        }
                        if ( !is_null( $oldid ) ) {
                                // Don't use the parser cache
@@ -356,7 +361,8 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['jsconfigvars'] ) ) {
-                       $result_array['jsconfigvars'] = $this->formatJsConfigVars( $p_result->getJsConfigVars() );
+                       $result_array['jsconfigvars'] =
+                               ApiResult::addMetadataToResultVars( $p_result->getJsConfigVars() );
                }
 
                if ( isset( $prop['encodedjsconfigvars'] ) ) {
@@ -366,6 +372,13 @@ class ApiParse extends ApiBase {
                        $result_array[ApiResult::META_SUBELEMENTS][] = 'encodedjsconfigvars';
                }
 
+               if ( isset( $prop['modules'] ) &&
+                       !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
+                       $this->setWarning( "Property 'modules' was set but not 'jsconfigvars' " .
+                               "or 'encodedjsconfigvars'. Configuration variables are necessary " .
+                               "for proper module usage." );
+               }
+
                if ( isset( $prop['indicators'] ) ) {
                        $result_array['indicators'] = (array)$p_result->getIndicators();
                        ApiResult::setArrayType( $result_array['indicators'], 'BCkvp', 'name' );
@@ -397,9 +410,12 @@ class ApiParse extends ApiBase {
                        $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'limitreporthtml';
                }
 
-               if ( $params['generatexml'] ) {
+               if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
+                       if ( !isset( $prop['parsetree'] ) ) {
+                               $this->logFeatureUsage( 'action=parse&generatexml' );
+                       }
                        if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
-                               $this->dieUsage( "generatexml is only supported for wikitext content", "notwikitext" );
+                               $this->dieUsage( "parsetree is only supported for wikitext content", "notwikitext" );
                        }
 
                        $wgParser->startExternalParse( $titleObj, $popts, Parser::OT_PREPROCESS );
@@ -520,12 +536,13 @@ class ApiParse extends ApiBase {
                $sectionTitle = !is_null( $params['sectiontitle'] ) ? $params['sectiontitle'] : '';
 
                if ( $this->section === 'new' && ( $sectionTitle === '' || $summary === '' ) ) {
-                       if( $sectionTitle !== '' ) {
+                       if ( $sectionTitle !== '' ) {
                                $summary = $params['sectiontitle'];
                        }
                        if ( $summary !== '' ) {
-                               $summary = wfMessage( 'newsectionsummary' )->rawParams( $wgParser->stripSectionName( $summary ) )
-                                       ->inContentLanguage()->text();
+                               $summary = wfMessage( 'newsectionsummary' )
+                                       ->rawParams( $wgParser->stripSectionName( $summary ) )
+                                               ->inContentLanguage()->text();
                        }
                }
                return Linker::formatComment( $summary, $title, $this->section === 'new' );
@@ -681,53 +698,6 @@ class ApiParse extends ApiBase {
                return $result;
        }
 
-       private function formatJsConfigVars( $vars, $forceHash = true ) {
-               // Process subarrays and determine if this is a JS [] or {}
-               $hash = $forceHash;
-               $maxKey = -1;
-               $bools = array();
-               foreach ( $vars as $k => $v ) {
-                       if ( is_array( $v ) || is_object( $v ) ) {
-                               $vars[$k] = $this->formatJsConfigVars( (array)$v, false );
-                       } elseif ( is_bool( $v ) ) {
-                               // Better here to use real bools even in BC formats
-                               $bools[] = $k;
-                       }
-                       if ( is_string( $k ) ) {
-                               $hash = true;
-                       } elseif ( $k > $maxKey ) {
-                               $maxKey = $k;
-                       }
-               }
-               if ( !$hash && $maxKey !== count( $vars ) - 1 ) {
-                       $hash = true;
-               }
-
-               // Get the list of keys we actually care about. Unfortunately, we can't support
-               // certain keys that conflict with ApiResult metadata.
-               $keys = array_diff( array_keys( $vars ), array(
-                       ApiResult::META_TYPE, ApiResult::META_PRESERVE_KEYS, ApiResult::META_KVP_KEY_NAME,
-                       ApiResult::META_INDEXED_TAG_NAME, ApiResult::META_BC_BOOLS
-               ) );
-
-               // Set metadata appropriately
-               if ( $hash ) {
-                       return array(
-                               ApiResult::META_TYPE => 'kvp',
-                               ApiResult::META_KVP_KEY_NAME => 'key',
-                               ApiResult::META_PRESERVE_KEYS => $keys,
-                               ApiResult::META_BC_BOOLS => $bools,
-                               ApiResult::META_INDEXED_TAG_NAME => 'var',
-                       ) + $vars;
-               } else {
-                       return array(
-                               ApiResult::META_TYPE => 'array',
-                               ApiResult::META_BC_BOOLS => $bools,
-                               ApiResult::META_INDEXED_TAG_NAME => 'value',
-                       ) + $vars;
-               }
-       }
-
        private function setIndexedTagNames( &$array, $mapping ) {
                foreach ( $mapping as $key => $name ) {
                        if ( isset( $array[$key] ) ) {
@@ -778,8 +748,11 @@ class ApiParse extends ApiBase {
                                        'properties',
                                        'limitreportdata',
                                        'limitreporthtml',
+                                       'parsetree',
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(
+                                       'parsetree' => array( 'apihelp-parse-paramvalue-prop-parsetree', CONTENT_MODEL_WIKITEXT ),
                                ),
-                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'pst' => false,
                        'onlypst' => false,
@@ -795,6 +768,7 @@ class ApiParse extends ApiBase {
                                ApiBase::PARAM_HELP_MSG => array(
                                        'apihelp-parse-param-generatexml', CONTENT_MODEL_WIKITEXT
                                ),
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
                        'preview' => false,
                        'sectionpreview' => false,
index 304d0f0..5378e92 100644 (file)
@@ -292,7 +292,7 @@ class ApiQuery extends ApiBase {
 
                // Write the continuation data into the result
                $this->setContinuationManager( null );
-               if ( $this->mParams['continue'] === null ) {
+               if ( $this->mParams['rawcontinue'] ) {
                        $data = $continuationManager->getRawContinuation();
                        if ( $data ) {
                                $this->getResult()->addValue( null, 'query-continue', $data,
@@ -302,15 +302,14 @@ class ApiQuery extends ApiBase {
                        $continuationManager->setContinuationIntoResult( $this->getResult() );
                }
 
+               /// @todo: Remove this after a suitable period of time. When REL1_26 is cut, if not before.
                if ( $this->mParams['continue'] === null && !$this->mParams['rawcontinue'] &&
-                       $this->getResult()->getResultData( 'query-continue' ) !== null
+                       $this->getResult()->getResultData( 'continue' ) !== null
                ) {
-                       $this->logFeatureUsage( 'action=query&!rawcontinue&!continue' );
                        $this->setWarning(
-                               'Formatting of continuation data will be changing soon. ' .
-                               'To continue using the current formatting, use the \'rawcontinue\' parameter. ' .
-                               'To begin using the new format, pass an empty string for \'continue\' ' .
-                               'in the initial query.'
+                               'Formatting of continuation data has changed. ' .
+                               'To receive raw query-continue data, use the \'rawcontinue\' parameter. ' .
+                               'To silence this warning, pass an empty string for \'continue\' in the initial query.'
                        );
                }
        }
@@ -485,7 +484,7 @@ class ApiQuery extends ApiBase {
        public function setGeneratorContinue( $module, $paramName, $paramValue ) {
                wfDeprecated( __METHOD__, '1.24' );
                $this->getContinuationManager()->addGeneratorContinueParam( $module, $paramName, $paramValue );
-               return $this->getParameter( 'continue' ) !== null;
+               return !$this->getParameter( 'rawcontinue' );
        }
 
        /**
@@ -549,7 +548,9 @@ class ApiQuery extends ApiBase {
                        'export' => false,
                        'exportnowrap' => false,
                        'iwurl' => false,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'rawcontinue' => false,
                );
                if ( $flags ) {
index 02846dc..ba36c67 100644 (file)
@@ -523,9 +523,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
                }
 
                if ( $meta ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $metadata = unserialize( $file->getMetadata() );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $metadata && $version !== 'latest' ) {
                                $metadata = $file->convertMetadataVersion( $metadata, $version );
                        }
@@ -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 eee5dae..c45e0ef 100644 (file)
@@ -799,6 +799,7 @@ class ApiQueryInfo extends ApiQueryBase {
        }
 
        public function getCacheMode( $params ) {
+               // Other props depend on something about the current user
                $publicProps = array(
                        'protection',
                        'talkid',
@@ -807,13 +808,15 @@ class ApiQueryInfo extends ApiQueryBase {
                        'preload',
                        'displaytitle',
                );
-               if ( !is_null( $params['prop'] ) ) {
-                       foreach ( $params['prop'] as $prop ) {
-                               if ( !in_array( $prop, $publicProps ) ) {
-                                       return 'private';
-                               }
-                       }
+               if ( array_diff( (array)$params['prop'], $publicProps ) ) {
+                       return 'private';
                }
+
+               // testactions also depends on the current user
+               if ( $params['testactions'] ) {
+                       return 'private';
+               }
+
                if ( !is_null( $params['token'] ) ) {
                        return 'private';
                }
index 9e02551..0282fc5 100644 (file)
@@ -227,20 +227,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                                );
                        }
 
-                       // Query optimization: since we're targeting ranges of
-                       // rev_timestamp,rev_id, if we're given an id then extract the
-                       // corresponding timestamp from the DB.
-                       // Note we don't use Revision::getTimestampFromId() since we don't
-                       // have a Title to pass it and there's not any real need to create one.
-                       if ( $params['startid'] !== null ) {
-                               $params['start'] = $db->selectField( 'revision', 'rev_timestamp',
-                                       array( 'rev_id' => $params['startid'] ), __METHOD__ );
-                       }
-                       if ( $params['endid'] !== null ) {
-                               $params['end'] = $db->selectField( 'revision', 'rev_timestamp',
-                                       array( 'rev_id' => $params['endid'] ), __METHOD__ );
-                       }
-
                        $this->addTimestampWhereRange( 'rev_timestamp', $params['dir'],
                                $params['start'], $params['end'] );
                        $this->addWhereRange( 'rev_id', $params['dir'],
index 64f6120..d57dc3c 100644 (file)
@@ -37,7 +37,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
        protected $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
                $fld_size = false, $fld_sha1 = false, $fld_comment = false,
                $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
-               $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
+               $fld_content = false, $fld_tags = false, $fld_contentmodel = false, $fld_parsetree = false;
 
        public function execute() {
                $this->run();
@@ -104,6 +104,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                $this->fld_userid = isset( $prop['userid'] );
                $this->fld_user = isset( $prop['user'] );
                $this->fld_tags = isset( $prop['tags'] );
+               $this->fld_parsetree = isset( $prop['parsetree'] );
 
                if ( !empty( $params['contentformat'] ) ) {
                        $this->contentFormat = $params['contentformat'];
@@ -112,7 +113,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                $this->limit = $params['limit'];
 
                $this->fetchContent = $this->fld_content || !is_null( $this->diffto )
-                       || !is_null( $this->difftotext );
+                       || !is_null( $this->difftotext ) || $this->fld_parsetree;
 
                $smallLimit = false;
                if ( $this->fetchContent ) {
@@ -273,10 +274,11 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                $vals['textmissing'] = true;
                        }
                }
-               if ( $this->fld_content && $content ) {
-                       $text = null;
-
-                       if ( $this->generateXML ) {
+               if ( $this->fld_parsetree || ( $this->fld_content && $this->generateXML ) ) {
+                       if ( !$this->fld_parsetree ) {
+                               $this->logFeatureUsage( 'action=query&prop=revisions+base&generatexml' );
+                       }
+                       if ( $content ) {
                                if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
                                        $t = $content->getNativeData(); # note: don't set $text
 
@@ -299,6 +301,10 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                                " uses content model " . $content->getModel() );
                                }
                        }
+               }
+
+               if ( $this->fld_content && $content ) {
+                       $text = null;
 
                        if ( $this->expandTemplates && !$this->parseContent ) {
                                #XXX: implement template expansion for all content types in ContentHandler?
@@ -431,9 +437,26 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                        'comment',
                                        'parsedcomment',
                                        'content',
-                                       'tags'
+                                       'tags',
+                                       'parsetree',
                                ),
                                ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-prop',
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(
+                                       'ids' => 'apihelp-query+revisions+base-paramvalue-prop-ids',
+                                       'flags' => 'apihelp-query+revisions+base-paramvalue-prop-flags',
+                                       'timestamp' => 'apihelp-query+revisions+base-paramvalue-prop-timestamp',
+                                       'user' => 'apihelp-query+revisions+base-paramvalue-prop-user',
+                                       'userid' => 'apihelp-query+revisions+base-paramvalue-prop-userid',
+                                       'size' => 'apihelp-query+revisions+base-paramvalue-prop-size',
+                                       'sha1' => 'apihelp-query+revisions+base-paramvalue-prop-sha1',
+                                       'contentmodel' => 'apihelp-query+revisions+base-paramvalue-prop-contentmodel',
+                                       'comment' => 'apihelp-query+revisions+base-paramvalue-prop-comment',
+                                       'parsedcomment' => 'apihelp-query+revisions+base-paramvalue-prop-parsedcomment',
+                                       'content' => 'apihelp-query+revisions+base-paramvalue-prop-content',
+                                       'tags' => 'apihelp-query+revisions+base-paramvalue-prop-tags',
+                                       'parsetree' => array( 'apihelp-query+revisions+base-paramvalue-prop-parsetree',
+                                               CONTENT_MODEL_WIKITEXT ),
+                               ),
                        ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
@@ -448,6 +471,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                        ),
                        'generatexml' => array(
                                ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                                ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-generatexml',
                        ),
                        'parse' => array(
index 90af15a..349e7fa 100644 (file)
@@ -238,7 +238,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
                                                // Add item to results and see whether it fits
                                                $fit = $apiResult->addValue(
-                                                       array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix()  ),
+                                                       array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix() ),
                                                        null,
                                                        $vals
                                                );
index 1dc9985..1ce5761 100644 (file)
@@ -297,6 +297,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        }
                }
 
+               ApiResult::setArrayType( $data, 'assoc' );
                ApiResult::setIndexedTagName( $data, 'ns' );
 
                return $this->getResult()->addValue( 'query', $property, $data );
@@ -511,6 +512,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                        $groups = array_intersect( $rights[$group], $allGroups );
                                        if ( $groups ) {
                                                $arr[$type] = $groups;
+                                               ApiResult::setArrayType( $arr[$type], 'BCarray' );
                                                ApiResult::setIndexedTagName( $arr[$type], 'group' );
                                        }
                                }
@@ -682,6 +684,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        'semiprotectedlevels' => $config->get( 'SemiprotectedRestrictionLevels' ),
                );
 
+               ApiResult::setArrayType( $data['types'], 'BCarray' );
+               ApiResult::setArrayType( $data['levels'], 'BCarray' );
+               ApiResult::setArrayType( $data['cascadinglevels'], 'BCarray' );
+               ApiResult::setArrayType( $data['semiprotectedlevels'], 'BCarray' );
+
                ApiResult::setIndexedTagName( $data['types'], 'type' );
                ApiResult::setIndexedTagName( $data['levels'], 'level' );
                ApiResult::setIndexedTagName( $data['cascadinglevels'], 'level' );
@@ -741,6 +748,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                global $wgParser;
                $wgParser->firstCallInit();
                $tags = array_map( array( $this, 'formatParserTags' ), $wgParser->getTags() );
+               ApiResult::setArrayType( $tags, 'BCarray' );
                ApiResult::setIndexedTagName( $tags, 't' );
 
                return $this->getResult()->addValue( 'query', $property, $tags );
@@ -750,6 +758,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                global $wgParser;
                $wgParser->firstCallInit();
                $hooks = $wgParser->getFunctionHooks();
+               ApiResult::setArrayType( $hooks, 'BCarray' );
                ApiResult::setIndexedTagName( $hooks, 'h' );
 
                return $this->getResult()->addValue( 'query', $property, $hooks );
@@ -757,6 +766,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        public function appendVariables( $property ) {
                $variables = MagicWord::getVariableIDs();
+               ApiResult::setArrayType( $variables, 'BCarray' );
                ApiResult::setIndexedTagName( $variables, 'v' );
 
                return $this->getResult()->addValue( 'query', $property, $variables );
@@ -765,6 +775,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        public function appendProtocols( $property ) {
                // Make a copy of the global so we don't try to set the _element key of it - bug 45130
                $protocols = array_values( $this->getConfig()->get( 'UrlProtocols' ) );
+               ApiResult::setArrayType( $protocols, 'BCarray' );
                ApiResult::setIndexedTagName( $protocols, 'p' );
 
                return $this->getResult()->addValue( 'query', $property, $protocols );
@@ -792,6 +803,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                'subscribers' => array_map( array( 'SpecialVersion', 'arrayToString' ), $subscribers ),
                        );
 
+                       ApiResult::setArrayType( $arr['subscribers'], 'BCarray' );
                        ApiResult::setIndexedTagName( $arr['subscribers'], 's' );
                        $data[] = $arr;
                }
index 4302ef3..e003e31 100644 (file)
@@ -51,9 +51,32 @@ class ApiQueryUserInfo extends ApiQueryBase {
                $result->addValue( 'query', $this->getModuleName(), $r );
        }
 
-       protected function getCurrentUserInfo() {
+       /**
+        * Get basic info about a given block
+        * @param Block $block
+        * @return array Array containing several keys:
+        *  - blockid - ID of the block
+        *  - blockedby - username of the blocker
+        *  - blockedbyid - user ID of the blocker
+        *  - blockreason - reason provided for the block
+        *  - blockedtimestamp - timestamp for when the block was placed/modified
+        *  - blockexpiry - expiry time of the block
+        */
+       public static function getBlockInfo( Block $block ) {
                global $wgContLang;
+               $vals = array();
+               $vals['blockid'] = $block->getId();
+               $vals['blockedby'] = $block->getByName();
+               $vals['blockedbyid'] = $block->getBy();
+               $vals['blockreason'] = $block->mReason;
+               $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
+               $vals['blockexpiry'] = $wgContLang->formatExpiry(
+                       $block->getExpiry(), TS_ISO_8601, 'infinite'
+               );
+               return $vals;
+       }
 
+       protected function getCurrentUserInfo() {
                $user = $this->getUser();
                $result = $this->getResult();
                $vals = array();
@@ -64,18 +87,8 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        $vals['anon'] = true;
                }
 
-               if ( isset( $this->prop['blockinfo'] ) ) {
-                       if ( $user->isBlocked() ) {
-                               $block = $user->getBlock();
-                               $vals['blockid'] = $block->getId();
-                               $vals['blockedby'] = $block->getByName();
-                               $vals['blockedbyid'] = $block->getBy();
-                               $vals['blockreason'] = $user->blockedFor();
-                               $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
-                               $vals['blockexpiry'] = $wgContLang->formatExpiry(
-                                       $block->getExpiry(), TS_ISO_8601, 'infinite'
-                               );
-                       }
+               if ( isset( $this->prop['blockinfo'] ) && $user->isBlocked() ) {
+                       $vals = array_merge( $vals, self::getBlockInfo( $user->getBlock() ) );
                }
 
                if ( isset( $this->prop['hasmsg'] ) ) {
index 3eb57fd..648d259 100644 (file)
@@ -451,6 +451,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|flags',
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                                ApiBase::PARAM_TYPE => array(
                                        'ids',
                                        'title',
index 7c573a8..f0c7430 100644 (file)
@@ -302,10 +302,14 @@ class ApiResult implements ApiSerializable {
                                $arr[$name] += $value;
                        } else {
                                $keys = join( ', ', array_keys( $conflicts ) );
-                               throw new RuntimeException( "Conflicting keys ($keys) when attempting to merge element $name" );
+                               throw new RuntimeException(
+                                       "Conflicting keys ($keys) when attempting to merge element $name"
+                               );
                        }
                } else {
-                       throw new RuntimeException( "Attempting to add element $name=$value, existing value is {$arr[$name]}" );
+                       throw new RuntimeException(
+                               "Attempting to add element $name=$value, existing value is {$arr[$name]}"
+                       );
                }
        }
 
@@ -703,7 +707,9 @@ class ApiResult implements ApiSerializable {
         * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
         */
        public static function setArrayType( array &$arr, $type, $kvpKeyName = null ) {
-               if ( !in_array( $type, array( 'default', 'array', 'assoc', 'kvp', 'BCarray', 'BCassoc', 'BCkvp' ), true ) ) {
+               if ( !in_array( $type, array(
+                               'default', 'array', 'assoc', 'kvp', 'BCarray', 'BCassoc', 'BCkvp'
+                               ), true ) ) {
                        throw new InvalidArgumentException( 'Bad type' );
                }
                $arr[self::META_TYPE] = $type;
@@ -1035,7 +1041,8 @@ class ApiResult implements ApiSerializable {
        /**
         * Get the 'real' size of a result item. This means the strlen() of the item,
         * 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.
+        * @note Once the deprecated public self::size is removed, we can rename
+        *       this back to a less awkward name.
         * @param mixed $value
         * @return int
         */
@@ -1096,6 +1103,61 @@ class ApiResult implements ApiSerializable {
                return $ret;
        }
 
+       /**
+        * Add the correct metadata to an array of vars we want to export through
+        * the API.
+        *
+        * @param array $vars
+        * @param boolean $forceHash
+        * @return array
+        */
+       public static function addMetadataToResultVars( $vars, $forceHash = true ) {
+               // Process subarrays and determine if this is a JS [] or {}
+               $hash = $forceHash;
+               $maxKey = -1;
+               $bools = array();
+               foreach ( $vars as $k => $v ) {
+                       if ( is_array( $v ) || is_object( $v ) ) {
+                               $vars[$k] = ApiResult::addMetadataToResultVars( (array)$v, is_object( $v ) );
+                       } elseif ( is_bool( $v ) ) {
+                               // Better here to use real bools even in BC formats
+                               $bools[] = $k;
+                       }
+                       if ( is_string( $k ) ) {
+                               $hash = true;
+                       } elseif ( $k > $maxKey ) {
+                               $maxKey = $k;
+                       }
+               }
+               if ( !$hash && $maxKey !== count( $vars ) - 1 ) {
+                       $hash = true;
+               }
+
+               // Set metadata appropriately
+               if ( $hash ) {
+                       // Get the list of keys we actually care about. Unfortunately, we can't support
+                       // certain keys that conflict with ApiResult metadata.
+                       $keys = array_diff( array_keys( $vars ), array(
+                               ApiResult::META_TYPE, ApiResult::META_PRESERVE_KEYS, ApiResult::META_KVP_KEY_NAME,
+                               ApiResult::META_INDEXED_TAG_NAME, ApiResult::META_BC_BOOLS
+                       ) );
+
+                       return array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => $keys,
+                               ApiResult::META_BC_BOOLS => $bools,
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                       ) + $vars;
+               } else {
+                       return array(
+                               ApiResult::META_TYPE => 'array',
+                               ApiResult::META_BC_BOOLS => $bools,
+                               ApiResult::META_INDEXED_TAG_NAME => 'value',
+                       ) + $vars;
+               }
+       }
+
        /**@}*/
 
        /************************************************************************//**
index 1af83ba..f6c24b7 100644 (file)
@@ -53,7 +53,13 @@ class ApiUnblock extends ApiBase {
                if ( $user->isBlocked() ) {
                        $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
                        if ( $status !== true ) {
-                               $this->dieUsageMsg( $status );
+                               $msg = $this->parseMsg( $status );
+                               $this->dieUsage(
+                                       $msg['info'],
+                                       $msg['code'],
+                                       0,
+                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                               );
                        }
                }
 
index c23e9ff..28702b1 100644 (file)
@@ -37,7 +37,12 @@ class ApiUndelete extends ApiBase {
                }
 
                if ( $this->getUser()->isBlocked() ) {
-                       $this->dieUsageMsg( 'blockedtext' );
+                       $this->dieUsage(
+                               'You have been blocked from editing',
+                               'blocked',
+                               0,
+                               array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $this->getUser()->getBlock() ) )
+                       );
                }
 
                $titleObj = Title::newFromText( $params['title'] );
index 70c4791..420aded 100644 (file)
@@ -4,6 +4,7 @@
                        "Geopoet"
                ]
        },
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Arinman na mga kategoriyang yaon sa pinapalaog na bakong representado sa laog kan wikitext na kinaluwasan.",
        "apihelp-query+watchlistraw-param-fromtitle": "Titulo (may espasyong ngaran sa enotang panigmitan) sa pagpopoon kan gikanang pinagkuanan.",
        "apihelp-query+watchlistraw-param-totitle": "Titulo (may espasyong ngaran sa enotang panigmitan) sa pagpapauntok kan gikanang pinaghalean."
 }
index 519599d..98485cf 100644 (file)
@@ -9,7 +9,7 @@
        "apihelp-main-param-format": "Фармат вываду.",
        "apihelp-main-param-maxlag": "Максымальная затрымка можа ўжывацца, калі MediaWiki ўсталяваная ў клястэр з рэплікаванай базай зьвестак. Дзеля захаваньня дзеяньняў, якія выклікаюць затрымку рэплікацыі, гэты парамэтар можа прымусіць кліента чакаць, пакуль затрымка рэплікацыі меншая за яго значэньне. У выпадку доўгай затрымкі, вяртаецца код памылкі <samp>maxlag</samp> з паведамленьнем кшталту <samp>Чаканьне $host: $lag сэкундаў затрымкі</samp>.<br />Глядзіце [[mw:Manual:Maxlag_parameter|Інструкцыя:Парамэтар maxlag]] дзеля дадатковай інфармацыі.",
        "apihelp-main-param-smaxage": "Выстаўце HTTP-загаловак кантролю кэшу <code>s-maxage</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
-       "apihelp-main-param-maxage": "Выстаўляе загаловак <code>max-age</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
+       "apihelp-main-param-maxage": "Выстаўляе HTTP-загаловак кантролю кэшу <code>max-age</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
        "apihelp-main-param-assert": "Упэўніцеся, што ўдзельнік увайшоў у сыстэму, калі зададзена <kbd>user</kbd>, або мае правы робата, калі зададзена <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Любое значэньне, пададзенае тут, будзе ўключанае ў адказ. Можа быць выкарыстанае для адрозьненьня запытаў.",
        "apihelp-main-param-servedby": "Уключае ў вынік назву сэрвэра, які апрацаваў запыт.",
diff --git a/includes/api/i18n/br.json b/includes/api/i18n/br.json
new file mode 100644 (file)
index 0000000..6810235
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Y-M D"
+               ]
+       },
+       "apihelp-block-description": "Stankañ un implijer",
+       "apihelp-block-param-reason": "Abeg evit stankañ.",
+       "apihelp-delete-description": "Diverkañ ur bajenn.",
+       "apihelp-edit-param-minor": "Kemmig dister.",
+       "apihelp-edit-example-edit": "Kemmañ ur bajenn.",
+       "apihelp-expandtemplates-param-title": "Titl ar bajenn."
+}
index 5513f8b..b544cc8 100644 (file)
        "apihelp-yamlfm-description": "Vypisuje data ve formátu YAML (v čitelné HTML podobě).",
        "api-format-title": "Odpověď z MediaWiki API",
        "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API:Main page|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
+       "api-format-prettyprint-header-only-html": "Toto je HTML reprezentace určená pro ladění, která není vhodná pro použití v aplikacích.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo [[Special:ApiHelp/main|dokumentaci API]].",
        "api-help-title": "Nápověda k MediaWiki API",
        "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Hlavní modul",
        "api-help-param-required": "Tento parametr je povinný.",
        "api-help-datatypes-header": "Datové typy",
        "api-help-datatypes": "Některé typy parametrů v API potřebují bližší vysvětlení:\n;boolean\n:Booleovské parametry fungují jako zaškrtávací políčka v HTML: pokud je parametr uveden, bez ohledu na hodnotu, je považován za pravdivý. Pro nepravdivou hodnotu parametr zcela vynechte.\n;časová značka\n:Časové značky lze uvádět v několika formátech. Doporučuje se datum a čas podle ISO 8601. Všechny časy jsou v UTC a obsažené časové pásmo je ignorováno.\n:* Datum a čas podle ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (interpunkce a <kbd>Z</kbd> jsou nepovinné)\n:* Datum a čas podle ISO 8601 s (ignorovaným) zlomkem sekundy, <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> (pomlčky, dvojtečky a <kbd>Z</kbd> jsou nepovinné)\n:* Formát MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Obecný číselný formát, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (nepovinné časové pásmo <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> nebo <kbd>-<var>##</var></kbd> se ignoruje)\n:* Formát EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 2822 (časové pásmo lze vynechat), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 850 (časové pásmo lze vynechat), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle céčkové funkce 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:* Sekundy od 1970-01-01T00:00:00Z jako celé číslo o 1–13 číslicích (s výjimkou <kbd>0</kbd>)\n:* Řetězec <kbd>now</kbd>",
+       "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=celé číslo|2=seznam celých čísel}}",
        "api-help-param-type-boolean": "Typ: boolean ([[Special:ApiHelp/main#main/datatypes|podrobnosti]])",
        "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
index 1c1919a..dd2e9ef 100644 (file)
@@ -19,8 +19,8 @@
        "apihelp-main-param-action": "Auszuführende Aktion.",
        "apihelp-main-param-format": "Format der Ausgabe.",
        "apihelp-main-param-maxlag": "maxlag kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um weitere Replikationsrückstände zu verhindern, lässt dieser Parameter den Client warten, bis der Replikationsrückstand kleiner als der angegebene Wert (in Sekunden) ist. Bei einem größerem Rückstand wird der Fehlercode <samp>maxlag</samp> zurückgegeben mit einer Nachricht wie <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Siehe [[mw:Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.",
-       "apihelp-main-param-smaxage": "Den <code>s-maxage</code>-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
-       "apihelp-main-param-maxage": "Den <code>max-age</code>-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+       "apihelp-main-param-smaxage": "Den <code>s-maxage</code>-HTTP-Cache-Control-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+       "apihelp-main-param-maxage": "Den <code>max-age</code>-HTTP-Cache-Control-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
        "apihelp-main-param-assert": "Sicherstellen, dass der Benutzer eingeloggt ist, wenn auf <kbd>user</kbd> gesetzt, oder Bot ist, wenn auf <kbd>bot</kbd> gesetzt.",
        "apihelp-main-param-requestid": "Der angegebene Wert wird mit in die Antwort aufgenommen und kann zur Unterscheidung von Anfragen verwendet werden.",
        "apihelp-main-param-servedby": "Namen des bearbeitenden Hosts mit zurückgeben.",
        "apihelp-imagerotate-param-rotation": "Anzahl der Grad, um die das Bild im Uhrzeigersinn gedreht werden soll.",
        "apihelp-imagerotate-example-simple": "<kbd>Datei:Beispiel.png</kbd> um <kbd>90</kbd> Grad drehen.",
        "apihelp-imagerotate-example-generator": "Alle Bilder in der <kbd>Kategorie:Flip</kbd> um <kbd>180</kbd> Grad drehen.",
-       "apihelp-import-description": "Importiert eine Seite von einem anderen Wiki oder einer XML-Datei.\n\nBitte beachte, dass der HTTP-POST-Vorgang als Dateiupload ausgeführt werden muss (z.B. durch multipart/form-data), um eine Datei über den <var>xml</var>-Parameter zu senden.",
+       "apihelp-import-description": "Importiert eine Seite aus einem anderen Wiki oder von einer XML-Datei.\n\nBitte beachte, dass der HTTP-POST-Vorgang als Dateiupload ausgeführt werden muss (z.B. durch multipart/form-data), um eine Datei über den <var>xml</var>-Parameter zu senden.",
        "apihelp-import-param-summary": "Import-Zusammenfassung.",
        "apihelp-import-param-xml": "Hochgeladene XML-Datei.",
        "apihelp-import-param-interwikisource": "Für Interwiki-Importe: Wiki, von dem importiert werden soll.",
        "apihelp-import-param-templates": "Für Interwiki-Importe: importiere auch alle eingebundenen Vorlagen.",
        "apihelp-import-param-namespace": "In diesen Namensraum importieren. Kann nicht zusammen mit <var>$1rootpage</var> verwendet werden.",
        "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren. Kann nicht zusammen mit <var>$1namespace</var> verwendet werden.",
-       "apihelp-import-example-import": "Importiere [[meta:Help:Parserfunctions]] mit der kompletten Versionsgeschichte in den Namensraum 100.",
+       "apihelp-import-example-import": "Importiere [[meta:Help:ParserFunctions]] mit der kompletten Versionsgeschichte in den Namensraum 100.",
        "apihelp-login-description": "Anmelden und Authentifizierungs-Cookies beziehen.\n\nFalls das Anmelden erfolgreich war, werden die benötigten Cookies im Header der HTTP-Antwort des Servers übermittelt. Bei fehlgeschlagenen Anmeldeversuchen können weitere Versuche gedrosselt werden, um automatische Passwortermittlungsattacken zu verhinden.",
        "apihelp-login-param-name": "Benutzername.",
        "apihelp-login-param-password": "Passwort.",
        "apihelp-paraminfo-description": "Ruft Informationen über API-Module ab.",
        "apihelp-paraminfo-param-helpformat": "Format der Hilfe-Zeichenfolgen.",
        "apihelp-parse-param-summary": "Zu parsende Zusammenfassung.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Gibt die Sprachlinks im geparsten Wikitext zurück.",
+       "apihelp-parse-paramvalue-prop-categories": "Gibt die Kategorien im geparsten Wikitext zurück.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Gibt die HTML-Version der Kategorien zurück.",
+       "apihelp-parse-paramvalue-prop-links": "Gibt die internen Links im geparsten Wikitext zurück.",
+       "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-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-query-param-export": "Exportiert die aktuellen Versionen der angegebenen oder generierten Seiten.",
        "apihelp-query-param-exportnowrap": "Gibt den XML-Export zurück, ohne ihn in ein XML-Ergebnis einzuschließen (gleiches Format wie durch [[Special:Export]]). Kann nur zusammen mit $1export genutzt werden.",
        "apihelp-query-param-iwurl": "Gibt an, ob die komplette URL zurückgegeben werden soll, wenn der Titel ein Interwikilink ist.",
-       "apihelp-query-param-continue": "Falls angegeben, wird query-continue als Schlüssel-Wert-Paar zurückgegeben, das anschließend an die Folgeabfrage gehängt werden kann. Dieser Parameter muss in der ersten Abfrage auf leer gesetzt werden.\n\nDieser Parameter ist für alle Neuentwicklungen empfohlen und wird in der nächsten API-Version Standard.",
-       "apihelp-query-param-rawcontinue": "Momentan unbeachtet. In Zukunft wird <var>$1continue</var> Standard, dieser Parameter wird dann benötigt, um die rohen <samp>query-continue</samp>-Daten zu erhalten.",
+       "apihelp-query-param-rawcontinue": "Gibt <samp>query-continue</samp>-Rohdaten zur Fortsetzung zurück.",
        "apihelp-query-example-revisions": "Bezieht [[Special:ApiHelp/query+siteinfo|Seiteninformationen]] und [[Special:ApiHelp/query+revisions|Versionen]] der <kbd>Main Page</kbd>.",
        "apihelp-query-example-allpages": "Bezieht Versionen von Seiten, die mit <kbd>API/</kbd> beginnen.",
        "apihelp-query+allcategories-description": "Alle Kategorien aufzählen.",
        "apihelp-query+categorymembers-param-endsortkey": "Stattdessen $1endhexsortkey verwenden.",
        "apihelp-query+contributors-param-limit": "Wie viele Spender zurückgegeben werden sollen.",
        "apihelp-query+deletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
-       "apihelp-query+deletedrevisions-param-limit": "Die Maximalmenge der aufzulistenden Versionen.",
        "apihelp-query+deletedrevs-param-from": "Auflistung bei diesem Titel beginnen.",
        "apihelp-query+deletedrevs-param-to": "Auflistung bei diesem Titel beenden.",
        "apihelp-query+duplicatefiles-param-localonly": "Sucht nur nach Dateien im lokalen Repositorium.",
        "apihelp-userrights-param-user": "Benutzername.",
        "apihelp-userrights-param-userid": "Benutzerkennung.",
        "apihelp-watch-example-watch": "Die Seite <kbd>Hauptseite</kbd> beobachten.",
-       "apihelp-format-example-generic": "Das Abfrageergebnis im $1-Format formatieren",
+       "apihelp-format-example-generic": "Das Abfrageergebnis im $1-Format ausgeben.",
        "apihelp-dbg-description": "Daten im PHP-<code>var_export()</code>-Format ausgeben.",
        "apihelp-dbgfm-description": "Daten im PHP-<code>var_export()</code>-Format ausgeben (schöngedruckt in HTML).",
-       "apihelp-dump-description": "Daten im PHP-<code>var_dump()</code>-Format ausgeben.",
-       "apihelp-dumpfm-description": "Daten im PHP-<code>var_dump()</code>-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-json-description": "Daten im JSON-Format ausgeben.",
        "apihelp-json-param-callback": "Falls angegeben, wird die Ausgabe in einen angegebenen Funktionsaufruf eingeschlossen. Aus Sicherheitsgründen sind benutzerspezifische Daten beschränkt.",
        "apihelp-json-param-utf8": "Falls angegeben, kodiert die meisten (aber nicht alle) Nicht-ASCII-Zeichen als UTF-8 anstatt sie mit hexadezimalen Escape-Sequenzen zu ersetzen. Standard, wenn <var>formatversion</var> nicht <kbd>1</kbd> ist.",
        "apihelp-rawfm-description": "Daten mit den Fehlerbehebungselementen im JSON-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-txt-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben.",
        "apihelp-txtfm-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben (schöngedruckt in HTML).",
-       "apihelp-wddx-description": "Daten im WDDX-Format ausgeben.",
-       "apihelp-wddxfm-description": "Daten im WDDX-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-xml-description": "Daten im XML-Format ausgeben.",
        "apihelp-xml-param-xslt": "Falls angegeben, fügt die benannte Seite als XSL-Stylesheet hinzu. Der Wert muss ein Titel im Namensraum „{{ns:mediawiki}}“ sein und mit <code>.xsl</code> enden.",
        "apihelp-xml-param-includexmlnamespace": "Falls angegeben, ergänzt einen XML-Namensraum.",
index 1279f59..867f594 100644 (file)
@@ -14,6 +14,7 @@
        "apihelp-createaccount-param-email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου χρήστη (προαιρετικό).",
        "apihelp-createaccount-param-realname": "Πραγματικό όνομα χρήστη (προαιρετικό).",
        "apihelp-createaccount-param-mailpassword": "Εάν οριστεί σε οποιαδήποτε τιμή, ένας τυχαίος κωδικός πρόσβασης θα αποσταλεί μέσω ηλεκτρονικού ταχυδρομείου στο χρήστη.",
+       "apihelp-createaccount-param-language": "Κωδικός γλώσσας που να οριστεί ως προεπιλογή για το χρήστη (προαιρετικό, έχει ως προεπιλογή τη γλώσσα περιεχομένου).",
        "apihelp-delete-description": "Διαγραφή σελίδας.",
        "apihelp-delete-example-simple": "Διαγραφή <kbd>Αρχικής Σελίδας</kbd>.",
        "apihelp-edit-description": "Δημιουργία και επεξεργασία σελίδων.",
@@ -26,6 +27,7 @@
        "apihelp-edit-param-nocreate": "Να εμφανιστεί μήνυμα σφάλματος εάν η σελίδα δεν υπάρχει.",
        "apihelp-edit-param-watch": "Να προστεθεί η σελίδα στη λίστα παρακολούθησης του τρέχοντα χρήστη.",
        "apihelp-edit-param-unwatch": "Να αφαιρεθεί η σελίδα από τη λίστα παρακολούθησης του τρέχοντα χρήστη.",
+       "apihelp-edit-param-contentmodel": "Μοντέλο περιεχομένου για το νέο περιεχόμενο.",
        "apihelp-edit-example-edit": "Επεξεργασία κάποιας σελίδας.",
        "apihelp-emailuser-description": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε χρήστη.",
        "apihelp-emailuser-param-target": "Χρήστης στον οποίον να σταλεί το μήνυμα ηλεκτρονικού ταχυδρομείου.",
index f3faf48..f972a42 100644 (file)
@@ -12,7 +12,7 @@
        "apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code <samp>maxlag</samp> is returned with a message like <samp>Waiting for $host: $lag seconds lagged</samp>.<br />See [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.",
        "apihelp-main-param-smaxage": "Set the <code>s-maxage</code> HTTP cache control header to this many seconds. Errors are never cached.",
        "apihelp-main-param-maxage": "Set the <code>max-age</code> HTTP cache control header to this many seconds. Errors are never cached.",
-       "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot userright if <kbd>bot</kbd>.",
+       "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot user right if <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Any value given here will be included in the response. May be used to distinguish requests.",
        "apihelp-main-param-servedby": "Include the hostname that served the request in the results.",
        "apihelp-main-param-curtimestamp": "Include the current timestamp in the result.",
        "apihelp-expandtemplates-param-title": "Title of page.",
        "apihelp-expandtemplates-param-text": "Wikitext to convert.",
        "apihelp-expandtemplates-param-revid": "Revision ID, for <nowiki>{{REVISIONID}}</nowiki> and similar variables.",
-       "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;properties:Page properties defined by expanded magic words in the wikitext.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+       "apihelp-expandtemplates-param-prop": "Which pieces of information to get.\n\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "The expanded wikitext.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Any categories present in the input that are not represented in the wikitext output.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "Page properties defined by expanded magic words in the wikitext.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "Whether the output is volatile and should not be reused elsewhere within the page.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "The maximum time after which caches of the result should be invalidated.",
+       "apihelp-expandtemplates-paramvalue-prop-modules": "Any ResourceLoader modules that parser functions have requested be added to the output. Either <kbd>jsconfigvars</kbd> or <kbd>encodedjsconfigvars</kbd> must be requested jointly with <kbd>modules</kbd>.",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Gives the JavaScript configuration variables specific to the page.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Gives the JavaScript configuration variables specific to the page as a JSON string.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "The XML parse tree of the input.",
        "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
        "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Expand the wikitext <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-imagerotate-example-simple": "Rotate <kbd>File:Example.png</kbd> by <kbd>90</kbd> degrees.",
        "apihelp-imagerotate-example-generator": "Rotate all images in <kbd>Category:Flip</kbd> by <kbd>180</kbd> degrees.",
 
-       "apihelp-import-description": "Import a page from another wiki, or an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the <var>xml</var> parameter.",
+       "apihelp-import-description": "Import a page from another wiki, or from an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the <var>xml</var> parameter.",
        "apihelp-import-param-summary": "Import summary.",
        "apihelp-import-param-xml": "Uploaded XML file.",
        "apihelp-import-param-interwikisource": "For interwiki imports: wiki to import from.",
        "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
        "apihelp-import-param-namespace": "Import to this namespace. Cannot be used together with <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Import as subpage of this page. Cannot be used together with <var>$1namespace</var>.",
-       "apihelp-import-example-import": "Import [[meta:Help:Parserfunctions]] to namespace 100 with full history.",
+       "apihelp-import-example-import": "Import [[meta:Help:ParserFunctions]] to namespace 100 with full history.",
 
        "apihelp-login-description": "Log in and get authentication cookies.\n\nIn the event of a successful log-in, the needed cookies will be included in the HTTP response headers. In the event of a failed log-in, further attempts may be throttled to limit automated password guessing attacks.",
        "apihelp-login-param-name": "User name.",
        "apihelp-parse-paramvalue-prop-displaytitle": "Adds the title of the parsed wikitext.",
        "apihelp-parse-paramvalue-prop-headitems": "Gives items to put in the <code>&lt;head&gt;</code> of the page.",
        "apihelp-parse-paramvalue-prop-headhtml": "Gives parsed <code>&lt;head&gt;</code> of the page.",
-       "apihelp-parse-paramvalue-prop-modules": "Gives the ResourceLoader modules used on the page.",
+       "apihelp-parse-paramvalue-prop-modules": "Gives the ResourceLoader modules used on the page. Either <kbd>jsconfigvars</kbd> or <kbd>encodedjsconfigvars</kbd> must be requested jointly with <kbd>modules</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Gives the JavaScript configuration variables specific to the page.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Gives the JavaScript configuration variables specific to the page as a JSON string.",
        "apihelp-parse-paramvalue-prop-indicators": "Gives the HTML of page status indicators used on the page.",
        "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-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": "Disable the PP Report from the parser output.",
-       "apihelp-parse-param-disableeditsection": "Disable edit section links from the parser output.",
-       "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model <code>$1</code>).",
+       "apihelp-parse-param-disablepp": "Omit the preprocessor report (\"NewPP limit report\") from the parser output.",
+       "apihelp-parse-param-disableeditsection": "Omit edit section links from 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-parse-param-disabletoc": "Disable table of contents in output.",
+       "apihelp-parse-param-disabletoc": "Omit table of contents in output.",
        "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
        "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
        "apihelp-parse-example-page": "Parse a page.",
        "apihelp-query-param-export": "Export the current revisions of all given or generated pages.",
        "apihelp-query-param-exportnowrap": "Return the export XML without wrapping it in an XML result (same format as [[Special:Export]]). Can only be used with $1export.",
        "apihelp-query-param-iwurl": "Whether to get the full URL if the title is an interwiki link.",
-       "apihelp-query-param-continue": "When present, formats query-continue as key-value pairs that should simply be merged into the original request. This parameter must be set to an empty string in the initial query.\n\nThis parameter is recommended for all new development, and will be made default in the next API version.",
-       "apihelp-query-param-rawcontinue": "Currently ignored. In the future, <var>$1continue</var> will become the default and this will be needed to receive the raw <samp>query-continue</samp> data.",
+       "apihelp-query-param-rawcontinue": "Return raw <samp>query-continue</samp> data for continuation.",
        "apihelp-query-example-revisions": "Fetch [[Special:ApiHelp/query+siteinfo|site info]] and [[Special:ApiHelp/query+revisions|revisions]] of <kbd>Main Page</kbd>.",
        "apihelp-query-example-allpages": "Fetch revisions of pages beginning with <kbd>API/</kbd>.",
 
        "apihelp-query+deletedrevisions-param-tag": "Only list revisions tagged with this tag.",
        "apihelp-query+deletedrevisions-param-user": "Only list revisions by this user.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Don't list revisions by this user.",
-       "apihelp-query+deletedrevisions-param-limit": "The maximum amount of revisions to list.",
-       "apihelp-query+deletedrevisions-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 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;tags:Tags for the revision.",
        "apihelp-query+deletedrevisions-example-titles": "List the deleted revisions of the pages <kbd>Main Page</kbd> and <kbd>Talk:Main Page</kbd>, with content.",
        "apihelp-query+deletedrevisions-example-revids": "List the information for deleted revision <kbd>123456</kbd>.",
 
        "apihelp-query+imageinfo-description": "Returns file information and upload history.",
        "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-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+imageinfo-paramvalue-prop-url":"Gives URL to the file and the description page.",
-       "apihelp-query+imageinfo-paramvalue-prop-size":"Adds the size of the file in bytes and the height, width and page count (if applicable).",
-       "apihelp-query+imageinfo-paramvalue-prop-dimensions":"Alias for size.",
-       "apihelp-query+imageinfo-paramvalue-prop-sha1":"Adds SHA-1 hash for the file.",
-       "apihelp-query+imageinfo-paramvalue-prop-mime":"Adds MIME type of the file.",
-       "apihelp-query+imageinfo-paramvalue-prop-thumbmime":"Adds MIME type of the image thumbnail (requires url and param $1urlwidth).",
-       "apihelp-query+imageinfo-paramvalue-prop-mediatype":"Adds the media type of the file.",
-       "apihelp-query+imageinfo-paramvalue-prop-metadata":"Lists Exif metadata for the version of the file.",
-       "apihelp-query+imageinfo-paramvalue-prop-commonmetadata":"Lists file format generic metadata for the version of the file.",
-       "apihelp-query+imageinfo-paramvalue-prop-extmetadata":"Lists formatted metadata combined from multiple sources. Results are HTML formatted.",
-       "apihelp-query+imageinfo-paramvalue-prop-archivename":"Adds the filename of the archive version for non-latest versions.",
-       "apihelp-query+imageinfo-paramvalue-prop-bitdepth":"Adds the bit depth of the version.",
-       "apihelp-query+imageinfo-paramvalue-prop-uploadwarning":"Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
+       "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-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+imageinfo-paramvalue-prop-url": "Gives URL to the file and the description page.",
+       "apihelp-query+imageinfo-paramvalue-prop-size": "Adds the size of the file in bytes and the height, width and page count (if applicable).",
+       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias for size.",
+       "apihelp-query+imageinfo-paramvalue-prop-sha1": "Adds SHA-1 hash for the file.",
+       "apihelp-query+imageinfo-paramvalue-prop-mime": "Adds MIME type of the file.",
+       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Adds MIME type of the image thumbnail (requires url and param $1urlwidth).",
+       "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Adds the media type of the file.",
+       "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lists Exif metadata for the version of the file.",
+       "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lists file format generic metadata for the version of the file.",
+       "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lists formatted metadata combined from multiple sources. Results are HTML formatted.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename": "Adds the filename of the archive version for non-latest versions.",
+       "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Adds the bit depth of the version.",
+       "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
        "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
        "apihelp-query+imageinfo-param-start": "Timestamp to start listing from.",
        "apihelp-query+imageinfo-param-end": "Timestamp to stop listing at.",
        "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:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User ID of the revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model ID of the revision.\n;comment:Comment by the user for the revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
+       "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-paramvalue-prop-timestamp": "The timestamp of the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "User that made the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "User ID of the revision creator.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Length (bytes) of the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) of the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Content model ID of the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "Comment by the user for the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Parsed comment by the user for the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Text of the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Tags for the revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "The XML parse tree of revision content (requires content model <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "Limit how many revisions will be returned.",
        "apihelp-query+revisions+base-param-expandtemplates": "Expand templates in revision content (requires $1prop=content).",
-       "apihelp-query+revisions+base-param-generatexml": "Generate XML parse tree for revision content (requires $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Generate XML parse tree for revision content (requires $1prop=content; replaced by <kbd>$1prop=parsetree</kbd>).",
        "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-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-search": "Search for all page titles (or content) that have this value.",
+       "apihelp-query+search-param-search": "Search for page titles or content matching this value. You can use the search string to invoke special search features, depending on what the wiki's search backend implements.",
        "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-backend": "Which search backend to use, if not the default.",
        "apihelp-query+search-example-simple": "Search for <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
-       "apihelp-query+search-example-generator": "Ger page info about the pages returned for a search for <kbd>meaning</kbd>.",
+       "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+watchlist-param-user": "Only list changes by this user.",
        "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
        "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
-       "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision IDs and page IDs.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user ID of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
+       "apihelp-query+watchlist-param-prop": "Which additional properties to get:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Adds revision IDs and page IDs.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Adds title of the page.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Adds flags for the edit.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Adds the user who made the edit.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Adds user ID of whoever made the edit.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Adds comment of the edit.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Adds parsed comment of the edit.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Adds timestamp of the edit.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Tags edits that are patrolled.",
+       "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-watch-example-unwatch": "Unwatch the page <kbd>Main Page</kbd>.",
        "apihelp-watch-example-generator": "Watch the first few pages in the main namespace.",
 
-       "apihelp-format-example-generic": "Format the query result in the $1 format.",
+       "apihelp-format-example-generic": "Return the query result in the $1 format.",
        "apihelp-dbg-description": "Output data in PHP's <code>var_export()</code> format.",
        "apihelp-dbgfm-description": "Output data in PHP's <code>var_export()</code> format (pretty-print in HTML).",
-       "apihelp-dump-description": "Output data in PHP's <code>var_dump()</code> format.",
-       "apihelp-dumpfm-description": "Output data in PHP's <code>var_dump()</code> format (pretty-print in HTML).",
        "apihelp-json-description": "Output data in JSON format.",
        "apihelp-json-param-callback": "If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.",
        "apihelp-json-param-utf8": "If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences. Default when <var>formatversion</var> is not <kbd>1</kbd>.",
        "apihelp-rawfm-description": "Output data with the debugging elements in JSON format (pretty-print in HTML).",
        "apihelp-txt-description": "Output data in PHP's <code>print_r()</code> format.",
        "apihelp-txtfm-description": "Output data in PHP's <code>print_r()</code> format (pretty-print in HTML).",
-       "apihelp-wddx-description": "Output data in WDDX format.",
-       "apihelp-wddxfm-description": "Output data in WDDX format (pretty-print in HTML).",
        "apihelp-xml-description": "Output data in XML format.",
        "apihelp-xml-param-xslt": "If specified, adds the named page as an XSL stylesheet. The value must be a title in the {{ns:mediawiki}} namespace ending in <code>.xsl</code>.",
        "apihelp-xml-param-includexmlnamespace": "If specified, adds an XML namespace.",
 
        "api-format-title": "MediaWiki API result",
        "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+       "api-format-prettyprint-header-only-html": "This is an HTML representation intended for debugging, and is unsuitable for application use.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
 
        "api-orm-param-props": "Fields to query.",
        "api-orm-param-limit": "Max amount of rows to return.",
index 71c3cd8..ab99948 100644 (file)
@@ -9,7 +9,9 @@
                        "Edslov",
                        "Carlos Cristia",
                        "Ryo567",
-                       "Csbotero"
+                       "Csbotero",
+                       "Chris TR",
+                       "Ncontinanza"
                ]
        },
        "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]].",
@@ -17,6 +19,7 @@
        "apihelp-main-param-format": "El formato de la salida.",
        "apihelp-main-param-smaxage": "Establece el encabezado <code>s-maxage</code> durante estos segundos. Los errores nunca se almacenan en caché.",
        "apihelp-main-param-maxage": "Establece el encabezado <code>max-age</code> durante estos segundos. Los errores nunca se almacenan en caché.",
+       "apihelp-main-param-assert": "Comprobar que el usuario haya iniciado sesión si el valor es <kbd>user</kbd> o si tiene el permiso de bot si es <kbd>bot</kbd>.",
        "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-expandtemplates-param-title": "Título de la página.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
        "apihelp-expandtemplates-param-revid": "Revisión de ID, para <nowiki>{{REVISIONID}}</nowiki> y variables similares.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades de página definidas por palabras mágicas en el wikitexto.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "El tiempo máximo tras el cual deberían invalidarse los resultados en caché.",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Da las variables de configuración JavaScript específicas para la página.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Da las variables de configuración JavaScript específicas para la página como una cadena JSON.",
        "apihelp-expandtemplates-param-generatexml": "Generar un árbol de análisis XML (remplazado por $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Expandir el wikitexto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-feedcontributions-description": "Devuelve el canal de contribuciones de un usuario.",
        "apihelp-import-param-templates": "Para importaciones interwiki: importar también todas las plantillas incluidas.",
        "apihelp-import-param-namespace": "Importar a este espacio de nombres. No puede usarse simultáneamente con <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Importar como subpágina de esta página. No puede usarse simultáneamente con <var>$1namespace</var>.",
-       "apihelp-import-example-import": "Importar [[meta:Help:Parserfunctions]] al espacio de nombres 100 con todo el historial.",
+       "apihelp-import-example-import": "Importar [[meta:Help:ParserFunctions]] al espacio de nombres 100 con todo el historial.",
        "apihelp-login-description": "Iniciar sesión y obtener cookies de autenticación.\n\nSi inicias sesión sin problemas, las cookies necesarias se incluirán en los encabezados de respuesta HTTP. Si se produce algún error al iniciar sesión y este persiste, se puede regular para evitar los ataques masivos automatizados para adivinar contraseñas.",
        "apihelp-login-param-name": "Nombre de usuario.",
        "apihelp-login-param-password": "Contraseña.",
        "apihelp-query+deletedrevisions-param-tag": "Listar solo las revisiones con esta etiqueta.",
        "apihelp-query+deletedrevisions-param-user": "Listar solo las revisiones de este usuario.",
        "apihelp-query+deletedrevisions-param-excludeuser": "No listar las revisiones de este usuario.",
-       "apihelp-query+deletedrevisions-param-limit": "La cantidad máxima de revisiones que listar.",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
        "apihelp-query+deletedrevs-param-from": "Empezar a listar en este título.",
        "apihelp-query+deletedrevs-param-to": "Terminar de listar en este título.",
        "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-param-prop": "Las propiedades que se obtendrán para cada revisión:",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "El identificador de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "Marcas de revisión (menor).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "La fecha y hora de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "Usuario que realizó la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "Identificador de usuario del creador de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Longitud (en bytes) de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Identificador del modelo de contenido de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "Comentario del usuario para la revisión.",
+       "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-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-userrights-example-user": "Agregar al usuario <kbd>FooBot</kbd> al grupo <kbd>bot</kbd> y eliminarlo de los grupos <kbd>sysop</kbd> y <kbd>burócrata</kbd>.",
        "apihelp-watch-example-watch": "Vigilar la página <kbd>Portada</kbd>.",
        "apihelp-watch-example-unwatch": "Dejar de vigilar la <kbd>Portada</kbd>.",
+       "apihelp-format-example-generic": "Devolver el resultado de la consulta en formato $1.",
        "api-help-main-header": "Módulo principal",
        "api-help-flag-deprecated": "Este módulo está en desuso.",
        "api-help-flag-readrights": "Este módulo requiere permisos de lectura.",
index 574bd2f..b418f1d 100644 (file)
@@ -29,6 +29,7 @@
        "apihelp-login-param-domain": "Domeinua (hautazkoa).",
        "apihelp-login-example-login": "Saioa hasi",
        "apihelp-move-description": "Orrialde bat mugitu",
+       "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.",
index d792fd6..291ebdb 100644 (file)
@@ -8,7 +8,8 @@
                        "KhabarNegar",
                        "Sahehco",
                        "Signal89",
-                       "Mjbmr"
+                       "Mjbmr",
+                       "Ebraminio"
                ]
        },
        "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
@@ -17,7 +18,7 @@
        "apihelp-block-description": "بستن کاربر",
        "apihelp-block-param-user": "نام کاربری، آدرس آی پی یا محدوده آی پی موردنظر شما برای بستن.",
        "apihelp-block-param-reason": "دلیل بسته‌شدن",
-       "apihelp-block-param-anononly": "فقط بستن کاربران ناشناس (مانند غیرفعالکردن ویرایش‌های ناشناس این آی‌پی).",
+       "apihelp-block-param-anononly": "فقط بستن کاربران ناشناس (مانند غیرفعال کردن ویرایش‌های ناشناس این آی‌پی).",
        "apihelp-block-param-nocreate": "جلوگیری از ایجاد حساب.",
        "apihelp-block-param-autoblock": "به طور خودکار آخرین نشانی آی‌پی استفاده‌شده، و هر نشانی پس از آن که سعی می‌کند از آن داخل شود را ببند.",
        "apihelp-block-param-noemail": "از کاربر در برابر ارسال ایمیل از طریق ویکی جلوگیری شود. (نیازمند دسترسی <code>blockemail</code> است).",
@@ -40,7 +41,7 @@
        "apihelp-createaccount-param-name": "نام کاربری.",
        "apihelp-createaccount-param-password": "رمز عبور (نادیده گرفته می‌شود اگر <var>$1mailpassword</var> تنظیم شده‌باشد).",
        "apihelp-createaccount-param-domain": "دامنه برای احراز هویت خارجی (اختیاری).",
-       "apihelp-createaccount-param-email": "آدرس ایمیل کاربر (اختیاری)",
+       "apihelp-createaccount-param-email": "نشانی ایمیل کاربر (اختیاری)",
        "apihelp-createaccount-param-realname": "نام واقعی کاربر (اختیاری).",
        "apihelp-createaccount-param-mailpassword": "اگر به هر مقداری تنظیم شود، یک رمز عبور تصادفی به کاربر ایمیل خواهد شد.",
        "apihelp-createaccount-param-reason": "دلیل اختیاری برای ایجاد حساب کاربری جهت قرارگرفتن در سیاهه‌ها.",
index 04e73b3..3a201a5 100644 (file)
@@ -22,8 +22,8 @@
        "apihelp-main-param-action": "Quelle action effectuer.",
        "apihelp-main-param-format": "Le format de sortie.",
        "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.",
-       "apihelp-main-param-smaxage": "Fixer l’entête <code>s-maxage</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
-       "apihelp-main-param-maxage": "Fixer l’entête <code>max-age</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+       "apihelp-main-param-smaxage": "Fixer l’entête HTTP de contrôle de cache <code>s-maxage</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+       "apihelp-main-param-maxage": "Fixer l’entête HTTP de contrôle de cache <code>max-age</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
        "apihelp-main-param-assert": "Vérifier si l’utilisateur est connecté si positionné à <kbd>user</kbd>, ou a le droit utilisateur robot si positionné à <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Toute valeur fournie ici sera incluse dans la réponse. Peut être utilisé pour distinguer des demandes.",
        "apihelp-main-param-servedby": "Inclure le nom d’hôte qui a renvoyé la requête dans les résultats.",
        "apihelp-expandtemplates-param-title": "Titre de la page.",
        "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
        "apihelp-expandtemplates-param-revid": "ID de révision, pour <nowiki>{{REVISIONID}}</nowiki> et les variables semblables.",
-       "apihelp-expandtemplates-param-prop": "Quelles informations récupérer :\n;wikitext:Le wikitexte développé.\n;categories:Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans le wikitexte de sortie.\n;properties:Propriétés de page définies en développant les mots magiques dans le wikitexte.\n;volatile:Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.\n;ttl:Le délai maximal après lequel les caches du résultat devraient être invalidés.\n;parsetree:L’arbre d’analyse XML de l’entrée.\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
+       "apihelp-expandtemplates-param-prop": "Quelles informations récupérer.\n\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Le wikitexte développé",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans la sortie du wikitexte.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "Propriétés de la page définies par le développement des mots magiques dans le wikitexte.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "Le délai maximum après lequel la mise en cache de ce résultat doit être invalidée.",
+       "apihelp-expandtemplates-paramvalue-prop-modules": "Tous les modules ResourceLoader que les fonctions d’analyse ont demandé d’ajouter à la sortie. Soit <kbd>jsconfigvars</kbd> soit <kbd>encodedjsconfigvars</kbd> doit être demandé avec <kbd>modules</kbd>.",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Donne les variables de configuration JavaScript spécifiques à la page.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Donne les variables de configuration JavaScript spécifiques à la page sous forme de chaîne JSON.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "L’arbre d’analyse XML de l’entrée.",
        "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
        "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Développe le wikitexte <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-imagerotate-param-rotation": "Degrés de rotation de l’image dans le sens des aiguilles d’une montre.",
        "apihelp-imagerotate-example-simple": "Faire pivoter <kbd>File:Example.png</kbd> de <kbd>90</kbd> degrés.",
        "apihelp-imagerotate-example-generator": "Faire pivoter toutes les images de <kbd>Category:Flip</kbd> de <kbd>180</kbd> degrés.",
-       "apihelp-import-description": "Importer une page depuis un autre wiki, ou un fichier XML.\n\nNoter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre <var>xml</var>.",
+       "apihelp-import-description": "Importer une page depuis un autre wiki, ou depuis un fichier XML.\n\nNoter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre <var>xml</var>.",
        "apihelp-import-param-summary": "Importer le résumé.",
        "apihelp-import-param-xml": "Fichier XML téléchargé.",
        "apihelp-import-param-interwikisource": "Pour les importations interwiki : wiki depuis lequel importer.",
        "apihelp-import-param-interwikipage": "Pour les importations interwiki : page à importer.",
        "apihelp-import-param-fullhistory": "Pour les importations interwiki : importer tout l’historique, et pas seulement la version courante.",
        "apihelp-import-param-templates": "Pour les importations interwiki : importer aussi tous les modèles inclus.",
-       "apihelp-import-param-namespace": "Importer vers cet espace de noms. Écrase le paramètre <kbd>$1rootpage</kbd>.",
-       "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page. Ignoré si le paramètre <kbd>$1namespace</kbd> est fourni.",
-       "apihelp-import-example-import": "Importer [[meta:Help:Parserfunctions]] vers l’espace de noms 100 avec tout l’historique.",
+       "apihelp-import-param-namespace": "Importer vers cet espace de noms. Impossible à utiliser avec <var>$1rootpage</var>.",
+       "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page. Impossible à utiliser avec <var>$1namespace</var>.",
+       "apihelp-import-example-import": "Importer [[meta:Help:ParserFunctions]] vers l’espace de noms 100 avec tout l’historique.",
        "apihelp-login-description": "Se connecter et obtenir les cookies d’authentification.\n\nDans le cas d’une connexion réussie, les cookies nécessaires seront inclus dans les entêtes de la réponse HTTP. Dans le cas d’une connexion en échec, les essais ultérieurs pourront être réduits afin de limiter les attaques automatisées de découverte du mot de passe.",
        "apihelp-login-param-name": "Nom d’utilisateur.",
        "apihelp-login-param-password": "Mot de passe.",
        "apihelp-opensearch-param-suggest": "Ne rien faire si <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vaut faux.",
        "apihelp-opensearch-param-redirects": "Comment gérer les redirections :\n;return:Renvoie la redirection elle-même.\n;resolve:Renvoie la page cible. Peut renvoyer moins de $1limit résultats.\nPour des raisons historiques, la valeur par défaut est « return » pour $1format=json et « resolve » pour les autres formats.",
        "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-param-reset": "Réinitialise les préférences aux valeurs par défaut du site.",
        "apihelp-parse-param-pageid": "Analyser le contenu de cette page. Écrase <var>$1page</var>.",
        "apihelp-parse-param-redirects": "Si le paramètre <var>$1page</var> ou <var>$1pageid</var> est positionné sur une redirection, la résoudre.",
        "apihelp-parse-param-oldid": "Analyser le contenu de cette révision. Écrase <var>$1page</var> et <var>$1pageid</var>.",
-       "apihelp-parse-param-prop": "Quelles informations obtenir :\n;text:Fournit le texte analysé du wikitexte.\n;langlinks:Fournit les liens de langue dans le wikitexte analysé.\n;categories:Fournit les catégories dans le wikitexte analysé.\n;categorieshtml:Fournit la version HTML des catégories.\n;links:Fournit les liens internes dans le wikitexte analysé.\n;templates:Fournit les modèles dans le wikitexte analysé.\n;images:Fournit les images dans le wikitexte analysé.\n;externallinks:Fournit les liens externes dans le wikitexte analysé.\n;sections:Fournit les sections dans le wikitexte analysé.\n;revid:Ajoute l’ID de révision de la page analysée.\n;displaytitle:Ajoute le titre du wikitexte analysé.\n;headitems:Fournit les éléments à mettre dans le &lt;head&gt; de la page.\n;headhtml:Fournit le &lt;head&gt; analysé de la page.\n;modules:Fournit les modules ResourceLoader utilisés sur la page.\n;indicators:Fournit le HTML des indicateurs d’état de la page utilisés dans la page.\n;iwlinks:Fournit les liens interwiki dans le wikitexte analysé.\n;wikitext:Fournit le wikitexte d’origine qui a été analysé.\n;properties:Fournit différentes propriétés définies dans le wikitexte analysé.\n;limitreportdata:Fournit le rapport de limite de façon structurée. Ne fournit aucune donnée, quand $1disablepp est activé.\n;limitreporthtml:Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, quand $1disablepp est activé.",
+       "apihelp-parse-param-prop": "Quelles informations obtenir :",
+       "apihelp-parse-paramvalue-prop-text": "Fournit le texte analysé du wikitexte.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Fournit les liens de langue du wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-categories": "Fournit les catégories dans le wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Fournit la version HTML des catégories.",
+       "apihelp-parse-paramvalue-prop-links": "Fournit les liens internes dans le wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-templates": "Fournit les modèles dans le wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-images": "Fournit les images dans le wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-externallinks": "Fournit les liens externes dans le wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-sections": "Fournit les sections dans le wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-revid": "Ajoute l’ID de révision de la page analysée.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "Ajoute le titre du wikitexte analysé.",
+       "apihelp-parse-paramvalue-prop-headitems": "Fournit les éléments à mettre dans le <code>&lt;head&gt;</code> de la page.",
+       "apihelp-parse-paramvalue-prop-headhtml": "Fournit le <code>&lt;head&gt;</code> analysé de la page.",
+       "apihelp-parse-paramvalue-prop-modules": "Fournit les modules ResourceLoader utilisés sur la page. Soit <kbd>jsconfigvars</kbd> soit <kbd>encodedjsconfigvars</kbd> doit être demandé avec <kbd>modules</kbd>.",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "Fournit les variables de configuration JavaScript spécifiques à la page.",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Fournit les variables de configuration JavaScript spécifiques à la page comme chaîne JSON.",
+       "apihelp-parse-paramvalue-prop-indicators": "Fournit le HTML des indicateurs d’état de page utilisés sur la page.",
+       "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-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-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-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu <code>$1</code>).",
+       "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-query-param-export": "Exporter les révisions actuelles de toutes les pages fournies ou générées.",
        "apihelp-query-param-exportnowrap": "Renvoyer le XML exporté sans l’inclure dans un résultat XML (même format que [[Special:Export]]). Utilisable uniquement avec $1export.",
        "apihelp-query-param-iwurl": "S’il faut obtenir l’URL complète si le titre est un lien interwiki.",
-       "apihelp-query-param-continue": "Quand il est présent, met en forme query-continue sous forme de paires clé-valeur qui devrait simplement être fusionné dans la requête d’origine. Ce paramètre doit être fixé à une chaîne vide dans la requête initiale.\n\nCe paramètre est recommandé pour tout nouveau développement, et sera mis par défaut dans la prochaine version de l’API.",
-       "apihelp-query-param-rawcontinue": "Actuellement ignoré. Plus tard, <var>$1continue</var> deviendra la valeur par défaut et sera nécessaire pour recevoir les données brutes de <samp>query-continue</samp>.",
+       "apihelp-query-param-rawcontinue": "Renvoyer les données <samp>query-continue</samp> brutes pour continuer.",
        "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de <kbd>Page principale</kbd>.",
        "apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par <kbd>API/</kbd>.",
        "apihelp-query+allcategories-description": "Énumérer toutes les catégories.",
        "apihelp-query+deletedrevisions-param-tag": "Lister uniquement les révisions marquées par cette balise.",
        "apihelp-query+deletedrevisions-param-user": "Lister uniquement les révisions faites par cet utilisateur.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Ne pas lister les révisions faites par cet utilisateur.",
-       "apihelp-query+deletedrevisions-param-limit": "Le nombre maximal de révisions à lister.",
-       "apihelp-query+deletedrevisions-param-prop": "Quelles propriétés obtenir :\n;revid:Ajoute l’ID de la révision supprimée.\n;parentid:Ajoute l’ID de la révision précédente de la page.\n;user:Ajoute l’utilisateur ayant fait la révision.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la révision.\n;comment:Ajoute le commentaire de la révision.\n;parsedcomment:Ajoute le commentaire analysé de la révision.\n;minor:Marque si une révision est mineure.\n;len:Ajoute la taille (en octets) de la révision.\n;sha1:Ajoute le SHA-1 (base 16) de la révision.\n;content:Ajoute le contenu de la révision.\n;tags:Balises pour la révision.",
        "apihelp-query+deletedrevisions-example-titles": "Lister les révisions supprimées des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec leur contenu.",
        "apihelp-query+deletedrevisions-example-revids": "Lister les informations pour la révision supprimée <kbd>123456</kbd>.",
        "apihelp-query+deletedrevs-description": "Lister les révisions supprimées.\n\nOpère selon trois modes :\n# Lister les révisions supprimées pour les titres donnés, triées par horodatage.\n# Lister les contributions supprimées pour l’utilisateur donné, triées par horodatage (pas de titres spécifiés).\n# Lister toutes les révisions supprimées dans l’espace de noms donné, triées par titre et horodatage (aucun titre spécifié, $1user non positionné).\n\nCertains paramètres ne s’appliquent qu’à certains modes et sont ignorés dans les autres.",
        "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.",
+       "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-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).",
+       "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+revisions+base-param-parse": "Analyser le contenu de la révision (nécessite $1prop=content). Pour des raisons de performance, si cette option est utilisée, $1limit est forcé à 1.",
        "apihelp-query+revisions+base-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
        "apihelp-query+revisions+base-param-diffto": "ID de révision à comparer à chaque révision. Utiliser <kbd>prev</kbd>, <kbd>next</kbd> et <kbd>cur</kbd> pour la version précédente, suivante et actuelle respectivement.",
        "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase <var>$1diffto</var>. Si <var>$1section</var> est positionné, seule cette section sera comparée avec ce texte",
        "apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour <var>$1difftotext</var> et attendu pour la sortie du contenu.",
        "apihelp-query+search-description": "Effectuer une recherche en texte intégral.",
-       "apihelp-query+search-param-search": "Rechercher les titres (ou le contenu) de toutes les pages ayant cette valeur.",
+       "apihelp-query+search-param-search": "Rechercher les titres de page ou le contenu correspondant à cette valeur. Vous pouvez utiliser la chaîne de recherche pour invoquer des fonctionnalités de recherche spéciales, selon ce que le serveur de recherche du wiki implémente.",
        "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;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 :\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-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-setnotificationtimestamp-example-pagetimestamp": "Fixer l’horodatage de notification pour <kbd>Page principale</kbd> afin que toutes les modifications depuis le 1 janvier 2012 soient non vues",
        "apihelp-setnotificationtimestamp-example-allpages": "Réinitialiser l’état de notification sur les pages dans l’espace de noms <kbd>{{ns:user}}</kbd>.",
        "apihelp-tag-description": "Ajouter ou enlever des balises de modification aux révisions ou ou aux entrées de journal individuelles.",
+       "apihelp-tag-param-rcid": "Un ou plus IDs de modification récente à partir desquels ajouter ou supprimer la balise.",
+       "apihelp-tag-param-revid": "Un ou plus IDs de révision à partir desquels ajouter ou supprimer la balise.",
+       "apihelp-tag-param-logid": "Un ou plus IDs d’entrée de journal à partir desquels ajouter ou supprimer la balise.",
        "apihelp-tag-param-add": "Balises à ajouter. Seules les balises définies manuellement peuvent être ajoutées.",
+       "apihelp-tag-param-remove": "Balises à supprimer. Seules les balises qui sont soit définies manuellement soit pas du tout définies peuvent être supprimées.",
        "apihelp-tag-param-reason": "Motif de la modification.",
+       "apihelp-tag-example-rev": "Ajoute la balise <kbd>vandalism</kbd> à partir de l’ID de révision 123 sans indiquer de motif",
+       "apihelp-tag-example-log": "Supprimer la balise <kbd>spam</kbd> à partir de l’ID d’entrée de journal 123 avec le motif <kbd>Wrongly applied</kbd>",
        "apihelp-tokens-description": "Obtenir les jetons pour les actions modifiant les données.\n\nCe module est obsolète, remplacé par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-tokens-param-type": "Types de jeton à demander.",
        "apihelp-tokens-example-edit": "Récupérer un jeton de modification (par défaut).",
        "apihelp-watch-example-watch": "Suivre la page <kbd>Page principale</kbd>.",
        "apihelp-watch-example-unwatch": "Ne plus suivre la page <kbd>Page principale</kbd>.",
        "apihelp-watch-example-generator": "Suivre les quelques premières pages de l’espace de nom principal",
-       "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
+       "apihelp-format-example-generic": "Renvoyer le résultat de la requête dans le format $1.",
        "apihelp-dbg-description": "Extraire les données au format de <code>var_export()</code> de PHP.",
        "apihelp-dbgfm-description": "Extraire les données au format de <code>var_export()</code> de PHP (affiché proprement en HTML).",
-       "apihelp-dump-description": "Extraire les données au format de <code>var_dump()</code> de PHP.",
-       "apihelp-dumpfm-description": "Extraire les données au format de <code>var_dump()</code> de PHP (affiché proprement en HTML).",
        "apihelp-json-description": "Extraire les données au format JSON.",
        "apihelp-json-param-callback": "Si spécifié, inclut la sortie dans l’appel d’une fonction fournie. Pour plus de sûreté, toutes les données spécifiques à l’utilisateur seront restreintes.",
-       "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale.",
+       "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale. Valeur par défaut quand <var>formatversion</var> ne vaut pas <kbd>1</kbd>.",
+       "apihelp-json-param-ascii": "Si spécifié, encode toutes ses séquences d’échappement non ASCII utilisant l’hexadécimal. Valeur par défaut quand <var>formatversion</var> vaut <kbd>1</kbd>.",
+       "apihelp-json-param-formatversion": "Mise en forme de sortie :\n;1:Format rétro-compatible (booléens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
        "apihelp-jsonfm-description": "Extraire les données au format JSON (affiché proprement en HTML).",
        "apihelp-none-description": "Ne rien extraire.",
        "apihelp-php-description": "Extraire les données au format sérialisé de PHP.",
+       "apihelp-php-param-formatversion": "Mise en forme de la sortie :\n;1:Format rétro-compatible (bool&ens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
        "apihelp-phpfm-description": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).",
        "apihelp-rawfm-description": "Extraire les données avec les éléments de débogage au format JSON (affiché proprement en HTML).",
        "apihelp-txt-description": "Extraire les données au format de <code>print_r()</code> de PHP.",
        "apihelp-txtfm-description": "Extraire les données au format de <code>print_r()</code> de PHP (affiché proprement en HTML).",
-       "apihelp-wddx-description": "Extraire les données au format WDDX.",
-       "apihelp-wddxfm-description": "Extraire les données au format WDDX (affiché proprement en HTML).",
        "apihelp-xml-description": "Extraire les données au format XML.",
        "apihelp-xml-param-xslt": "Si spécifié, ajoute la page nommée comme une feuille de style XSL. La valeur doit être un titre dans l’espace de noms {{ns:mediawiki}} se terminant par <code>.xsl</code>.",
        "apihelp-xml-param-includexmlnamespace": "Si spécifié, ajoute un espace de noms XML.",
        "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-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-orm-param-limit": "Nombre maximal de lignes à renvoyer.",
        "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
        "api-help-param-deprecated": "Obsolète.",
        "api-help-param-required": "Ce paramètre est obligatoire.",
        "api-help-datatypes-header": "Type de données",
+       "api-help-datatypes": "Certains types de paramètre dans les requêtes de l’API nécessitent plus d’explication :\n;boolean\n:Les paramètres booléens fonctionnent comme des cases à cocher HTML : si le paramètre est spécifié, quelle que soit sa valeur, il est considéré comme vrai. Pour une valeur fausse, enlever complètement le paramètre.\n;timestamp\n:Les horodatages peuvent être spécifiés sous différentes formes. Date et heure ISO 8601 est recommandé. Toutes les heures sont en UTC, tout fuseau horaire inclus est ignoré.\n:* Date et heure ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (la ponctuation et <kbd>Z</kbd> sont facultatifs)\n:* Date et heure ISO 8601 avec fractions de seconde (ignorées), <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> (tirets, deux-points et <kbd>Z</kbd> sont facultatifs)\n:* Format MédiaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Format numérique générique, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuseau horaire facultatif en <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, ou <kbd>-<var>##</var></kbd> sont ignorés)\n:* Format EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Format RFC 2822 (le fuseau horaire est facultatif), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Format RFC 850 (le fuseau horaire est facultatif), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Format ctime C, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Secondes depuis 1970-01-01T00:00:00Z sous forme d’entier de 1 à 13 chiffres (sans <kbd>0</kbd>)\n:* La chaîne <kbd>now</kbd>",
+       "api-help-param-type-limit": "Type : entier ou <kbd>max</kbd>",
+       "api-help-param-type-integer": "Type : {{PLURAL:$1|1=entier|2=liste d’entiers}}",
+       "api-help-param-type-boolean": "Type : booléen ([[Special:ApiHelp/main#main/datatypes|détails]])",
+       "api-help-param-type-timestamp": "Type : {{PLURAL:$1|1=horodatage|2=liste d’horodatages}} ([[Special:ApiHelp/main#main/datatypes|formats autorisés]])",
+       "api-help-param-type-user": "Type : {{PLURAL:$1|1=nom d’utilisateur|2=liste de noms d’utilisateur}}",
        "api-help-param-list": "{{PLURAL:$1|1=Une valeur|2=Valeurs (séparées par <kbd>{{!}}</kbd>)}} : $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Doit être vide|Peut être vide, ou $2}}",
        "api-help-param-limit": "Pas plus de $1 autorisé.",
index c2848b2..6698a19 100644 (file)
        "apihelp-expandtemplates-param-title": "Título da páxina.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki a converter.",
        "apihelp-expandtemplates-param-revid": "ID de revisión, para <nowiki>{{REVISIONID}}</nowiki> e variables similares.",
-       "apihelp-expandtemplates-param-prop": "Pezas de información a retornar:\n;wikitext:O texto wiki expandido.\n;categories:Calquer categoría presente na entrada que non estea representada na saída do texto wiki\n;properties:Propiedades da páxina definidas por palabras máxicas expandidas no texto wiki\n;volatile:Definir se a saída é volátil e se non debe usarse noutra parte da páxina.\n;ttl:Tempo máximo a partir do cal os cachés do resultado deben invalidarse.\n;parsetree:O análise sintáctico en árbore do XML de entrada.\nTeña en conta que se non se selecciona ningún valor o resultado conterá o texto wiki, pero a saída estará nun formato desprezado.",
+       "apihelp-expandtemplates-param-prop": "Pezas de información a retornar.\n\nTeña en conta que se non se selecciona ningún valor o resultado conterá o texto wiki, pero a saída estará nun formato obsoleto.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "O wikitexto expandido.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Calquera categoría presente na entrada que non estea representada na saída do texto wiki.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades da páxina definidas por palabras máxicas expandidas no texto wiki.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "Definir se a saída é volátil e se non debe usarse noutra parte da páxina.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "Tempo máximo a partir do cal os cachés do resultado deben invalidarse.",
+       "apihelp-expandtemplates-paramvalue-prop-modules": "Calquera módulo ResourceLoader que as funcións de análise teñan solicitado engadir á saída. <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deben ser solicitadas xunto con <kbd>modules</kbd>.",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina como unha cadea de texto JSON.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "A árbore de análise XML da entrada.",
        "apihelp-expandtemplates-param-includecomments": "Cando queria incluír comentarios HTML na saída.",
        "apihelp-expandtemplates-param-generatexml": "Xenerar árbore de análise XML (reemprazado por $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Expandir o wikitexto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-imagerotate-param-rotation": "Graos a rotar a imaxe no sentido do reloxio.",
        "apihelp-imagerotate-example-simple": "Rotar <kbd>File:Example.png</kbd> <kbd>90</kbd> graos.",
        "apihelp-imagerotate-example-generator": "Rotar tódalas imaxes en <kbd>Category:Flip</kbd> <kbd>180</kbd> graos",
-       "apihelp-import-description": "Importar unha páxina doutra wiki, ou nun ficheiro XML.\n\nDecátese de que o POST HTTP debe facerse como unha carga de ficheiro (p. ex. usando multipart/form-data) cando se envíe un ficheiro para o parámetro <var>xml</var>.",
+       "apihelp-import-description": "Importar unha páxina doutra wiki, ou dun ficheiro XML.\n\nDecátese de que o POST HTTP debe facerse como unha carga de ficheiro (p. ex. usando multipart/form-data) cando se envíe un ficheiro para o parámetro <var>xml</var>.",
        "apihelp-import-param-summary": "Resume de importación.",
        "apihelp-import-param-xml": "Subido ficheiro XML.",
        "apihelp-import-param-interwikisource": "Para importacións interwiki: wiki da que importar.",
        "apihelp-import-param-templates": "Para importacións interwiki: importar tódolos modelos incluídos.",
        "apihelp-import-param-namespace": "Importar a este espazo de nomes. Non se pode usar de forma conxunta con  <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Importar como subpáxina desta páxina. Non se pode usar de forma conxunta con <var>$1namespace</var>.",
-       "apihelp-import-example-import": "Importar [[meta:Help:Parserfunctions]] ó espazo de nomes 100 con todo o historial.",
+       "apihelp-import-example-import": "Importar [[meta:Help:ParserFunctions]] ó espazo de nomes 100 con todo o historial.",
        "apihelp-login-description": "No caso dunha conexión correcta, as cookies necesarias incluiranse nas cabeceiras HTTP de resposta. No caso dunha conexión fallida, os intentos posteriores poden ser reducidos para limitar ataques automaticos de roubo de contrasinais.",
        "apihelp-login-param-name": "Nome de usuario.",
        "apihelp-login-param-password": "Contrasinal",
        "apihelp-parse-paramvalue-prop-displaytitle": "Engade o título do texto wiki analizado.",
        "apihelp-parse-paramvalue-prop-headitems": "Devolve os elementos a poñer na <code>&lt;cabeceira&gt;</code> da páxina.",
        "apihelp-parse-paramvalue-prop-headhtml": "Devolve <code>&lt;cabeceira&gt;</code> analizada da páxina.",
-       "apihelp-parse-paramvalue-prop-modules": "Devolve os módulos ResourceLoader usados na páxina.",
+       "apihelp-parse-paramvalue-prop-modules": "Devolve os módulos ResourceLoader usados na páxina. <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deben ser solicitados xunto con <kbd>modules</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Devolve as variables específicas de configuración JavaScript da páxina como unha cadea de texto JSON.",
        "apihelp-parse-paramvalue-prop-indicators": "Devolve o HTML dos indicadores de estado de páxina usados na páxina.",
        "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-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-generatexml": "Xenerar unha árbore de análise XML (necesita o modelo de contido <code>$1</code>).",
+       "apihelp-parse-param-disablepp": "Omitir o informe de preprocesador (\"Informe de límite NewPP\") da saída do analizador.",
+       "apihelp-parse-param-disableeditsection": "Omitir as ligazóns de edición de sección da saída do analizador.",
+       "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-query-param-export": "Exportar as revisións actuais de todas as páxinas dadas ou xeneradas.",
        "apihelp-query-param-exportnowrap": "Devolver o XML exportado sen incluílo nun resultado XML (mesmo formato que [[Special:Export]]). Só pode usarse con  $1export.",
        "apihelp-query-param-iwurl": "Se fai falta obter a URL completa se o título é unha ligazón interwiki.",
-       "apihelp-query-param-continue": "Cando está presente, formatea query-continue como pares clave-valor que simplemente serán mesturados na consulta orixinal. Este parámetro debe fixarse a unha cadea baleira na consulta inicial.\n\nEste parámetro está recomendado para todos os novos desenvolvementos, e será o usado por defecto na seguinte versión da API.",
-       "apihelp-query-param-rawcontinue": "Actualmente ignorado. No futuro, <var>$1continue</var> virá por defecto e será necesario para recibir os datos en bruto de <samp>query-continue</samp>.",
+       "apihelp-query-param-rawcontinue": "Devolver os datos en bruto de <samp>query-continue</samp> para continuar.",
        "apihelp-query-example-revisions": "Consultar [[Special:ApiHelp/query+siteinfo|información do sitio]] e [[Special:ApiHelp/query+revisions|as revisións]] da <kbd>Páxina Principal</kbd>.",
        "apihelp-query-example-allpages": "Buscar revisións de páxinas que comecen por <kbd>API/</kbd>.",
        "apihelp-query+allcategories-description": "Numerar tódalas categorías",
        "apihelp-query+deletedrevisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
        "apihelp-query+deletedrevisions-param-user": "Só listar revisións deste usuario.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
-       "apihelp-query+deletedrevisions-param-limit": "Máximo número de revisións a listar.",
-       "apihelp-query+deletedrevisions-param-prop": "Que propiedades obter:\n;revid:Engade o ID da modificación borrada.\n;parentid:Engade o ID da modificación da modificación anterior da páxina.\n;user:Engade o usuario que fixo a modificación.\n;userid:Engade o ID do usuario que fixo a modificación.\n;comment:Engade o comentario da modificación.\n;parsedcomment:Engade o comentario analizado da modificación.\n;minor:Engade unha marca se a modificación é menor.\n;len:Engade a lonxitude (bytes) da modificación.\n;sha1:Engade a función SHA-1 (base 16) da modificación.\n;content:Engade o contido da modificación.\n;tags:Marcas da modificación.",
        "apihelp-query+deletedrevisions-example-titles": "Listar as revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido.",
        "apihelp-query+deletedrevisions-example-revids": "Listar a información para a revisión borrada <kbd>123456</kbd>.",
        "apihelp-query+deletedrevs-description": "Lista as modificación borradas.\n\nOpera según tres modos:\n#Lista as modificacións borradas dos títulos indicados, ordenados por selo de tempo.\n#Lista as contribucións borradas do usuario indicado, ordenadas por selo de tempo (sen indicar títulos).\n#Lista todas as modificacións borradas no espazo de nomes indicado, ordenadas por título e selo de tempo (sen indicar títulos, sen fixar $1user).\n\nCertos parámetros só se aplican a algúns modos e son ignorados noutros.",
        "apihelp-query+revisions-example-first5-after": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> feitas despois de 2006-05-01.",
        "apihelp-query+revisions-example-first5-not-localhost": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> que non foron feitas polo usuario anónimo <kbd>127.0.0.1</kbd>.",
        "apihelp-query+revisions-example-first5-user": "Mostrar as cinco primeiras revisión da <kbd>Páxina Principal</kbd> feitas polo usuario <kbd>MediaWiki default</kbd>.",
-       "apihelp-query+revisions+base-param-prop": "Que propiedades mostrar para cada modificación:\n;ids:O identificador da modificación.\n;flags:Etiquetas de modificación(menor).\n;timestamp:Selo de tempo da modificación.\n;user:Usuario que fixo a modificación.\n;userid:Identificador de usuario que fixo a modificación.\n;size:Lonxitude (bytes) da modificación.\n;sha1:SHA-1 (base 16) da modificación.\n;contentmodel:Identificador do modelo de contido da modificación.\n;comment:Comentario do usuario que fixo a modificación.\n;parsedcomment:Comentario analizado do usuario que fixo a modificación.\n;content:Texto da modificación.\n;tags:Etiquetas da modificación.",
+       "apihelp-query+revisions+base-param-prop": "Que propiedades mostrar para cada modificación:",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "O identificador da modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "Marcas de modificación (menor).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "O selo de tempo da modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "Usuario que fixo a revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "Identificador de usuario do creador da modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Lonxitude (en bytes) da revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) da modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Identificador do modelo de contido da modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "Comentario do usuario para a modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Comentario analizado do usuario para a modificación.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Texto da revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para a revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "Árbore de análise XML do contido da modificación (precisa o modelo de contido <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "Limitar cantas revisións se van devolver.",
        "apihelp-query+revisions+base-param-expandtemplates": "Expandir os modelos no contido da revisión (require $1prop=content).",
-       "apihelp-query+revisions+base-param-generatexml": "Xenerar a árbore de análise XML para o contido da revisión (require $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Xenerar a árbore de análise XML para o contido da revisión (require $1prop=content; substituído por <kbd>$1prop=parsetree</kbd>).",
        "apihelp-query+revisions+base-param-parse": "Analizar o contido da revisión (require $1prop=content). Por razóns de rendemento, se se usa esta opción, $1limit cámbiase a 1.",
        "apihelp-query+revisions+base-param-section": "Recuperar unicamente o contido deste número de sección.",
        "apihelp-query+revisions+base-param-diffto": "ID de revisión a comparar con cada revisión. Use <kbd>prev</kbd>, <kbd>next</kbd> e <kbd>cur</kbd> para a versión precedente, seguinte e actual respectivamente.",
        "apihelp-query+revisions+base-param-difftotext": "Texto co que comparar cada revisión. Só compara un número limitado de revisións. Ignora <var>$1diffto</var>.  Se <var>$1section</var> ten valor, só se comparará co texto esa sección.",
        "apihelp-query+revisions+base-param-contentformat": "Formato de serialización usado por <var>$1difftotext</var> e esperado para a saída do contido.",
        "apihelp-query+search-description": "Facer unha busca por texto completo.",
-       "apihelp-query+search-param-search": "Buscar tódolos títulos de páxina (ou contido) que teñan este valor.",
+       "apihelp-query+search-param-search": "Buscar os títulos de páxina ou contido que coincidan con este valor. Pode usar a cadea de busca para invocar funcións especiais de busca, dependendo do motor de busca que teña a wiki.",
        "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+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-watch-example-watch": "Vixiar a páxina <kbd>Páxina Principal</kbd>.",
        "apihelp-watch-example-unwatch": "Deixar de vixiar a páxina <kbd>Páxina Principal</kbd>.",
        "apihelp-watch-example-generator": "Vixiar as primeiras páxinas no espazo de nomes principal",
-       "apihelp-format-example-generic": "Formatar o resultado da consulta no formato $1.",
+       "apihelp-format-example-generic": "Devolver o resultado da consulta no formato $1.",
        "apihelp-dbg-description": "Datos de saída en formato <code>var_export()</code> de PHP.",
        "apihelp-dbgfm-description": "Datos de saída en formato <code>var_export()</code> de PHP(impresión en HTML).",
-       "apihelp-dump-description": "Datos de saída en formato PHP <code>var_dump()</code>.",
-       "apihelp-dumpfm-description": "Datos de saída en formato <code>var_dump()</code> de PHP(impresión en HTML).",
        "apihelp-json-description": "Datos de saída en formato JSON.",
        "apihelp-json-param-callback": "Se está especificado, inclúe a saída na chamada da función indicada. Para maior seguridade, todos os datos específicos do usuario serán restrinxidos.",
        "apihelp-json-param-utf8": "Se está especificado, codifica a maioría (pero non todos) dos caracteres ASCII como UTF-8 no canto de reemprazalos con secuencias de escape hexadecimais. Por defecto cando <var>formatversion</var> non é <kbd>1</kbd>.",
        "apihelp-rawfm-description": "Datos de saída cos elementos de depuración en formato JSON(impresión en HTML).",
        "apihelp-txt-description": "Datos de saída en formato PHP <code>print_r()</code>.",
        "apihelp-txtfm-description": "Datos de saída en formato <code>print_r()</code> de PHP(impresión en HTML).",
-       "apihelp-wddx-description": "Datos de saída en formato WDDX.",
-       "apihelp-wddxfm-description": "Datos de saída en formato WDDX(impresión en HTML).",
        "apihelp-xml-description": "Datos de saída en formato XML.",
        "apihelp-xml-param-xslt": "Se está indicado, engade o nome da páxina como unha folla de estilo XSL. O valor debe ser un título no espazo de nomes {{ns:mediawiki}} rematando con <code>.xsl</code>.",
        "apihelp-xml-param-includexmlnamespace": "Se está indicado, engade un espazo de nomes XML.",
        "apihelp-yamlfm-description": "Datos de saída en formato YAML(impresión en HTML).",
        "api-format-title": "Resultado de API de MediaWiki",
        "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
+       "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
        "api-orm-param-props": "Campos a consultar.",
        "api-orm-param-limit": "Número máximo de filas a mostrar.",
        "api-pageset-param-titles": "Lista de títulos nos que traballar.",
index e3b20f3..c33805f 100644 (file)
@@ -7,17 +7,44 @@
                        "Danny-w",
                        "YaronSh",
                        "ערן",
-                       "LaG roiL"
+                       "LaG roiL",
+                       "Elyashiv"
                ]
        },
+       "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-curtimestamp": "הכללת חותמת הזמן הנוכחית בתוצאה.",
+       "apihelp-main-param-format": "תסדיר הפלט.",
+       "apihelp-main-param-maxlag": "שיהוי מרבי יכול לשמש כשמדיה־ויקי מותקנת בצביר עם מסד נתונים משוכפל. כדי לחסוך בפעולות שגורמות יותר שיהוי בשכפול אתר, הפרמטר הזה יכול לגרום ללקוח להמתין עד ששיהוי השכפול יורד מתחת לערך שצוין. במקרה של שיהוי מוגזם, קוד השגיאה <samp>maxlag</samp> מוחזר עם הודעה כמו <samp>Waiting for $host: $lag seconds lagged</samp>.<br />ר' [[mw:Manual:Maxlag_parameter|מדריך למשתמש: פרמטר maxlag]] למידע נוסף.",
+       "apihelp-main-param-smaxage": "הגדרת כותרת בקרת מטמון HTTP‏ <code>s-maxage</code> למספר כזה של שניות.",
+       "apihelp-main-param-maxage": "הגדרת כותרת בקרת מטמון HTTP‏ <code>max-age</code> למספר כזה של שניות.",
+       "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://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 שהנך רוצה לחסום.",
+       "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-anononly": "לחסום משתמשים אלמוניים בלבד (דהיינו, השבתת עריכות אלמוניות מכתובת ה־IP הזאת)",
        "apihelp-block-param-nocreate": "מניעת יצירת חשבונות",
        "apihelp-block-param-autoblock": "חסימה אוטומטית גם של כתובת ה־IP האחרונה שהשתמש בה ושל כל כתובת 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": "קבלת ההבדל בין 2 דפים.\n\nיש להעביר מספר גרסה, כותרת דף או מזהה דף גם ל־\"from\" וגם ל־\"to\".",
        "apihelp-compare-param-fromtitle": "כותרת ראשונה להשוואה.",
        "apihelp-compare-param-fromid": "מס׳ זיהוי של העמוד הראשון להשוואה.",
        "apihelp-compare-param-fromrev": "גרסה ראשונה להשוואה.",
        "apihelp-delete-param-pageid": "מס׳ הזיהוי של העמוד למחיקה. לא ניתן להשתמש בשילוב עם <var>$1title</var>.",
        "apihelp-delete-param-reason": "סיבת המחיקה. אם לא הוגדרה, תתווסף סיבה שנוצרה אוטומטית.",
        "apihelp-delete-param-watch": "הוספת העמוד לרשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-delete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-delete-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
-       "apihelp-delete-example-simple": "מחיקת <kbd>עמוד ראשי</kbd>.",
-       "apihelp-delete-example-reason": "מחיקת <kbd>עמוד ראשי</kbd>. סיבה: <kbd>הכנה להעברה</kbd>.",
-       "apihelp-edit-description": "יצירת ועריכת דפים.",
-       "apihelp-edit-param-title": "שם הדף לעריכה. לא לשימוש עם Delete <kbd>Main Page</kbd>.",
+       "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": "מזהה הדף לעריכה. לא לשימוש עם <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-recreate": "לעקוב את כל הטעויות על כך שהדף נמחק בינתיים.",
+       "apihelp-edit-param-createonly": "לא לערוך את הדף אם הוא כבר קיים.",
+       "apihelp-edit-param-nocreate": "לזרוק שגיאה אם הדף אינו קיים.",
+       "apihelp-edit-param-watch": "הוספת העמוד לרשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-edit-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
+       "apihelp-edit-param-watchlist": "להוסיף את הדף לרשימת המעקב של המשתמש הנוכחי או להסיר אותו משם, להשתמש בהעדפות, או לא לשנות את מצב המעקב.",
+       "apihelp-edit-param-prependtext": "הוספת הטקסט הזה לתחילת הדף. דורס את $1text.",
+       "apihelp-edit-param-redirect": "לפתור הפניות אוטומטית.",
+       "apihelp-edit-param-contentformat": "תסדיר להסדרת תוכן שמשמש את טקסט הקלט.",
        "apihelp-edit-example-edit": "עריכת דף",
        "apihelp-emailuser-description": "שליחת דוא\"ל למשתמש.",
+       "apihelp-emailuser-param-target": "לאיזה משתמש לשלוח דוא\"ל.",
+       "apihelp-emailuser-param-subject": "כותרת נושא.",
+       "apihelp-emailuser-param-text": "גוף הדואר.",
+       "apihelp-emailuser-param-ccme": "שליחת עותק של הדואר הזה אליי.",
+       "apihelp-expandtemplates-description": "הרחבת כל התבניות בקוד הוויקי.",
        "apihelp-expandtemplates-param-title": "כותרת הדף.",
+       "apihelp-expandtemplates-param-text": "איזה קוד ויקי להמיר.",
+       "apihelp-expandtemplates-param-prop": "אילו חלקי מידע לקבל.\n\nיש לשים לכך שאם לא נבחרו ערכים, התוצאה תכיל את קוד הוויקי, אבל הפלט יהיה בתסדיר מיושן.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "קוד הוויקי המורחב.",
+       "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-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-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-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-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 צריכה להיעשות בתור העלאת קובץ (כלומר, עם multipart/form-data) בזמן שליחת קובץ לפרמטר <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-param-name": "שם משתמש.",
        "apihelp-login-param-password": "ססמה.",
        "apihelp-login-param-domain": "שם מתחם (רשות).",
        "apihelp-logout-example-logout": "הוצאת המשתמש הנוכחי.",
        "apihelp-managetags-description": "ביצוע פעולות ניהוליות הקשורות בשינוי תגיות.",
        "apihelp-move-description": "העברת עמוד.",
+       "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": "להתעלם מכל האזהרות.",
+       "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> הוא false.",
+       "apihelp-opensearch-param-redirects": "איך לטפל בהפניות:\n;return:להחזיר את ההפניה עצמה.\n;resolve:להחזיר את דף היעד. יכול להחזיר פחות מ־$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-param-reset": "אתחול ההעדפות לבררות המחדל של האתר.",
+       "apihelp-options-param-change": "רשימת שינויים, בתסדיר name=value (למשל skin=vector). הערך אינו יכול להכיל תווי מקל (|). אם לא ניתן ערך, אפילו לא סימן שווה, למשל optionname|otheroption|...‎, האפשרות תאופס לערך בררת המחדל שלה.",
+       "apihelp-options-example-reset": "אתחול כל ההעדפות.",
+       "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": "רשימת שמות יחידות query (ערך של הפרמטר <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-summary": "התקציר שצריך לפענח.",
+       "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-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-iwlinks": "מתן קישורי בינוויקי בקוד הוויקי המפוענח.",
+       "apihelp-parse-paramvalue-prop-wikitext": "מתן קוד הוויקי המקורי שפוענח.",
+       "apihelp-parse-param-disablepp": "לכבות את דו\"ח ה־PP מפלט המפענח.",
+       "apihelp-parse-param-disableeditsection": "לכבות את קישורי עריכת הפסקאות מפלט המפענח.",
+       "apihelp-parse-param-preview": "לפענח במצב תצוגה מקדימה.",
+       "apihelp-parse-param-sectionpreview": "לפענח במצב תצוגה מקדימה של פסקה (מדליק גם את מצב תצוגה מקדימה).",
+       "apihelp-parse-param-disabletoc": "לכבות תוכן עניינים בפלט.",
+       "apihelp-parse-param-contentformat": "תסדיר הסדרת תוכן שישמש לטקסט הקלט. תקף רק עם $1text.",
+       "apihelp-parse-example-page": "לפענח דף.",
+       "apihelp-parse-example-text": "לפענח קוד ויקי.",
+       "apihelp-parse-example-texttitle": "לפענח קוד, עם ציון כותרת דף.",
+       "apihelp-parse-example-summary": "לפענח תקציר.",
+       "apihelp-patrol-description": "לנטר דף או גרסה.",
+       "apihelp-patrol-param-rcid": "מזהה שינויים אחרונים לניטור.",
+       "apihelp-patrol-param-revid": "מזהה גרסה לניטור.",
+       "apihelp-patrol-example-rcid": "לנטר עיול משינויים אחרונים.",
+       "apihelp-patrol-example-revid": "לנטר גרסה.",
+       "apihelp-protect-description": "לשנות את רמת ההגנה של דף.",
+       "apihelp-protect-param-title": "כותרת הדף להגנה או הסרת הגנה. לא ניתן להשתמש בזה יחד עם $1pageid.",
+       "apihelp-protect-param-pageid": "מזהה הדף להגנה או הסרת הגנה. לא ניתן להשתמש בזה יחד עם $1title.",
+       "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": "הפעלת הגנה מדורגת (כלומר, להגן על דפים שכלולים בדף הזה). אין לזה השפעה אם כל רמות ההגנה שניתנו אינן תומכות בדירוג.",
+       "apihelp-protect-param-watch": "אם זה מוגדר, הוספת הדף שהגנה נוספת אליו או מוסרת ממנו לרשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-protect-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-protect-example-protect": "הגנה על דף.",
+       "apihelp-protect-example-unprotect2": "הסרת הגנה מדף על־ידי הגדרה של אפס הגבלות.",
+       "apihelp-purge-description": "ניקוי המטמון לכותרות שניתנו.\n\nדורש בקשת POST אם המשתמש לא נכנס לחשבון.",
+       "apihelp-purge-param-forcelinkupdate": "עדכון טבלאות הקישורים.",
+       "apihelp-purge-example-simple": "ניקוי המטמון של הדפים <kbd>Main Page</kbd> ו־<kbd>API</kbd>.",
+       "apihelp-purge-example-generator": "ניקוי 10 הדפים הראשונים במרחב הראשי.",
+       "apihelp-query-param-prop": "אילו מאפיינים לקבל על הדפים בשאילתה.",
        "apihelp-query-param-list": "אילו רשימות לקבל.",
-       "apihelp-query+allcategories-description": "מניין של כל הקטגוריות.",
-       "apihelp-query+allcategories-param-from": "הקטגוריה ממנה להתחיל למנות.",
+       "apihelp-query-param-meta": "אילו מטא־נתונים לקבל.",
+       "apihelp-query-param-exportnowrap": "להחזיר את ה־XML של היצוא בלי לעטוף אותו בתוצאת XML (אותו תסדיר כמו [[Special:Export]]). אפשר להשתמש בזה רק עם $1export.",
+       "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": "אילו מאפיינים לקבל:\n;size:הוספת מספר הדפים בקטגוריה.\n;hidden:מתייג קטגוריות מוסתרות עם _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "רשימת קטגוריות עם מידע על מספר הדפים בכל אחת מהן.",
+       "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+allfileusages-description": "לרשום את כל שימושי הקובץ, כולל בלתי־קיימים.",
+       "apihelp-query+allfileusages-param-from": "מאיזו כותרת קובץ להתחיל למנות.",
+       "apihelp-query+allfileusages-param-to": "שם הקובץ שבו תסתיים המנייה.",
+       "apihelp-query+allfileusages-param-prefix": "חיפוש כל שמות הקבצים שמתחילים עם הערך הזה.",
+       "apihelp-query+allfileusages-param-limit": "כמה פריטים להחזיר בסך הכול.",
+       "apihelp-query+allfileusages-param-dir": "באיזה כיוון לרשום.",
+       "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-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-limit": "כמה תמונות להחזיר בסך הכול.",
        "apihelp-query+allimages-example-B": "הצגת רשימה של קבצים שמתחילים באות <kbd>B</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-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+allmessages-description": "החזרת הודעות מהאתר הזה.",
        "apihelp-query+allmessages-param-prop": "אלו מאפיינים לקבל.",
+       "apihelp-query+allmessages-param-nocontent": "אם זה מוגדר, לא לכלול את תוכן ההודעות בפלט.",
+       "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-prefix": "החזרת הודעת עם התחילית הזאת.",
+       "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-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+allpages-param-dir": "באיזה כיוון לרשום.",
+       "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-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+allredirects-param-limit": "כמה פריטים להחזיר בסך הכול.",
+       "apihelp-query+allredirects-param-dir": "באיזה כיוון לרשום.",
+       "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-namespace": "איזה מרחב שם למנות.",
+       "apihelp-query+alltransclusions-param-limit": "כמה פריטים להחזיר בסך הכול.",
+       "apihelp-query+alltransclusions-param-dir": "באיזה כיוון לרשום.",
+       "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-dir": "באיזה כיוון למיין.",
+       "apihelp-query+allusers-param-prop": "אילו פרטי מידע לכלול:\n;blockinfo:הוספת מידע עם החסימה הנוכחית של משתמש.\n;groups:הוספת קבוצות שמשתמש חבר בהן. זה משתמש ביותר משאבי דפדפן ויכול להחזיר פחות תוצאות מהמגבלה.\n;implicitgroups:לרשום את כל הקבוצות שהמשתמש חבר בהן אוטומטית.\n;rights:רשימת הההרשאות שיש למשתמש.\n;editcount:הוספת מניין העריכות של המשתמש .\n;registration:הוספת חותם־הזמן של זמן הרישום של המשתמש (יכול להיות ריק).",
+       "apihelp-query+backlinks-description": "מציאת כל הדפים שמקשרים לדף הנתון.",
+       "apihelp-query+backlinks-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם <var>$1pageid</var>.",
+       "apihelp-query+backlinks-param-namespace": "איזה מרחב שם למנות.",
+       "apihelp-query+backlinks-param-dir": "באיזה כיוון לרשום.",
+       "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+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": "מזהה הדף של הקטגוריה שצריך למנות. לא יכול לשמש יחד עם <var>$1title</var>.",
+       "apihelp-query+categorymembers-param-namespace": "לכלול רק דפים במרחבי השם האלה. יש לשים לב לכך ש־<kbd>$1type=subcat</kbd> או <kbd>$1type=file</kbd> יכולים לשמש במקום <kbd>$1namespace=14</kbd> או <kbd>6</kbd>.",
+       "apihelp-query+categorymembers-param-limit": "מספר הדפים המרבי שיוחזר.",
+       "apihelp-query+categorymembers-param-sort": "לפי איזה מאפיין למיין.",
+       "apihelp-query+categorymembers-param-dir": "באיזה כיוון למיין.",
        "apihelp-query+categorymembers-param-startsortkey": "כדאי להשתמש ב־$1starthexsortkey במקום.",
        "apihelp-query+categorymembers-param-endsortkey": "כדאי להשתמש ב־$1endhexsortkey במקום.",
        "apihelp-query+categorymembers-example-simple": "קבלת עשרת העמודים הראשונים שתחת <kbd>קטגוריה:פיזיקה</kbd>.",
        "apihelp-query+contributors-param-limit": "כמה תורמים להחזיר.",
        "apihelp-query+contributors-example-simple": "הצגת תורמים לדף <kbd>עמוד ראשי</kbd>.",
+       "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+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+disabled-description": "יחידת ה־query הזאת כובתה.",
        "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-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם $1pageid.",
+       "apihelp-query+embeddedin-param-namespace": "איזה מרחב שם למנות.",
+       "apihelp-query+embeddedin-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+embeddedin-param-limit": "כמה דפים להחזיר בסך הכול.",
        "apihelp-query+extlinks-param-limit": "כמה קישורים להחזיר.",
+       "apihelp-query+exturlusage-description": "למנות דפים שמכילים URL נתון.",
+       "apihelp-query+exturlusage-param-namespace": "איזה מרחב שם למנות.",
+       "apihelp-query+filearchive-description": "למנות את כל הקבצים המחוקים לפי הסדר.",
+       "apihelp-query+filearchive-param-from": "מאיזו כותרת תמונה להתחיל למנות.",
+       "apihelp-query+filearchive-param-to": "באיזו כותרת תמונה להפסיק למנות.",
+       "apihelp-query+filearchive-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+fileusage-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
+       "apihelp-query+fileusage-param-limit": "כמה להחזיר.",
+       "apihelp-query+fileusage-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;redirect:להציג רק הפניות.\n;!redirect:לא להציג הפניות.",
+       "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": "מתן URL לקובץ ולדף התיאור.",
+       "apihelp-query+imageinfo-paramvalue-prop-size": "הוספת הגודל של הקובץ בבתים והגובה, הרוחב ומניין הדפים (אם זה מתאים).",
+       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "כיוני ל־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-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 כדי לקבל מידע על קובץ קיים. לא נועד לשימוש מחוץ לליבת MediaWiki.",
+       "apihelp-query+imageinfo-param-limit": "כמה גרסאות של קובץ לכל קובץ.",
+       "apihelp-query+imageinfo-param-start": "מאיז חותם־זמן להתחיל רשימה.",
+       "apihelp-query+imageinfo-param-end": "באיזה חותם־זמן לסיים את הרשימה.",
+       "apihelp-query+imageinfo-param-urlheight": "דומה ל־$1urlwidth.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "באיזו שפה לאחזר את המטא־נתונים. זה משפיע על אילו תרגומים לאחזר, האם יש כמה, וגם איך דברים כמו מספרים וערכים שונים מעוצבים.",
        "apihelp-query+imageinfo-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
        "apihelp-query+imageinfo-example-simple": "קבלת פרטים על הגרסה הנוכחית של [[:קובץ:Albert Einstein Head.jpg]].",
        "apihelp-query+images-param-limit": "כמה קבצים להחזיר.",
+       "apihelp-query+images-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+imageusage-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם $1pageid.",
+       "apihelp-query+imageusage-param-namespace": "איזה מרחב שם לרשום.",
+       "apihelp-query+imageusage-param-dir": "באיזה כיוון לרשום.",
        "apihelp-query+info-paramvalue-prop-watchers": "מספר העוקבים, אם קיבלת הרשאה.",
        "apihelp-query+info-paramvalue-prop-readable": "האם המשתמש יכול להציג דף זה.",
+       "apihelp-query+iwbacklinks-param-title": "איזה קישור בינוויקי לחפש. צריך להשתמש בזה יחד עם <var>$1blprefix</var>.",
+       "apihelp-query+iwbacklinks-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+iwbacklinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+iwlinks-param-title": "איזה קישור בינוויקי לחפש. צריך להשתמש בזה יחד עם <var>$1prefix</var>.",
+       "apihelp-query+iwlinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+langbacklinks-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+langbacklinks-param-dir": "באיזה כיוון לרשום.",
        "apihelp-query+langlinks-param-title": "קישור לחיפוש. חובה להשתמש עם <var>$1lang</var>.",
+       "apihelp-query+langlinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+langlinks-param-inlanguagecode": "קוד שפה ששמות שפות מתורגמות.",
        "apihelp-query+links-description": "החזרת כל הקישורים מהדפים שצוינו.",
+       "apihelp-query+links-param-limit": "כמה קישורים להחזיר.",
+       "apihelp-query+links-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+linkshere-description": "מציאת כל הדפים שמקשרים לדפים הנתונים.",
+       "apihelp-query+linkshere-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
        "apihelp-query+linkshere-param-limit": "כמה להחזיר.",
        "apihelp-query+linkshere-param-show": "הצגת פריטים שתואמים את הדרישות הללו בלבד:\n;redirect:הצגת הפניות בלבד.\n;!redirect:הצגת קישורים שאינם הפניות בלבד.",
        "apihelp-query+logevents-description": "קבלת אירועים מהרישומים.",
+       "apihelp-query+logevents-param-start": "באיזה חותם־זמן להתחיל למנות.",
+       "apihelp-query+logevents-param-end": "באיזה חותם זמן להפסיק לרשום.",
+       "apihelp-query+pageswithprop-param-propname": "מאפיין דף שעבורו יימנו דפים.",
+       "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+prefixsearch-param-search": "מחרוזת לחיפוש.",
+       "apihelp-query+prefixsearch-param-namespace": "שמות מתחם לחיפוש.",
        "apihelp-query+prefixsearch-param-limit": "מספר התוצאות המרבי להחזרה.",
        "apihelp-query+prefixsearch-param-offset": "מספר תוצאות לדילוג.",
+       "apihelp-query+protectedtitles-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+protectedtitles-param-end": "באיזה חותם־זמן הגנה לסיים את הרשימה.",
        "apihelp-query+querypage-param-limit": "מספר תוצאות להחזרה.",
        "apihelp-query+recentchanges-description": "מניית השינויים האחרונים.",
+       "apihelp-query+recentchanges-param-start": "באיזה חותם־זמן להתחיל למנות.",
+       "apihelp-query+recentchanges-param-end": "באיזה חותם זמן להפסיק לרשום.",
+       "apihelp-query+recentchanges-param-user": "לרשום רק שינויים של המשתמש הזה.",
+       "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user",
        "apihelp-query+recentchanges-param-limit": "כמה שינויים להחזיר בסך הכול.",
        "apihelp-query+recentchanges-param-type": "אילו סוגים של שינויים להציג.",
+       "apihelp-query+recentchanges-param-toponly": "לרשום רק שינויים שהם הגרסה האחרונה.",
        "apihelp-query+recentchanges-example-simple": "הצגת השינויים האחרונים.",
+       "apihelp-query+redirects-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
        "apihelp-query+redirects-param-limit": "כמה הפניות להחזיר.",
+       "apihelp-query+redirects-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;fragment:להציג רק הפניות עם מקטע.\n;!fragment:להציג רק הפניות ללא מקטע.",
+       "apihelp-query+revisions-param-startid": "מאיזה מזהה גרסה להתחיל למנות.",
+       "apihelp-query+revisions-param-endid": "באיזה מזהה גרסה להפסיק את מניית הגרסאות.",
+       "apihelp-query+revisions-param-start": "מאיזה חותם־זמן של גרסה להתחיל למנות.",
+       "apihelp-query+revisions-param-tag": "לרשום רק גרסאות עם התג הזה.",
        "apihelp-query+revisions+base-param-limit": "הגבלת מספר הגרסאות שיוחזרו.",
+       "apihelp-query+revisions+base-param-contentformat": "תסדיר ההסדרה שמשמש את <var>$1difftotext</var> וצפוי לפלט של תוכן.",
+       "apihelp-query+search-description": "ביצוע חיפוש בכל הטקסט.",
+       "apihelp-query+search-param-what": "איזה סוג חיפוש לבצע.",
+       "apihelp-query+search-param-info": "אילו מטא־נתונים להחזיר.",
+       "apihelp-query+search-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "קוד שפה ששמות שפות מתורגמות (מאמץ טוב ביותר) ושמות עיצובים.",
+       "apihelp-query+siteinfo-example-simple": "איזור מידע על האתר.",
+       "apihelp-query+stashimageinfo-param-filekey": "מפתח שמזהה העלאה קודמת שהונחה בצד באופן זמני.",
+       "apihelp-query+tags-description": "רשימת תגי שינוי.",
+       "apihelp-query+tags-example-simple": "רשימת תגים זמינים.",
+       "apihelp-query+templates-param-limit": "כמה תבניות להחזיר.",
+       "apihelp-query+templates-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+tokens-param-type": "סוגי האסימונים לבקש.",
+       "apihelp-query+tokens-example-simple": "אחזור אסימון csrf (בררת המחדל).",
        "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
+       "apihelp-query+transcludedin-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
+       "apihelp-query+transcludedin-param-limit": "כמה להחזיר.",
+       "apihelp-query+transcludedin-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;redirect:להציג רק הפניות.\n;!redirect:לא להציג הפניות.",
+       "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-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+watchlist-param-start": "מאיזה חותם־זמן להתחיל למנות.",
+       "apihelp-query+watchlist-param-end": "באיזה חותם זמן להפסיק לרשום.",
+       "apihelp-query+watchlist-param-user": "לרשום רק שינויים של המשתמש הזה.",
+       "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user",
+       "apihelp-query+watchlist-param-limit": "כמה תוצאות סך הכול להחזיר בכל בקשה.",
+       "apihelp-query+watchlistraw-param-limit": "כמה תוצאות סך הכול להחזיר בכל בקשה.",
+       "apihelp-query+watchlistraw-param-fromtitle": "מאיזו כותרת (עם תחילית מרחב שם) להתחיל את המנייה.",
+       "apihelp-query+watchlistraw-param-totitle": "באיזו כותרת (עם תחילית מרחב שם) להפסיק למנות.",
+       "apihelp-rollback-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-tag-param-reason": "סיבה לשינוי.",
+       "apihelp-tokens-description": "קבלת אסימונים לפעולות שמשנות נתונים.\n\nהיחידה הזאת הוכרזה בתור מיושנת לטובת [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-undelete-param-reason": "סיבה לשחזור.",
+       "apihelp-undelete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+       "apihelp-upload-param-filename": "שם קובץ היעד.",
+       "apihelp-upload-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+       "apihelp-upload-param-ignorewarnings": "להתעלם מכל האזהרות.",
+       "apihelp-upload-param-filekey": "מפתח שמזהה העלאה קודמת שהונחה בצד באופן זמני.",
+       "apihelp-userrights-param-user": "שם משתמש.",
+       "apihelp-userrights-param-reason": "סיבה לשינוי.",
+       "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-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": "לפלוט נתונים בתסדיר <code dir=\"ltr\">print_r()</code> של PHP.",
+       "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-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יש לציין את הפרמטר format כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום format=$2.\n\nר' את [https://www.mediawiki.org/wiki/API התיעוד המלא], או את [[Special:ApiHelp/main|העזרה של 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-orm-param-props": "באילו שדות לעשות שאילתה.",
        "api-orm-param-limit": "מספר מרבי של שורות להחזיר.",
        "api-pageset-param-titles": "רשימת כותרות.",
        "api-pageset-param-pageids": "רשימת מזהי דף לעובד עליהם.",
        "api-pageset-param-revids": "רשימת מזהי גרסה לעבוד עליהם.",
-       "api-pageset-param-generator": "ק×\91×\9cת ×¨×©×\99×\9eת ×\93פ×\99×\9d ×\9c×¢×\91×\95×\93 ×¢×\9c×\99×\94×\9d ×¢×\9cÖ¾×\99×\93×\99 ×\94רצת ×\99×\97×\99×\93ת ×©×\90×\99×\9cת×\94 ×©×¦×\95×\99× ×\94.\n\n'''×\9cתש×\95×\9eת ×\9c×\91×\9a:''' לשמות בפרמטר generator צריכה להיות התחילית \"g\", ר' דוגמאות.",
-       "api-pageset-param-redirects-generator": "פתרון אוטומטי של הפניות ב־$1titles, ב־$1pageids, וב־$1revids, ודפים שמחזיר $1generator.",
-       "api-pageset-param-redirects-nogenerator": "פתרון אוטומטי של הפניות ב־$1titles, ב־$1pageids וב־$1revids.",
+       "api-pageset-param-generator": "ק×\91×\9cת ×¨×©×\99×\9eת ×\93פ×\99×\9d ×\9c×¢×\91×\95×\93 ×¢×\9c×\99×\94×\9d ×¢×\9cÖ¾×\99×\93×\99 ×\94רצת ×\99×\97×\99×\93ת ×\94Ö¾query ×©×¦×\95×\99× ×\94.\n\n<strong>×\9cתש×\95×\9eת ×\9c×\91×\9a:</strong> לשמות בפרמטר generator צריכה להיות התחילית \"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>$1pageids</var>.",
        "api-pageset-param-converttitles": "המרת כותרות לסוגי כתב אחרים אם זה נחוץ. זה עובד רק אם שפת הכותרת של הוויקי תומכת בהמרת סוגי כתב. השפות שתמכות בהמרת סוגי כתב הן $1.",
        "api-help-title": "עזרה של MediaWiki 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>×\99×\97×\99×\93×\94 ×\96×\95 ×\94×\99×\90 ×¤× ×\99×\9e×\99ת ×\90×\95 ×\9c×\90 ×\99צ×\99×\91×\94.</strong>\n×\94פע×\95×\9c×\94 ×©×\9c×\94 ×¢×©×\95×\99ה להשתנות ללא הודעה מוקדמת.",
+       "api-help-flag-internal": "<strong>×\94×\99×\97×\99×\93×\94 ×\94×\96×\90ת ×\94×\99×\90 ×¤× ×\99×\9e×\99ת ×\90×\95 ×\91×\9cת×\99Ö¾×\99צ×\99×\91×\94.</strong> ×\94פע×\95×\9c×\94 ×©×\9c×\94 ×\99×\9b×\95×\9cה להשתנות ללא הודעה מוקדמת.",
        "api-help-flag-readrights": "יחידה זו דורשת הרשאות קריאה.",
-       "api-help-flag-writerights": "×\99×\97×\99×\93×\94 ×\96×\95 דורשת הרשאות כתיבה.",
+       "api-help-flag-writerights": "×\94×\99×\97×\99×\93×\94 ×\94×\96×\90ת דורשת הרשאות כתיבה.",
        "api-help-flag-mustbeposted": "יחידה זו מקבלת רק בקשות POST.",
-       "api-help-flag-generator": "×\94×\99×\97×\99×\93×\94 ×\94×\96×\90ת ×\99×\9b×\95×\9c×\94 ×\9c×\94×\99×\95ת מחולל.",
+       "api-help-flag-generator": "×\90פשר ×\9c×\94שת×\9eש ×\91×\99×\97×\99×\93×\94 ×\94×\96×\90ת ×\91ת×\95ר מחולל.",
        "api-help-source": "מקור: $1",
        "api-help-source-unknown": "מקור: <span class=\"apihelp-unknown\">לא ידוע</span>",
-       "api-help-license": "רישיון: [[$1|$2]]",
+       "api-help-license": "רישיון: <span dir=\"auto\">[[$1|$2]]</span>",
        "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-param-list": "{{PLURAL:$1|1=ערך אחד|2=ערכים (מופרדים באמצעות \"{{!}}\")}}: $2",
+       "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-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-list-can-be-empty": "{{PLURAL:$1|0=חייב להיות ריק|יכול להיות ריק או $2}}",
        "api-help-param-limit": "מספר הפרמטרים לא יכול להיות גדול מ־$1.",
        "api-help-param-limit2": "המספר המרבי המותר הוא $1 (עבור בוטים – $2).",
        "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": "כבוי בשל [https://www.mediawiki.org/wiki/Manual:$wgMiserMode מצב חיסכון].",
-       "api-help-param-limited-in-miser-mode": "'''לתשומת לבך:''' בשל [https://www.mediawiki.org/wiki/Manual:$wgMiserMode מצב חיסכון], שימוש בזה יכול להוביל לפחות מ־\"$1limit\" תוצאות לפני המשך; במצבים קיצוניים ייתכן שיחזרו אפס תוצאות.",
-       "api-help-param-direction": "×\91×\90×\99×\96×\94 ×\9b×\99×\95×\95×\9f ×\9c×\9eספר:\n;newer:לרשום את הישנים ביותר בהתחלה. לתשומת לבך: $1start חייב להיות לפני $1end.\n;older:לרשום את החדשים ביותר בהתחלה (בררת מחדל). לתשומת לבך: $1start חייב להיות אחרי $1end.",
+       "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": "×\91×\90×\99×\96×\94 ×\9b×\99×\95×\95×\9f ×\9c×\9e× ×\95ת:\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|דוגמה|דוגמאות}}:",
index a87861e..190de54 100644 (file)
@@ -4,7 +4,9 @@
                        "Beta16",
                        "Nivit",
                        "Toadino2",
-                       "Gianfranco"
+                       "Gianfranco",
+                       "Alexmar983",
+                       "Ricordisamoa"
                ]
        },
        "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)]].",
@@ -59,6 +61,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.",
        "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-title": "Titolo della pagina.",
        "apihelp-expandtemplates-param-text": "Wikitesto da convertire.",
+       "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-move-description": "Sposta una pagina.",
+       "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 e00f175..a286056 100644 (file)
@@ -5,13 +5,15 @@
                        "2nd-player",
                        "Los688",
                        "Whym",
-                       "Mfuji"
+                       "Mfuji",
+                       "Otokoume",
+                       "Sujiniku"
                ]
        },
        "apihelp-main-param-action": "実行する操作です。",
        "apihelp-main-param-format": "出力する形式です。",
-       "apihelp-main-param-smaxage": "<code>s-maxage</code> ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
-       "apihelp-main-param-maxage": "<code>max-age</code> ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+       "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-checktoken-param-type": "調べるトークンの種類。",
        "apihelp-checktoken-param-token": "調べるトークン。",
        "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
+       "apihelp-compare-description": "2つの版間の差分を取得します。\n\n\"from\" と \"to\" の両方の版番号、ページ名、もしくはページIDを渡す必要があります。",
+       "apihelp-compare-param-fromtitle": "比較する1つ目のページ名。",
+       "apihelp-compare-param-fromid": "比較する1つ目のページID。",
+       "apihelp-compare-param-fromrev": "比較する1つ目の版。",
+       "apihelp-compare-param-totitle": "比較する2つ目のページ名。",
+       "apihelp-compare-param-toid": "比較する2つ目のページID。",
+       "apihelp-compare-param-torev": "比較する2つ目の版。",
        "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": "利用者の本名 (省略可能)。",
@@ -51,6 +61,7 @@
        "apihelp-delete-param-reason": "削除の理由です。入力しない場合、自動的に生成された理由が使用されます。",
        "apihelp-delete-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
        "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>Preparing for move</kbd> という理由で <kbd>Main Page</kbd> を削除する",
        "apihelp-disabled-description": "このモジュールは無効化されています。",
@@ -63,6 +74,7 @@
        "apihelp-edit-param-tags": "この版に適用する変更タグ。",
        "apihelp-edit-param-minor": "細部の編集",
        "apihelp-edit-param-notminor": "細部の編集ではない。",
+       "apihelp-edit-param-bot": "この編集をボットとしてマークする。",
        "apihelp-edit-param-basetimestamp": "編集前の版のタイムスタンプ。編集競合を検出するために使用されます。\n[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] で取得できます。",
        "apihelp-edit-param-starttimestamp": "編集作業を開始したときのタイムスタンプ。編集競合を検出するために使用されます。適切な値は <var>[[Special:ApiHelp/main|curtimestamp]]</var> を使用して編集作業を開始するとき (たとえば、編集するページの本文を読み込んだとき) に取得できます。",
        "apihelp-edit-param-createonly": "すでにそのページが存在する場合は編集を行いません。",
@@ -70,6 +82,7 @@
        "apihelp-edit-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
        "apihelp-edit-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
        "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-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
@@ -85,6 +98,7 @@
        "apihelp-expandtemplates-description": "ウィキテキストに含まれるすべてのテンプレートを展開します。",
        "apihelp-expandtemplates-param-title": "ページの名前です。",
        "apihelp-expandtemplates-param-text": "変換するウィキテキストです。",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "展開されたウィキテキスト。",
        "apihelp-expandtemplates-param-includecomments": "HTMLコメントを出力に含めるかどうか。",
        "apihelp-expandtemplates-example-simple": "ウィキテキスト <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> を展開する。",
        "apihelp-feedcontributions-description": "利用者の投稿記録フィードを返します。",
        "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-import-example-import": "[[meta:Help:ParserFunctions]] をすべての履歴とともに名前空間100に取り込む。",
        "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-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-preview": "プレビューモードでのパース",
+       "apihelp-parse-example-page": "ページをパース",
+       "apihelp-parse-example-text": "ウィキテキストをパース",
        "apihelp-patrol-description": "ページまたは版を巡回済みにします。",
        "apihelp-patrol-param-revid": "巡回済みにする版ID。",
        "apihelp-patrol-example-rcid": "最近の更新を巡回",
        "apihelp-query+deletedrevisions-param-tag": "このタグが付与された版のみ表示します。",
        "apihelp-query+deletedrevisions-param-user": "この利用者による版のみを一覧表示。",
        "apihelp-query+deletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
-       "apihelp-query+deletedrevisions-param-limit": "一覧表示する版の最大数。",
        "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-param-from": "列挙の始点となるページ名。",
        "apihelp-query+revisions-example-first5-not-localhost": "<kbd>Main Page</kbd> の匿名利用者 <kbd>127.0.0.1</kbd> 以外による最初の5版を取得する。",
        "apihelp-query+revisions-example-first5-user": "<kbd>Main Page</kbd> の <kbd>MediaWiki default</kbd> による最初の5版を取得する。",
        "apihelp-query+search-description": "全文検索を行います。",
-       "apihelp-query+search-param-search": "ã\81\93ã\81®å\80¤ã\82\92å\90«ã\82\80ã\81\99ã\81¹ã\81¦ã\81®ã\83\9aã\83¼ã\82¸å\90\8d (ã\81¾ã\81\9fã\81¯æ\9c¬æ\96\87) ã\82\92æ¤\9cç´¢ã\81\97ます。",
+       "apihelp-query+search-param-search": "ã\81\93ã\81®å\80¤ã\82\92å\90«ã\82\80ã\83\9aã\83¼ã\82¸å\90\8dã\81¾ã\81\9fã\81¯æ\9c¬æ\96\87ã\82\92æ¤\9cç´¢ã\81\97ã\81¾ã\81\99ã\80\82Wikiã\81®æ¤\9cç´¢ã\83\90ã\83\83ã\82¯ã\82¨ã\83³ã\83\89å®\9fè£\85ã\81«å¿\9cã\81\98ã\81¦ã\80\81ã\81\82ã\81ªã\81\9fã\81¯ç\89¹å\88¥ã\81ªæ¤\9cç´¢æ©\9fè\83½ã\82\92å\91¼ã\81³å\87ºã\81\99ã\81\9fã\82\81ã\81®æ\96\87å­\97å\88\97ã\82\92æ¤\9cç´¢ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dます。",
        "apihelp-query+search-param-namespace": "この名前空間内のみを検索します。",
        "apihelp-query+search-param-what": "実行する検索の種類です。",
        "apihelp-query+search-param-limit": "返すページの総数です。",
        "apihelp-userrights-param-reason": "変更の理由。",
        "apihelp-watch-example-watch": "<kbd>Main Page</kbd> をウォッチする。",
        "apihelp-watch-example-unwatch": "<kbd>Main Page</kbd> のウォッチを解除する。",
-       "apihelp-format-example-generic": "クエリの結果を $1 形式に整形します",
+       "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-json-param-callback": "指定すると、指定した関数呼び出しで出力をラップします。安全のため、利用者固有のデータはすべて制限されます。",
        "apihelp-json-param-utf8": "指定すると、大部分の非 ASCII 文字 (すべてではありません) を、16 進のエスケープ シーケンスに置換する代わりに 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": "指定すると、スタイルシートとして &lt;xslt&gt; を追加します。MediaWiki 名前空間の、ページ名の末尾が \".xsl\" のウィキページに対して使用すべきです。",
+       "apihelp-xml-param-xslt": "指定すると、XSLスタイルシートとして名付けられたページを追加します。値は、必ず、{{ns:mediawiki}} 名前空間の、ページ名の末尾が <code>.xsl</code> でのタイトルである必要があります。",
        "apihelp-xml-param-includexmlnamespace": "指定すると、XML 名前空間を追加します。",
        "apihelp-xmlfm-description": "データを XML 形式 (HTML に埋め込んだ形式) で出力します。",
        "apihelp-yaml-description": "データを YAML 形式で出力します。",
index 3ff138d..3f841ac 100644 (file)
@@ -5,7 +5,8 @@
                        "Twotwo2019",
                        "아라",
                        "LiteHell",
-                       "Ysjbserver"
+                       "Ysjbserver",
+                       "Alex00728"
                ]
        },
        "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-edit-param-bot": "이 편집을 봇으로 표시.",
        "apihelp-edit-example-edit": "문서 편집",
        "apihelp-expandtemplates-param-title": "문서 제목",
+       "apihelp-feedrecentchanges-param-tagfilter": "태그로 분류",
        "apihelp-login-param-name": "계정 이름.",
        "apihelp-login-param-password": "비밀번호.",
        "apihelp-login-example-login": "로그인.",
        "apihelp-move-description": "문서 이동하기.",
+       "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-ignorewarnings": "모든 경고 무시하기",
+       "apihelp-opensearch-description": "OpenSearch 프로토콜을 이용하여 위키 검색하기",
+       "apihelp-opensearch-param-search": "문자열 검색",
+       "apihelp-opensearch-param-limit": "반환할 결과의 최대 수",
+       "apihelp-options-param-reset": "사이트 기본으로 설정 초기화",
+       "apihelp-options-example-reset": "모든 설정 초기화",
+       "apihelp-protect-example-protect": "문서 보호",
+       "apihelp-query+pageswithprop-param-limit": "나타낼 문서의 최대 수입니다.",
+       "apihelp-query+pageswithprop-param-dir": "정렬 순서",
+       "apihelp-query+prefixsearch-param-search": "문자열 검색",
        "api-help-title": "미디어위키 API 도움말",
        "api-help-lead": "이 페이지는 자동으로 생성된 미디어위키 API 도움말 문서입니다.\n\n설명 문서 및 예시: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "메인 모듈",
index 265d0b0..e4b16b0 100644 (file)
@@ -7,6 +7,7 @@
        "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-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 -->",
        "apihelp-main-param-smaxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> en dä Kopp_Reihj <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">HTTP cache control</code> obb esu vill Sekonde. Fähler wähde nimmohls faßjehallde.",
        "apihelp-main-param-maxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> en dä Kopp_Reihj <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">HTTP cache control</code> obb esu vill Sekonde. Fähler wähde nimmohls faßjehallde.",
        "apihelp-main-param-assert": "Ställ sescher, dat dä Metmaacher enjelogg es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> en), udder ene Bot es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">bot</kbd> en).",
@@ -16,6 +17,7 @@
        "apihelp-main-param-uselang": "De schprohch för et Övversäzze vun Täxte un Nohreeschte. En Leß met de Köözelle kam_mer vun dä Sigg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> holle, met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">siprop=languages</kbd>, udder jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> aan, öm dem aktoälle Metmaacher sing eetzde Schprohch ze krijje, udder nemm <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">content</kbd> öm heh dämm Wikki singe Ennhald sing Schprohch ze krijje.",
        "apihelp-block-description": "Ene Metmaacher schpärre.",
        "apihelp-block-param-user": "Däm Nahme vun däm Metmaacher, de <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß udder dä Berätt, dä De Schpärre wells.",
+       "apihelp-block-param-expiry": "De Zigg bes zom Ußloufe. Kam_mer als en Door aanjävve, esu wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">5 months</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2 weeks</kbd>“ un kam_mer als ene Zigg_Pongk aanjävve, esu wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2014-09-18T12:34:56Z</kbd>“, un wam_mer „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">infinite</kbd>“, „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">indefinite</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">never</kbd>“ aanjitt, dohrt di Schpärr för iiwesch.",
        "apihelp-block-param-reason": "Der Schpärrjrond.",
        "apihelp-block-param-anononly": "Bloß de nahmelohse Metmaaacher spärre, alsu donn et nahmelohse Beärbeide vun dä <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß uß verhendere.",
        "apihelp-block-param-nocreate": "Et Neu-Aanmelde verbeede",
        "apihelp-block-param-reblock": "Wann dä Metmaacher als jeschpächd es, donn dat övverschrihve.",
        "apihelp-block-param-watchuser": "Donn de Metmaachersigg un de Klaafsigg dohzoh op mig Oppaßleß säze.",
        "apihelp-block-example-ip-simple": "Donn de <i lang=\"en\" xmL:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß <kbd>192.0.2.5</kbd> för drei ääsch schpärre mem Jrond: <kbd>Eestschlaach</kbd>.",
-       "apihelp-checktoken-param-type": "De Zoot Makkehrong zom Pröhfe.",
-       "apihelp-checktoken-param-token": "De Makkehrong zom Pröhve.",
-       "apihelp-checktoken-param-maxtokenage": "Et jrühßte zojelohße Allder fun dä Makkehrong en Sekonde.",
-       "apihelp-checktoken-example-simple": "Pröhf de Jöltechkeit vun dä Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">csrf</kbd>“.",
+       "apihelp-block-example-user-complex": "Donn dä Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Vandal</kbd>“ för iiwesch schpärre, mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Vandalism</kbd>“, un donn_em neu Zohjäng aanzelähje un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> ze verscheke verbehde.",
+       "apihelp-checktoken-description": "Donn de Jölteschkeid vun enem Makkehrongsschlößel vun „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>“ pröhve.",
+       "apihelp-checktoken-param-type": "De Zoot Makkehrongsschlößel zom Pröhfe.",
+       "apihelp-checktoken-param-token": "Der Makkehrongsschlößel zom Pröhve.",
+       "apihelp-checktoken-param-maxtokenage": "Et jrühßte zojelohße Allder fun däm Makkehrongsschlößel en Sekonde.",
+       "apihelp-checktoken-example-simple": "Pröhf de Jölteschkeid vun däm Makkehrongsschlößel „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">csrf</kbd>“.",
        "apihelp-clearhasmsg-description": "Nemmp de Makkehrong „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hasmsg</code>“ fott vum aktoälle Metmaacher.",
        "apihelp-clearhasmsg-example-1": "Nemm de Makkehrong „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hasmsg</code>“ fott vum aktoälle Metmaacher.",
        "apihelp-compare-description": "Donn de Ongerscheide zwesche zwai Sigge beschtemme.\n\nDo moß derför jeweils en Väsjohn, en Övverschreff för di Sigg, odder ener Sigg iehr Kännong aanjävve, för de beide Sigge.",
-       "apihelp-compare-param-fromtitle": "Der Tettel vun dä eezte Sigg zom verjlihsche.",
+       "apihelp-compare-param-fromtitle": "De Övverschreff vun dä eezte Sigg zom verjlihsche.",
        "apihelp-compare-param-fromid": "De Kännong vun dä eezte Sigg zom verjlihsche.",
        "apihelp-compare-param-fromrev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
-       "apihelp-compare-param-totitle": "Der Tettel vun dä zwaite Sigg zom verjlihsche.",
+       "apihelp-compare-param-totitle": "De Övverschreff vun dä zwaite Sigg zom verjlihsche.",
        "apihelp-compare-param-toid": "De Kännong vun dä zwaite Sigg zom verjlihsche.",
        "apihelp-compare-param-torev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
        "apihelp-compare-example-1": "Fengk de Ongerscheide zwesche dä Väsjohne 1 un 2",
        "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-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-createaccount-param-mailpassword": "Wann heh jädd aanjejovve es, kritt dä Metmaacher e zohfällesch ußjesöhk neu Paßwood aan sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> jescheck.",
        "apihelp-edit-param-minor": "En klein Änderong.",
        "apihelp-edit-param-notminor": "Kein klein Änderong.",
        "apihelp-edit-param-bot": "Makeer heh di Änderog als vun enem Bot jemaat.",
-       "apihelp-edit-param-recreate": "Övverjangk alle Fähler övver di Sigg, die en der Zweschezigg fott jeschneße wohd.",
+       "apihelp-edit-param-basetimestamp": "Dattom un Zigg för de Ußjangs_Väsjohn, di jenumme weed, öm dubbel Beärbeijdonge bemärke ze künne. Di kam_mer övver di Sigg <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]</code> eruß fenge.",
+       "apihelp-edit-param-starttimestamp": "Dattom un Zigg för wann et Beärbeijde loßß jing, di jenumme weed, öm dubbel Beärbeijdonge bemärke ze künne. Di kam_mer övver di Sigg <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"[[Special:ApiHelp/main|curtimestamp]]</code> eruß fenge em Momang, woh mem Beärbeijde bejenne deihjt.",
+       "apihelp-edit-param-recreate": "Övverjangk alle Fähler övver di Sigg, di en der Zweschezigg fott jeschneße wohd.",
        "apihelp-edit-param-createonly": "Donn di Sigg nit ändere, wann se ald doh es.",
        "apihelp-edit-param-nocreate": "Mäld ene Fähler, wann di Sigg nit doh es.",
        "apihelp-edit-param-watch": "Donn di Sigg op dem aktälle Metmaacher sing Oppaßleß.",
        "apihelp-edit-param-unwatch": "schmiiß di Sigg uß heh däm Metmaacher singe oppaßleß.",
        "apihelp-edit-param-watchlist": "Donn en Sigg en däm aktoälle Metmaacher sing Opaßleß enndrahre udder ußdrahre udder donn däm sing Vörenschtällonge nämme udder jaa nix ändere.",
+       "apihelp-edit-param-md5": "De <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Message-Digest Algorithm 5\">MD5</i>-Prööfsomm vum Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</var>“ udder de Parramehtere „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prependtext</var>“ un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1appendtext</var>“ wähde annenannderjehange. Wann se jesaz sin, weed di Ännderong nit jeamaat, wann di Prööfsomm nit schtemmp.",
        "apihelp-edit-param-prependtext": "Donn dä Täx aam Aanfng vun dä Sigg enndrahre. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“.",
        "apihelp-edit-param-appendtext": "Donn dä Täx aam Ängk vun dä Sigg aanhange. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“.\n\nNemm „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$section=new</code>“ ömm ene neuje Affschnedd aanzehange, anschtatt vun heh dämm Parramehter.",
        "apihelp-edit-param-undo": "Donn heh di Väsjohn widder retuhr nämme. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prependtext </code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1appendtext</code>“.",
        "apihelp-edit-param-undoafter": "Donn alle Väsjohne vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1undo </code>“ bes zeläz heh di Väsjohn widder retuhr nämme. Wann nix ennjedrahre es, nämm blohß ein Väsjohn retuhr nämme.",
        "apihelp-edit-param-redirect": "Verfollsch de Ömleidonge automattesch.",
        "apihelp-edit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
+       "apihelp-edit-param-token": "Dä Makkehrongsschlößel suld emmer als der läzde Parramehter jeschek wähde udder winneschsdens noh däm Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1text</var>“.",
        "apihelp-edit-example-edit": "Veränder en Sigg.",
        "apihelp-edit-example-prepend": "Donn <kbd>_&#95;NOTOC_&#95;</kbd> för en Sigg säze.",
        "apihelp-edit-example-undo": "Donn alle Väsjohne vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">13579</code>“ bes zeläz „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">13585</code>“ widder retuhr nämme u en autmatesche Zersamfaßong derför enndrahre.",
        "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-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-paramvalue-prop-modules": "Alle Moduhle vum <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>, di noh de Paaserfonksjuhne en de Ußjahbe vörkumme sulle. Ä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-expandtemplates-paramvalue-prop-jsconfigvars": "Jitt de Varrejahble fun de Einschtällonge vun heh Sigg, di nur för di Sigg johd sin.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Jitt de Varrejahble fun de Einschtällonge vun heh Sigg, di nur för di Sigg johd sin, em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommahd als en Reih vun Zeijsche.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "Dä Ennjahv iere Paaser_Boum em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>_Fommaht.",
        "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äsch vun enem Metmaacher uß.",
+       "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beidrä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-import-param-fullhistory": "För et Empottehre us enem andere Wikki: Donn de jannze Verjangeheid empottehre, nit blohß de aktoälle Väsjohn.",
        "apihelp-import-param-templates": "För et Empottehre us enem andere Wikki: Donn all de nühdejje Schablohne met empottehre.",
        "apihelp-import-param-namespace": "En heh dat Appachtemang emmpotehre. Kam_mer nit mem Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1rootpage</var>“ zersamme bruche.",
-       "apihelp-import-param-rootpage": "Als Ongersigg vun heh dä Sigg empottehre. Weed ävver övverjange, wann dä der Parramehter „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1namespace</kbd>“ derbei aanjejovve es.",
-       "apihelp-import-example-import": "Donn di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[meta:Help:Parserfunctions]]</code>“ en et Appachtemang 100 empottehre, met alle älldere Väsjohne.",
+       "apihelp-import-param-rootpage": "Als Ongersigg vun heh dä Sigg empottehre. Km_mer nit zosamme met däm Parramehter „<varlang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1namespace</var>“ bruche.",
+       "apihelp-import-example-import": "Donn di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[meta:Help:ParserFunctions]]</code>“ en et Appachtemang <code>100</code>empottehre, met alle älldere Väsjohne ennjeschloßße.",
        "apihelp-login-param-name": "Metmaacher_Nahme.",
        "apihelp-login-param-password": "Paßwoot.",
        "apihelp-login-param-domain": "De Domaijn (kann fott bliehve)",
        "apihelp-logout-example-logout": "Donn dä aktoälle Metmaacher ußlogge.",
        "apihelp-managetags-description": "Verwalldongsaufjahbe em Zersammehang met Makkehronge vun Änderonge donn.",
        "apihelp-managetags-param-reason": "Ene Jrond för et Aanlähje, Fottschmiiße, Aanschallde un Ußschallde vun dä Makkehrong, dä mer ävver nit aanjävve moß.",
-       "apihelp-managetags-param-ignorewarnings": "Ov alle Warnonge Ã¶vverjange wöhde sull, die bei dämm Opdracht opkumme.",
+       "apihelp-managetags-param-ignorewarnings": "Ov alle Warnonge Ã¶vverjange wähde sulle, di bei dämm Opdracht opkumme.",
        "apihelp-managetags-example-create": "Donn en Makkehrong aanlähje mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
        "apihelp-managetags-example-delete": "Schmiiß de Makkehrong mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandlaism</kbd>“ fott mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Misspelt</kbd>“.",
        "apihelp-managetags-example-activate": "Donn en Makkehrong aktevehre mem Nahme „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ mem Jrond „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">For use in edit patrolling</kbd>“.",
        "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-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-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-paraminfo-param-helpformat": "Et Fommaht vun de Täxe för Hölp.",
        "apihelp-paraminfo-param-formatmodules": "Leß met de Nahme vun de Moduhle zom Fommatehre (Wäät vum „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“-Parramehter). Nemm schtatt dämm „<varlang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1modules</var>“.",
        "apihelp-paraminfo-example-1": "Zisch Aanjahbe övver <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, un <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-parse-param-summary": "De Zersammefaßong för ze pahse.",
-       "apihelp-parse-param-prop": "Wat för en Schtöcker aan Ennfommazjuhne holle:",
+       "apihelp-parse-param-redirects": "Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1page</var>“ udder „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ obb_en Ömleijdong jesaz es, donn dä follje.",
+       "apihelp-parse-param-prop": "Wat för en Schtöker aan Ennfommazjuhne holle:",
        "apihelp-parse-paramvalue-prop-text": "Jitt dä jepahßde Täx vum Wikkitäx uß.",
        "apihelp-parse-paramvalue-prop-langlinks": "Jitt de Schprohche-Lengks em jepahßde Wikkitäx uß.",
        "apihelp-parse-paramvalue-prop-categories": "Jitt de Saachjroppe em jepahßde Wikkitäx uß.",
        "apihelp-parse-paramvalue-prop-sections": "Jitt de Affschnedde em jepahßde Wikkitäx uß.",
        "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.",
+       "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-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-example-page": "Donn en Sigg pahse.",
        "apihelp-parse-example-text": "Donn Wikkitäx pahse.",
        "apihelp-protect-param-reason": "Der Jrond för et Schöze udder Freijävve.",
        "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-purge-example-generator": "Donn fö de eezte zehn Sigge em Schtanndadd_Appachtemang de zweschejeschpeijscherte Väsjohn fottschmiiße.",
        "apihelp-query-param-prop": "Wat för en Eijeschaffte holle för de affjerohchte Sigge.",
        "apihelp-query-param-list": "Wat för en Leßte holle.",
        "apihelp-query-param-meta": "Wat för en Metta_Dahte ze holle.",
+       "apihelp-query-param-rawcontinue": "Jivv Rühdahte „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">query-continue</var>“ för et Wigger Maache us.",
        "apihelp-query-example-allpages": "Holl Väsjohne vun Sigge, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ bejenne.",
        "apihelp-query+allcategories-description": "Alle Saachjroppe opzälle.",
        "apihelp-query+allcategories-param-from": "De Saachjropp, vun woh aan opzälle.",
        "apihelp-query+allpages-param-prtype": "Bejränz op jeschöz Sigge.",
        "apihelp-query+allpages-param-limit": "Wi vill Sigge zem aanzeihje?",
        "apihelp-query+allpages-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+allpages-param-filterlanglinks": "Blohß Sigge met Schprohchelengks opleßte. Opjepaß: Dat künnt Schprohchelengks övverjonn, di vun Zohsazprojramme beijschtührt wohde sin.",
        "apihelp-query+allpages-example-B": "Zeisch en Leß met Sigge un bejenn mem Bohchschtabe <kbd>B</kbd>.",
        "apihelp-query+allpages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
        "apihelp-query+allpages-example-generator-revisions": "Zeisch der Enhalld vu de eetsde zwai Sigg un bejenn bei <kbd>Re</kbd>.",
        "apihelp-query+allredirects-description": "Alle Ömleidonge op e beschtemmp Appachtemang opleßte.",
        "apihelp-query+allredirects-param-from": "De Övverschreff vun dä Ömleidong, woh de Leß medd ophühre sull.",
        "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, die esu aanfange.",
+       "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-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+allredirects-param-limit": "Wi vill sulle överhoup aanjezeisch wääde?",
        "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-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+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+deletedrevisions-param-limit": "De hühßde Aanzahl Väsjohne för opzeleßte.",
-       "apihelp-query+deletedrevisions-param-prop": "Wat för en Eijeschaffte holle:\n;revid:Deiht de Kännong vun de fottjeschmeße Väsjohn derbei.\n;parentid:Deiht de Kännong vun de vörrejje Väsjohn vun dä Sigg derbei.\n;user:Deiht dä Metmaacher derbei, dä di Väsjohn jemaat hät.\n;userid:Deiht de Kännong vun däm Metmaacher derbei, dä di Väsjohn jemaat hät.\n;comment:Deiht et Väld „{{int:summary}}“ vun dä Väsjohn derbei.\n;parsedcomment:Deiht et jepaaste Väld „{{int:summary}}“ vun dä Väsjohn derbei.\n;minor:Makehronge, wann di Väsjohn en klein Mini_Änderong es.\n;len:Deiht de Läng (Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>) vun dä Väsjohn derbei.\n;sha1: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;content:Deiht der Ennhalld vun dä Väsjohn derbei.\n;tags:Makehronge för di Väsjohn.",
        "apihelp-query+deletedrevisions-example-revids": "Donn de Aanjahbe för de fottjeschmeße Väsjohn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">123456</kbd> holle.",
        "apihelp-query+deletedrevs-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
        "apihelp-query+deletedrevs-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
        "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+fileusage-example-generator": "Holl Aanjahbe övver Sigge, di de Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Example.jpg]].</code>“ bruche",
        "apihelp-query+imageinfo-description": "Jidd Enfommazjuhne övver Datteije un de Verjangeheid vum Huhlahde aan.",
-       "apihelp-query+imageinfo-param-prop": "Wat för en Schtöcker aan Ennfommazjuhne holle:",
+       "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-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-sha1": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm för die Dattei derbei.",
+       "apihelp-query+imageinfo-paramvalue-prop-sha1": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm för di Dattei derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot fun dä Dattei derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot fun däm Minnibelldsche vun dä Dattei derbei. Bruch en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> un dä Parramehter „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1urlwidth</code>“.",
        "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Deiht de Mehdijje_Zoot vun dä Dattei derbei.",
        "apihelp-query+protectedtitles-param-level": "Donn blohß de Övverschreffte vun Sigge met heh dämm Nivoh vum Sigge_Schoz opeleßte.",
        "apihelp-query+protectedtitles-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
        "apihelp-query+protectedtitles-example-simple": "Donn jeschöz Övverschreffte opleßte.",
+       "apihelp-query+protectedtitles-example-generator": "Fengk Lengks op jeschözde Övverschreffte em Houp_Appachemang.",
        "apihelp-query+querypage-param-page": "Dä {{int:specialpage}} iere Name. Opjepaß: De Jruhs- un Kleinschreff schpelld en Roll.",
        "apihelp-query+querypage-param-limit": "De Aanzahl vun Äjeebnesse för zeröck ze jävve",
        "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+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;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": "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-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+redirects-example-simple": "Holl en Leß met Ömleijdonge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ jonn.",
        "apihelp-query+redirects-example-generator": "Holl Ennfommazjuhne övver alle Ömleijdonge op di Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“.",
        "apihelp-query+revisions-paraminfo-singlepageonly": "Kam_mer blohß med en einzel Sigg bruche (mode #2)",
        "apihelp-query+revisions-param-excludeuser": "Väsjohne vun däm Metmaache ußschlehße.",
        "apihelp-query+revisions-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
        "apihelp-query+revisions-param-token": "Wat för en Makkehronge för jehde Väsjohn holle.",
+       "apihelp-query+revisions-example-content": "Holl Dahte med Ennhalld för de läzde Väsjohn vun Övverschreffte \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ un \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
        "apihelp-query+revisions-example-last5": "Holl de läzde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
        "apihelp-query+revisions-example-first5": "Holl de eezde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
        "apihelp-query+revisions-example-first5-after": "Holl de eezde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“, di noh em eezde Mai em Johr 2006 änschtannde sin.",
+       "apihelp-query+revisions-example-first5-not-localhost": "Holl de ehzde Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ di nit vun dämm nahmelohse Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">127.0.0.1</kbd>“ jemaht wohde.",
        "apihelp-query+revisions-example-first5-user": "Holl de eezde fönnef Väsjohne vun de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“, di vum Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki default</kbd>“ aanjelahd wohde.",
+       "apihelp-query+revisions+base-param-prop": "Wat för en Eijeschaffte vun dä Väsjohn holle.",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "Dw Kännong vu dä Väsjohn.",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Dattom un Zigg vun dä Väsjohn.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "Dä Metmaacher, dä di Väsjohn jemaat hät.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "Däm Metmaacher sing Kännong, dä di Väsjohn aanjelaat hät.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Der Ömvang en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> vun dä Väsjohn.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "De <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> Prööfsomm vun dä Väsjohn.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "De Aanmärkong vum Metmaacher för di äsjohn.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Der Täx vun dä Väsjohn.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Makkehronge vun dä Väsjohn.",
        "apihelp-query+revisions+base-param-limit": "Wi vill Väsjohne sulle ußjejovve wähde?",
+       "apihelp-query+revisions+base-param-section": "Holl blohß der Ennhald vun däm Affschnett met heh dä Nommer.",
        "apihelp-query+search-description": "Söhk em jannze Täx.",
-       "apihelp-query+search-param-search": "Söhk noh alle Övverschreffte vun Sigge udder Ennhallde, di dä Wäät han.",
+       "apihelp-query+search-param-search": "Söhk noh alle Övverschreffte vun Sigge udder Ennhallde, woh dä Wäät drop paß. Mer kann heh met besönder Aufjahbe beim Söhke schtälle, jeh nohdämm wadd_em Wikki sing Projramm för et Söhke esu alles kann.",
        "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-limit": "Wi vill Sigge ensjesamp ußjävve?",
        "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-numberingroup": "Donn de Aanzahl Metmaacher en de Jroppe vun Metmaacher opleßte.",
        "apihelp-query+siteinfo-example-simple": "Holl Ennfommazjuhe övver heh di ẞait.",
-       "apihelp-query+tags-param-limit": "De hühßde Aanzahl !!FUZY tags zom opleste.",
-       "apihelp-query+tags-param-prop": "Wat för en Eijschaffte holle:\n;name:Deiht dä Nahme vun dä Makkehrong derbei.\n;displayname:Deiht der Täx vum Wikki för de Makkehrong derbei.\n;description:Deiht dä Beschrievongstäx vun dä Makkehrong derbei.\n;hitcount:Deiht de Aanzahl vun Väsjohne un Enndrähsch em Logbohch derbei, di di Makkehrong han.\n;defined:Jivv aan, ov di Makkehrong övverhoup doh es.\n;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.\n;active:Ov de Makkehrong emmer noch aktihv es.",
+       "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+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-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+transcludedin-description": "Fengk alle Sigge, di di aanjejovve Sigge enneschlehße.",
        "apihelp-rollback-param-pageid": "De Kännong vun dä Sigg för di_j_en vörrejje Väsjohn zeröckzeholle es. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
        "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 mieh Kännonge uß de neuste Änderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
+       "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-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.",
        "apihelp-tag-example-rev": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">vandalism</kbd>“ vun dä Väsjohn met dä Kännong „<kbd>123</kbd>“ fott nämme, der ohne ene Jrond ze nänne.",
        "apihelp-tag-example-log": "Donn de Makkehrong „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">spam</kbd>“ vun dämm Enndrahch met dä Kännong „<kbd>123</kbd>“ em Logbohch fott nämme un als Jrond draaach „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Wrongly applied</kbd>“ enn.",
-       "apihelp-unblock-description": "Don en Sperr för ene Metmaacher ophävve.",
+       "apihelp-unblock-description": "Don en Schpärr för ene Metmaacher ophävve.",
        "apihelp-unblock-param-reason": "Der Jrond för de Schpärr opzehävve.",
-       "apihelp-undelete-param-title": "De Övverschreff vun dä Sigg zum zerök holle.",
+       "apihelp-undelete-param-title": "De Övverschreff vun dä Sigg zom zerök holle.",
        "apihelp-undelete-param-reason": "Der Jrond för et Zerök holle.",
+       "apihelp-undelete-param-watchlist": "Donn di Sigg ohne Bedengonge op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
        "apihelp-undelete-example-page": "Schmiiß de Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ fott.",
        "apihelp-undelete-example-revisions": "Holl zwai Väsjohne vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ zerök.",
        "apihelp-upload-description": "Donn en Dattei huh lahde, udder holl der Zohschtand vun de onfähdesch huhjelahde Datteije .\n\nEt jitt ongerscheidlejje Metohde:\n* Donn de Ennhallde vun de Datteije tiräk huhlahde, övver der Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“.\n* Donn de Datteije en en Aanzahl Rötsche huhlahde, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filesize</var>“, „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1chunk</var>“, un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1offset</var>“.\n* Lohß der ẞööver vum Wikki en Dattei vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> holle, övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1url</var>“.\n* Lohß en Dattei fähdesch huhlahde, di zeläz nit fähdesch wohd, un met Warnonge schtonn jeblevve es övver de Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</var>“.\nOpjepaß: dä „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">POST</code>“-Befähl vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i> moß als e Dattei-Huhlahde aanjeschtüßße wähde, allsu met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">multipart/form-data</code>“, wam_mer dä Parramehter „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1file</var>“ scheck.",
        "apihelp-upload-param-filename": "Zihl-Dateiname.",
+       "apihelp-upload-param-text": "Der aanfänglesche Täx op Sigge för neu aanjelahte Datteije.",
        "apihelp-upload-param-watch": "Op di Sigg heh oppaßße.",
        "apihelp-upload-param-watchlist": "Donn di Sigg op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
        "apihelp-upload-param-ignorewarnings": "Donn alle Warnonge övverjonn.",
        "apihelp-upload-param-file": "Dä Dattei ier Enhallde.",
        "apihelp-upload-param-url": "Der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, öm di Dattei dervun ze holle.",
+       "apihelp-upload-param-sessionkey": "Et sälve wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</code>“, wat mer emmer noch noch bruche kann, weil mer et fröhjer alld ens esu hatte.",
        "apihelp-upload-param-filesize": "De Datteijrühße vum jannze Huhlahde.",
        "apihelp-upload-param-asyncdownload": "Maach dat Holle vun ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> zoh ene andere Zigg.",
        "apihelp-upload-example-url": "Vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> huhlahde.",
        "apihelp-watch-description": "Donn di Sigg en däm aktoälle Metmaacher singe Oppaßless eren udder schmihß se erus.",
        "apihelp-watch-example-watch": "Don di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ en de Oppaßleß.",
        "apihelp-watch-example-unwatch": "Schmiiß di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ uß dä Oppaßleß erus.",
-       "apihelp-json-param-ascii": "Wann aanjejovve, deiht alle nit-\n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"American Standard Code for Information Interchange\">ASCII</i>-Zeijsche met hexadezimahle escape-Sequänze koddehre. Dadd es der Schtandatt, wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">formatversion</var>“ <kbd>1</kbd> es.",
+       "apihelp-format-example-generic": "Jiff wadd_erus kohm em Fommaht $1 us.",
+       "apihelp-json-param-ascii": "Wann aanjejovve, deiht alle nit-<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"American Standard Code for Information Interchange\">ASCII</i>-Zeijsche met hexadezimahle !escape-Sequänze koddehre. Dadd es der Schtandatt, wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">formatversion</var>“ <kbd>1</kbd> es.",
        "apihelp-jsonfm-description": "Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
        "apihelp-none-description": "Donn nix ußjävve.",
        "apihelp-php-description": "Dahte em hengernader jeschrevve <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i>-Fommaht ußjävve.",
        "apihelp-yaml-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"YAML Ain't Markup Language\">YAML</i>-Fommahd ußjävve.",
        "apihelp-yamlfm-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"YAML Ain't Markup Language\">YAML</i>-Fommahd schöhn met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ußjävve.",
        "api-format-title": "Wat et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjohv.",
-       "api-orm-param-props": "De Fällder zom affrohre.",
+       "api-format-prettyprint-header-only-html": "Dat heh es en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>_Daaschtällong un för et Fähersöhke jedaach. Dadd is för Aanwändongsprojramme nit ze bruche.\n\nEn de [[mw:API|complete Dokkemäntazjohn]] un de [[Special:ApiHelp/main|API Hölp_Sigg]] kam_mer doh mih drövver lässe.",
+       "api-orm-param-props": "De Fällder zom Affrohre.",
        "api-orm-param-limit": "De jrühßte Aanzahl vun Reihje zom zeröckjävve.",
        "api-pageset-param-titles": "En Leß vun Övverschreffte för ze beärbeide.",
        "api-pageset-param-pageids": "En Leß vun Kännonge vun Sigge för ze beärbeide.",
        "api-pageset-param-revids": "En Leß vun Kännonge vun Väsjohne för ze beärbeide.",
        "api-help-title": "Hölp för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> vum MehdijaWikki.",
        "api-help-main-header": "Houp_Moduhl",
-       "api-help-flag-deprecated": "Dat Moduhl es nimmieh johd jeligge.",
+       "api-help-flag-deprecated": "Dat Moduhl es nimmih johd jeligge.",
        "api-help-flag-readrights": "Heh da Modhul bruch et Rääsch zum Lässe.",
        "api-help-flag-writerights": "Heh da Modhul bruch et Rääsch zom Schriive.",
-       "api-help-flag-mustbeposted": "Heh da Modhul nemm blohß POST_Opräschd aan.",
-       "api-help-flag-generator": "Heh da Modhul kam_mer als ene Jenerahtor ennsäze.",
+       "api-help-flag-mustbeposted": "Heh dat Modhul nemmp blohß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">POST</code>-Opdrähschd aan.",
+       "api-help-flag-generator": "Heh dat Modhul kam_mer als ene Jenerahtor ennsäze.",
        "api-help-source": "Quäll: $1",
        "api-help-source-unknown": "Quäll: <span class=\"apihelp-unknown\">onbikannt</span>",
        "api-help-license": "Lezänz: [[$1|$2]]",
        "api-help-license-noname": "Lezänz: [[$1|Loor noh dämm Lengk]]",
        "api-help-license-unknown": "Lezänz: <span class=\"apihelp-unknown\">onbikannt</span>",
+       "api-help-parameters": "{{PLURAL:$1|Parramehter|Parramehtere|Parramehter}}:",
        "api-help-param-deprecated": "Meßjevällesch.",
+       "api-help-param-required": "Heh dä Parramehter es nühdesch.",
        "api-help-datatypes-header": "Zoote Dahte",
        "api-help-param-type-limit": "Zoot: en jannze Zahl udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max</kbd>“",
        "api-help-param-type-integer": "Zoot: {{PLURAL:$1|1=en jannze Zahl|2=en Leß met jannze Zahle}}",
        "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-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.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Dä Wäät darref|2=De Wääte dörrve}} nit kleijener wi $2 sin.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Dä Wäät darref|2=De Wääte dörrve}} nit jrühßer wi $3 sin.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Dä Wäät moß|2=De Wääte möße}} nit zwesche $2 un $3 lijje.",
+       "api-help-param-upload": "Moß als Datteij huhjelahde wähde met dä Eijeschaff „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">multipart/form-data</code>“.",
        "api-help-param-multi-separate": "Donn de Wääte met <kbd>|</kbd> derzwesche tränne.",
+       "api-help-param-multi-max": "De jrühßte müjjelesche Zahl es {{PLURAL:$1|$1}}, un {{PLURAL:$2|$2}} för Botprojramme.",
        "api-help-param-default": "Schtandatt: $1",
        "api-help-param-default-empty": "Schtandatt: <span class=\"apihelp-empty\">(läddesch)</span>",
        "api-help-param-disabled-in-miser-mode": "Dadd es wäje em [[mw:Manual:$wgMiserMode|miser mode]] affjeschalldt.",
        "api-help-param-limited-in-miser-mode": "<strong>opjepaß:</strong> Weil der  [[mw:Manual:$wgMiserMode|miser mode]] enjeschalld es, künne heh winnijer wi <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> Äjehpneße ußjejejovve wähde, vör em Wigger_Mache. En Jränzfäll künne et Noll sin.",
-       "api-help-param-direction": "En wälsche Reihjefollsch opleßte:\n;newer:De Ählsde et eez. Opjepaß: „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1start</code>“ moß fröhjer sin wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1end</code>“.\n;older:De Neuste et eez, der Schtanndatt. Opjepaß: „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1start</code>“ moß schpääder sin wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1end</code>“.",
+       "api-help-param-direction": "En wälsche Reihjefollsch opleßte:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">newer</code>:De Ählsde et eez. Opjepaß: „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1start</code>“ moß fröhjer sin wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1end</code>“.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">older</code>:De Neuste et eez, der Schtanndatt. Opjepaß: „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1start</code>“ moß schpääder sin wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1end</code>“.",
        "api-help-param-continue": "Wann mih ze holle es, nemm dat för wigger ze maache.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(nix drövver bikannt)</span>",
        "api-help-examples": "{{PLURAL:$1|Beijschpell|Beijschpelle|Beijschpell}}:",
index f631473..1c79b58 100644 (file)
@@ -28,6 +28,7 @@
        "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-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-feedcontributions-param-month": "Vum Mount (a virdrun).",
        "apihelp-feedrecentchanges-param-hideminor": "Kleng Ännerunge verstoppen.",
        "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
        "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
        "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-user": "Benotzer deen d'Versioun gemaach huet.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Längt (Bytes) vun der Versioun.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) 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+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
        "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
index 9315304..9bf3e4e 100644 (file)
@@ -8,8 +8,8 @@
        "apihelp-main-param-action": "Кое дејство да се изврши.",
        "apihelp-main-param-format": "Формат на изводот.",
        "apihelp-main-param-maxlag": "Максималниот заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код <samp>maxlag</samp> со порака од обликот <samp>Го чекам $host: има заостаток од $lag секунди</samp>.<br />Погл. [[mw:Manual:Maxlag_parameter|Прирачник: Параметар Maxlag]]",
-       "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавитето <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
-       "apihelp-main-param-maxage": "Задајте му олку секунди на заглавитето <code>max-age</code>. Грешките никогаш не се чуваат во меѓускладот.",
+       "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавието за контрола HTTP-меѓускладот <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
+       "apihelp-main-param-maxage": "Задајте му олку секунди на заглавието за контрола HTTP-меѓускладот <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
        "apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено <kbd>user</kbd> или дали го има корисничкото право на бот, ако е зададено <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
        "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во резултатите.",
@@ -33,6 +33,8 @@
        "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Мора да се даде бројот на преработката, насловот на страницата или пак нејзина назнака за „од“ и за „на“.",
@@ -73,6 +75,7 @@
        "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-expandtemplates-param-title": "Наслов на страница.",
        "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
        "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
-       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;properties: Својства на страницата определени од проширени волшебни зборови во викитекстот.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+       "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Проширениот викитекст.",
        "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
        "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Прошири го викитекстот <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
        "apihelp-import-param-namespace": "Увези во овој именски простор. Се наметнува врз параметарот <kbd>$1rootpage</kbd>.",
        "apihelp-import-param-rootpage": "Увези како потстраница на страницава. Се занемарува ако е укажан параметарот <kbd>$1namespace</kbd>.",
-       "apihelp-import-example-import": "Увези [[meta:Help:Parserfunctions]] во именскиот простор 100 со целата историја.",
+       "apihelp-import-example-import": "Увези [[meta:Help:ParserFunctions]] во именскиот простор 100 со целата историја.",
        "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
        "apihelp-login-param-name": "Корисничко име.",
        "apihelp-login-param-password": "Лозинка.",
index da8b906..41443c6 100644 (file)
@@ -8,15 +8,17 @@
                        "Valhallasw",
                        "Sikjes",
                        "Macofe",
-                       "SPQRobin"
+                       "SPQRobin",
+                       "HanV",
+                       "Rangekill"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentatie]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:API:Errors_and_warnings|API: Errors and warnings]] voor meer informatie.",
        "apihelp-main-param-action": "Welke handeling uit te voeren.",
        "apihelp-main-param-format": "De opmaak van de uitvoer.",
        "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter er voor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In het geval van buitensporige vertraging, wordt de foutcode <samp>maxlag</samp> teruggegeven met een bericht als <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Zie [[mw:Manual:Maxlag_parameter|Handboek: Maxlag parameter]] voor mee informatie.",
-       "apihelp-main-param-smaxage": "Stelt de header \"<code>s-maxage</code>\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
-       "apihelp-main-param-maxage": "Stelt de header \"<code>max-age</code>\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-main-param-smaxage": "Stelt de \"<code>s-maxage</code>\" HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+       "apihelp-main-param-maxage": "Stelt de <code>max-age</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
        "apihelp-main-param-assert": "Controleer of de gebruiker is aangemeld als <kbd>user</kbd> is meegegeven, en of de gebruiker het robotgebruikersrecht heeft als <kbd>bot</kbd> is meegegeven.",
        "apihelp-main-param-requestid": "Elke waarde die hier gegeven wordt, wordt aan het antwoord toegevoegd. Dit kan gebruikt worden om verzoeken te onderscheiden.",
        "apihelp-main-param-servedby": "Voeg de hostnaam van de server die de aanvraag heeft afgehandeld toe aan het antwoord.",
@@ -36,8 +38,8 @@
        "apihelp-edit-param-bot": "Markeer deze bewerking als bot.",
        "apihelp-edit-param-createonly": "Bewerk de pagina niet als die al bestaat.",
        "apihelp-edit-param-nocreate": "Geef een foutmelding als de pagina niet bestaat.",
-       "apihelp-edit-param-watch": "Voeg de pagina toe aan je volglijst.",
-       "apihelp-edit-param-unwatch": "Verwijder de pagina van je volglijst.",
+       "apihelp-edit-param-watch": "Voeg de pagina toe aan je huidige volglijst.",
+       "apihelp-edit-param-unwatch": "Verwijder de pagina van je huidige volglijst.",
        "apihelp-edit-example-edit": "Pagina bewerken",
        "apihelp-emailuser-description": "Gebruiker e-mailen.",
        "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
        "apihelp-login-param-domain": "Domein (optioneel).",
        "apihelp-login-example-login": "Aanmelden",
        "apihelp-move-description": "Pagina hernoemen.",
+       "apihelp-move-param-watch": "Pagina en de omleiding toevoegen aan de volglijst van de huidige gebruiker.",
+       "apihelp-move-param-unwatch": "Verwijder de pagina en de doorverwijzing van de volglijst van de huidige gebruiker.",
+       "apihelp-move-param-watchlist": "De pagina onvoorwaardelijk toevoegen aan of verwijderen van de volglijst van de huidige gebruiker, gebruik voorkeuren of verander het volgen niet.",
+       "apihelp-move-param-ignorewarnings": "Eventuele waarschuwingen negeren.",
+       "apihelp-move-example-move": "Hernoem <kbd>Badtitle</kbd> naar <kbd>Goodtitle</kbd> zonder een doorverwijzing te laten staan.",
+       "apihelp-opensearch-description": "Zoeken in de wiki met het OpenSearchprotocol.",
+       "apihelp-opensearch-param-search": "Zoektekst.",
+       "apihelp-opensearch-param-limit": "Het maximaal aantal weer te geven resultaten.",
+       "apihelp-opensearch-param-namespace": "Te doorzoeken naamruimten.",
+       "apihelp-opensearch-param-suggest": "Niets doen als <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> onwaar is.",
+       "apihelp-opensearch-param-redirects": "Hoe om te gaan met doorverwijzingen:\n;return:Geef de doorverwijzing terug.\n;resolve:Geef de doelpagina terug. Kan minder dan de limiet $1 resultaten teruggeven.\nOm historische redenen is de standaardinstelling \"return\" voor <code>$1format=json<code> en \"resolve\" voor andere formaten.",
+       "apihelp-opensearch-param-format": "Het uitvoerformaat.",
+       "apihelp-opensearch-param-warningsaserror": "Als er waarschuwingen zijn met <kbd>format=json</kbd>, geef dan een API-fout terug in plaats van deze te negeren.",
+       "apihelp-opensearch-example-te": "Pagina's vinden die beginnen met <kbd>Te</kbd>.",
+       "apihelp-options-description": "Voorkeuren van de huidige gebruiker wijzigen.\n\nAlleen opties die zijn geregistreerd in core of in een van de geïnstalleerde uitbreidingen, of opties met de toetsen aangeduid met \"userjs-\" (bedoeld om te worden gebruikt door gebruikersscripts), kunnen worden ingesteld.",
+       "apihelp-options-param-reset": "Zet de voorkeuren terug naar de standaard van de website.",
+       "apihelp-options-param-resetkinds": "Lijst van de optiestypes die opnieuw ingesteld worden wanneer de optie <var>$1reset</var> is ingesteld.",
+       "apihelp-options-param-change": "Lijst van wijzigingen, opgemaakt als <kbd>naam=waarde</kbd> (bijvoorbeeld <kbd>skin=vector</kbd>). De waarde kan geen sluistekens bevatten. Als er geen waarde wordt opgegeven (zelfs niet een is-gelijk teken), bijvoorbeeld, <kbd>optienaam|otheroption|...</kbd>, wordt de optie ingesteld op de standaardwaarde.",
+       "apihelp-options-param-optionname": "Een naam van een optie die moet worden ingesteld op de waarde gegeven door <var>$1optiewaarde</var>.",
+       "apihelp-options-param-optionvalue": "Een waarde van de optie opgegeven door <var>$1optienaam</var>, kan sluistekens (verticale streepjes) bevatten.",
+       "apihelp-options-example-reset": "Alle voorkeuren opnieuw instellen.",
+       "apihelp-options-example-change": "Voorkeuren veranderen voor <kbd>skin</kbd> en <kbd>hideminor</kbd>.",
        "apihelp-parse-example-page": "Een pagina parseren.",
        "apihelp-parse-example-text": "Wikitext parseren.",
        "apihelp-parse-example-summary": "Een samenvatting parseren.",
diff --git a/includes/api/i18n/or.json b/includes/api/i18n/or.json
new file mode 100644 (file)
index 0000000..d7d0295
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "ଶିତିକଣ୍ଠ ଦାଶ"
+               ]
+       },
+       "apihelp-main-param-action": "କେଉଁ କାମ କରାଯିବ ।",
+       "apihelp-main-param-format": "ଆଉଟପୁଟ୍‌ର ଫର୍ମାଟ ।",
+       "apihelp-block-description": "ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କୁ ବ୍ଲକ କରନ୍ତୁ ।",
+       "apihelp-block-param-reason": "ବ୍ଲକ କରିବାର କାରଣ ।",
+       "apihelp-block-param-nocreate": "ଆକାଉଣ୍ଟ ତିଆରି ହେବାକୁ ପ୍ରତିରୋଧ କରନ୍ତୁ ।",
+       "apihelp-createaccount-param-name": "ବ୍ୟବହାରକାରୀଙ୍କ ନାମ",
+       "apihelp-delete-description": "ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ"
+}
index 918cdca..bf04b57 100644 (file)
        "apihelp-main-param-format": "Format danych wyjściowych.",
        "apihelp-main-param-maxlag": "Maksymalne opóźnienie mogą być używane kiedy MediaWiki jest zainstalowana w klastrze zreplikowanej bazy danych. By zapisać działania powodujące większe opóźnienie replikacji, ten parametr może wymusić czekanie u klienta, dopóki opóźnienie replikacji jest mniejsze niż określona wartość. W przypadku nadmiernego opóźnienia, kod błędu <samp>maxlag</samp> jest zwracany z wiadomością jak <samp>Oczekiwanie na $host: $lag sekund opóźnienia</samp>.<br />Zobacz [[mw:Manual:Maxlag_parameter|Podręcznik:Parametr Maxlag]] by uzyskać więcej informacji.",
        "apihelp-main-param-assert": "Sprawdź, czy użytkownik jest zalogowany jeżeli jest ustawiony na <kbd>użytkownik</kbd>, lub ma prawa bota jeśli <kbd>bot</kbd>.",
+       "apihelp-main-param-curtimestamp": "Dołącz obecny znacznik czasu do wyniku.",
        "apihelp-block-description": "Zablokuj użytkownika.",
        "apihelp-block-param-user": "Nazwa użytkownika, adres IP lub zakres adresów IP, które chcesz zablokować.",
        "apihelp-block-param-reason": "Powód blokady.",
+       "apihelp-block-param-anononly": "Blokuj tylko anonimowych użytkowników (blokuje anonimowe edycje z tego adresu IP).",
        "apihelp-block-param-nocreate": "Zapobiegnij utworzeniu konta.",
+       "apihelp-block-param-autoblock": "Zablokuj ostatni adres IP tego użytkownika i automatycznie wszystkie kolejne, z których będzie się logował.",
+       "apihelp-block-param-reblock": "Jeżeli ten użytkownik jest już zablokowany, nadpisz blokadę.",
        "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz ich strony dyskusji.",
        "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni za <kbd>Pierwszy atak</kbd>.",
        "apihelp-block-example-user-complex": "Zablokuj użytkownika <kbd>Vandal</kbd> na zawsze za <kbd>Vandalism</kbd> i uniemożliwij utworzenie nowego konta oraz wysyłanie emaili.",
        "apihelp-compare-param-torev": "Druga wersja do porównania.",
        "apihelp-createaccount-description": "Utwórz nowe konto.",
        "apihelp-createaccount-param-name": "Nazwa użytkownika",
+       "apihelp-createaccount-param-password": "Hasło (ignorowane jeśli <var>$1mailpassword</var> jest ustawione).",
        "apihelp-createaccount-param-domain": "Domena uwierzytelniania zewnętrznego (opcjonalnie).",
        "apihelp-createaccount-param-token": "Token tworzenia konta uzyskany w pierwszym zapytaniu.",
        "apihelp-createaccount-param-email": "Adres email użytkownika (opcjonalne).",
        "apihelp-createaccount-param-realname": "Prawdziwe imię i nazwisko użytkownika (opcjonalne).",
        "apihelp-createaccount-param-reason": "Opcjionalny powód tworzenia konta (aby został umieszczony w logu).",
        "apihelp-createaccount-example-pass": "Utwórz użytkownika <kbd>testuser</kbd> z hasłem <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Utwórz użytkownika <kbd>testmailuser</kbd> i wyślij losowo wygenerowane hasło na emaila.",
        "apihelp-delete-description": "Usuń stronę.",
+       "apihelp-delete-param-reason": "Powód usuwania. Jeśli pozostaiwsz to pole puste, zostanie on wygenerowany automatycznie.",
        "apihelp-delete-param-watch": "Dodaj stronę do obecnej listy obserwowanych.",
        "apihelp-delete-param-unwatch": "Usuń stronę z obecnej listy obserwowanych.",
        "apihelp-delete-example-simple": "Usuń <kbd>Stronę Główną</kbd>.",
+       "apihelp-delete-example-reason": "Usuń <kbd>Stronę Główną</kbd> z powodem <kbd>Przygotowania do przenoszenia</kbd>.",
        "apihelp-disabled-description": "Ten moduł został wyłączony.",
        "apihelp-edit-description": "Utwórz i edytuj strony.;",
+       "apihelp-edit-param-section": "Numer sekcji. <kbd>0</kbd> dla górnej sekcji, <kbd>new</kbd> dla nowej sekcji.",
        "apihelp-edit-param-sectiontitle": "Tytuł nowej sekcji.",
        "apihelp-edit-param-text": "Zawartość strony.",
        "apihelp-edit-param-tags": "Zmień tagi do przypisania do tej edycji.",
        "apihelp-expandtemplates-description": "Rozwiń wszystkie szablony w wikitexcie.",
        "apihelp-expandtemplates-param-title": "Tytuł strony.",
        "apihelp-expandtemplates-param-text": "Wikitext do przekonwertowania.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Rozszerzony wikitext.",
        "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-feedcontributions-param-toponly": "Pokazuj tylko edycje będące ostatnią zmianą strony.",
        "apihelp-feedcontributions-param-newonly": "Pokazuj tylko edycje tworzące stronę.",
+       "apihelp-feedcontributions-param-showsizediff": "Pokaż różnicę rozmiaru między wersjami.",
        "apihelp-feedrecentchanges-param-namespace": "Przestrzeń nazw, do której ograniczone są wyniki.",
        "apihelp-feedrecentchanges-param-invert": "Wszystkie przestrzenie nazw oprócz wybranej.",
+       "apihelp-feedrecentchanges-param-days": "Dni, do których ograniczone są wyniki.",
        "apihelp-feedrecentchanges-param-limit": "Maksymalna liczba zwracanych wyników.",
+       "apihelp-feedrecentchanges-param-from": "Pokaż zmiany od tamtej chwili.",
        "apihelp-feedrecentchanges-param-hideminor": "Ukryj drobne zmiany.",
        "apihelp-feedrecentchanges-param-hidebots": "Ukryj zmiany zrobione przez boty.",
        "apihelp-feedrecentchanges-param-hideanons": "Ukryj zmiany zrobione przez anonimowych użytkowników.",
        "apihelp-filerevert-description": "Przywróć plik do starej wersji.",
        "apihelp-filerevert-param-filename": "Docelowa nazwa pliku bez prefiksu Plik:",
        "apihelp-filerevert-param-comment": "Prześlij komentarz.",
+       "apihelp-filerevert-example-revert": "Przywróć <kbd>Wiki.png</kbd> do wersji z <kbd>2011-03-05T15:27:40Z</kbd>.",
        "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
        "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości <var>action</var> i <var>format</var> parametry, lub <kbd>main</kbd>). Może określić podmoduły z <kbd>+</kbd>.",
        "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
+       "apihelp-help-param-helpformat": "Format wyjściowy pomocy.",
+       "apihelp-help-param-toc": "Dołącz spis treści do wyjściowego HTML.",
        "apihelp-help-example-main": "Pomoc dla modułu głównego",
        "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
        "apihelp-help-example-help": "Pomoc dla modułu pomocy",
+       "apihelp-help-example-query": "Pomoc dla dwóch podmodułów zapytań.",
        "apihelp-imagerotate-description": "Obróć jeden lub wiecej obrazków.",
        "apihelp-imagerotate-param-rotation": "Stopni w prawo, aby obrócić zdjęcie.",
+       "apihelp-imagerotate-example-simple": "Obróć <kbd>Plik:Przykład.png</kbd> o <kbd>90</kbd> stopni.",
+       "apihelp-imagerotate-example-generator": "Obróć wszystkie obrazki w <kbd>Kategorii:Flip</kbd> o <kbd>180</kbd> stopni.",
        "apihelp-import-param-summary": "Podsumowanie importu.",
        "apihelp-import-param-xml": "Przesłany plik XML.",
        "apihelp-import-param-interwikisource": "Dla importów mediawiki: źródłowa wiki.",
        "apihelp-import-param-interwikipage": "Dla importów interwiki: strona do importu.",
        "apihelp-import-param-fullhistory": "Dla importów interwiki: importuj całą historię, a nie tylko obecną wersję.",
        "apihelp-import-param-templates": "Dla importów mediawiki: importuj też wszystkie użyte szablony.",
+       "apihelp-import-param-namespace": "Importuj do tej przestrzeni nazw. Nie może być użyte razem z <var>$1rootpage</var>.",
+       "apihelp-import-param-rootpage": "Importuj jako podstronę tej strony. Nie może być użyte razem z <var>$1namespace</var>.",
        "apihelp-login-param-name": "Nazwa użytkownika.",
        "apihelp-login-param-password": "Hasło.",
        "apihelp-login-param-domain": "Domena (opcjonalnie).",
        "apihelp-login-example-login": "Zaloguj się",
        "apihelp-logout-description": "Wyloguj i wyczyść dane sesji.",
        "apihelp-logout-example-logout": "Wyloguj obecnego użytkownika.",
+       "apihelp-managetags-param-reason": "Opcjonalny powód utworzenia, usunięcia, włączenia lub wyłączenia znacznika.",
        "apihelp-managetags-param-ignorewarnings": "Czy zignorować ostrzeżenia, które pojawiają się w trakcie operacji.",
        "apihelp-move-description": "Przenieś stronę.",
        "apihelp-move-param-reason": "Powód zmiany nazwy.",
        "apihelp-options-param-reset": "Resetuj preferencje do domyślnych.",
        "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-example-page": "Przeanalizuj stronę.",
+       "apihelp-parse-example-text": "Analizuj wikitext.",
+       "apihelp-parse-example-summary": "Analizuj powód.",
        "apihelp-patrol-description": "Sprawdź stronę lub edycję.",
+       "apihelp-patrol-param-rcid": "ID ostatnich zmian do patrolowania.",
        "apihelp-patrol-param-revid": "Numer edycji do sprawdzenia.",
        "apihelp-patrol-example-rcid": "Sprawdź ostatnią zmianę.",
        "apihelp-patrol-example-revid": "Sprawdź edycje.",
        "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-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-purge-param-forcelinkupdate": "Uaktualnij tabele linków.",
+       "apihelp-purge-example-generator": "Przeczyść pierwsze 10 stron w przestrzeni głównej.",
        "apihelp-query+allcategories-description": "Emuluj wszystkie kategorie.",
        "apihelp-query+allcategories-param-dir": "Kierunek sortowania.",
        "apihelp-query+allcategories-param-limit": "Liczba kategorii do zwórcenia.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Może być użyte tylko z <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-param-from": "Zacznij nasłuchiwanie na tym tytule.",
+       "apihelp-query+alldeletedrevisions-param-to": "Skończ nasłuchiwanie na tym tytule.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
+       "apihelp-query+alldeletedrevisions-param-user": "Pokazuj tylko zmiany dokonane przez tego użytkownika.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Nie pokazuj zmian dokonanych przez tego użytkownika.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Listuj tylko strony z tej przestrzeni nazw.",
+       "apihelp-query+allfileusages-param-limit": "Łączna ilość obiektów do zwrócenia.",
        "apihelp-query+allfileusages-example-unique": "Lista unikatowych tytułów plików.",
+       "apihelp-query+allimages-param-sort": "Sortowanie według właściwości.",
        "apihelp-query+allimages-example-recent": "Pokaż listę ostatnio przesłanych plików, podobnie do [[Special:NewFiles]].",
        "apihelp-query+allimages-example-mimetypes": "Pokaż listę plików z typem MIME <kbd>image/png</kbd> lub <kbd>image/gif</kbd>",
        "apihelp-query+alllinks-param-namespace": "Przestrzeń nazw do emulacji.",
        "apihelp-query+alllinks-param-limit": "Łączna ilość obiektów do zwrócenia.",
+       "apihelp-query+alllinks-example-unique": "Lista unikatowych tytułów plików.",
        "apihelp-query+allmessages-param-prop": "Właściwości do odczytu.",
+       "apihelp-query+allmessages-param-prefix": "Zwróć wiadomości z tym prefixem.",
        "apihelp-query+allpages-param-prtype": "Ogranicz tylko do zabezpieczonych stron.",
        "apihelp-query+allpages-param-limit": "Ilość stron do zwrócenia.",
        "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
        "apihelp-query+allredirects-description": "Lista wszystkich przekierowań do przestrzeni nazw.",
        "apihelp-query+allredirects-param-namespace": "Przestrzeń nazw do emulacji.",
+       "apihelp-query+allredirects-param-limit": "Łączna ilość obiektów do zwrócenia.",
        "apihelp-query+alltransclusions-param-namespace": "Przestrzeń nazw do emulacji.",
        "apihelp-query+allusers-param-witheditsonly": "Tylko użytkownicy, którzy edytowali.",
        "apihelp-query+backlinks-param-namespace": "Przestrzeń nazw do emulacji.",
+       "apihelp-query+blocks-param-ids": "Lista zablokowanych ID do wylistowania (opcjonalne).",
+       "apihelp-query+blocks-param-users": "Lista użytkowników do wyszukania (opcjonalne).",
        "apihelp-query+blocks-param-limit": "Maksymalna liczba blokad do wylistowania.",
        "apihelp-query+blocks-example-simple": "Listuj blokady.",
        "apihelp-query+categories-param-limit": "Ilość kategorii do zwrócenia.",
        "apihelp-query+deletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
        "apihelp-query+deletedrevisions-param-user": "Pokazuj tylko zmiany dokonane przez tego użytkownika.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Nie pokazuj zmian dokonanych przez tego użytkownika.",
-       "apihelp-query+deletedrevisions-param-limit": "Maksymalna ilość zmian do wylistowania.",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Tryb|Tryby}}: $2",
+       "apihelp-query+deletedrevs-param-unique": "Liatuj tylko jedną edycję dla każdej strony.",
        "apihelp-query+deletedrevs-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
        "apihelp-query+deletedrevs-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
        "apihelp-query+deletedrevs-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
        "apihelp-query+deletedrevs-param-namespace": "Listuj tylko strony z tej przestrzeni nazw.",
        "apihelp-query+deletedrevs-param-limit": "Maksymalna ilość zmian do wylistowania.",
        "apihelp-query+duplicatefiles-example-generated": "Szukaj duplikatów wszystkich plików.",
+       "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-example-simple": "Pokaż listę wszystkich usuniętych plików.",
        "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+imageinfo-paramvalue-prop-sha1": "Dodaj sumę kontrolną SHA-1 dla tego pliku.",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "Dodaje typ MIME pliku.",
+       "apihelp-query+imageinfo-param-urlheight": "Podobne do $1urlwidth.",
        "apihelp-query+images-param-limit": "Ilość plików do zwrócenia.",
+       "apihelp-query+info-description": "Pokaż podstawowe informacje o stronie.",
        "apihelp-query+info-paramvalue-prop-watchers": "Liczba obserwujących, jeśli jest to dozwolone.",
        "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefix interwiki.",
        "apihelp-query+links-param-limit": "Ilość linków do zwrócenia.",
        "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+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+prefixsearch-param-offset": "Liczba wyników do pominięcia.",
+       "apihelp-query+protectedtitles-description": "Lista wszystkich tytułów zabezpieczonych przed tworzeniem.",
+       "apihelp-query+protectedtitles-param-namespace": "Listuj tylko strony z tych przestrzeni nazw.",
+       "apihelp-query+protectedtitles-param-limit": "Łączna liczba stron do zwrócenia.",
+       "apihelp-query+protectedtitles-example-simple": "Lista chronionych nagłówków",
+       "apihelp-query+recentchanges-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
+       "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-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-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-description": "Wykonaj wyszukiwanie pełnotekstowe.",
+       "apihelp-query+search-param-info": "Które metadane zwrócić.",
+       "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-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+tags-example-simple": "Lista dostęnych tagów.",
+       "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-tag-param-reason": "Powód zmiany.",
        "apihelp-unblock-param-reason": "Powód odblokowania.",
        "apihelp-userrights-param-reason": "Powód zmiany.",
        "apihelp-dbg-description": "Dane wyjściowe w formacie <code>var_export()</code> (funkcji PHP).",
        "apihelp-dbgfm-description": "Dane wyjściowe w formacie <code>var_export()</code> (funkcji PHP) (prawidłowo wyświetlane w HTML).",
-       "apihelp-dump-description": "Dane wyjściowe w formacie <code>var_dump()</code> (funkcji PHP).",
-       "apihelp-dumpfm-description": "Dane wyjściowe w formacie <code>var_dump()</code> (funkcji PHP) (prawidłowo wyświetlane w HTML).",
        "apihelp-json-description": "Dane wyjściowe w formacie JSON.",
        "apihelp-jsonfm-description": "Dane wyjściowe w formacie JSON (prawidłowo wyświetlane w HTML).",
        "apihelp-php-description": "Dane wyjściowe w serializowany formacie PHP.",
        "apihelp-phpfm-description": "Dane wyjściowe w serializowanym formacie PHP (prawidłowo wyświetlane w HTML).",
        "apihelp-txt-description": "Dane wyjściowe w formacie <code>print_r()</code> (funkcji PHP).",
        "apihelp-txtfm-description": "Dane wyjściowe w formacie <code>print_r()</code> (funkcji PHP) (prawidłowo wyświetlane w HTML).",
-       "apihelp-wddx-description": "Dane wyjściowe w formacie WDDX.",
-       "apihelp-wddxfm-description": "Dane wyjściowe w formacie WDDX (prawidłowo wyświetlane w HTML).",
        "apihelp-xml-description": "Dane wyjściowe w formacie XML.",
        "apihelp-xml-param-xslt": "Jeśli określony, dodaje &lt;xslt&gt; jako arkusz styli. Powinna to być strona wiki w przestrzeni nazw MediaWiki, której nazwy stron kończą się na \".xsl\".",
        "apihelp-xmlfm-description": "Dane wyjściowe w formacie XML (prawidłowo wyświetlane w HTML).",
index c8f1ffd..49df26b 100644 (file)
@@ -21,6 +21,8 @@
        "apihelp-query+search-example-simple": "د <kbd>مانا</kbd> پلټل.",
        "apihelp-query+search-example-text": "د <kbd>مانا</kbd> لپاره متنونه پلټل.",
        "apihelp-tag-param-reason": "د بدلون سبب.",
+       "apihelp-upload-param-watch": "مخ کتل.",
+       "apihelp-upload-param-file": "د دوتنې مېنځپانگه.",
        "apihelp-userrights-param-user": "کارن نوم.",
        "apihelp-userrights-param-userid": "کارن پېژند.",
        "api-help-source": "سرچينه: $1",
index c6ac8fd..70d54a6 100644 (file)
@@ -8,7 +8,9 @@
                        "McDutchie",
                        "Raymond",
                        "Anomie",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Amire80",
+                       "Siebrand"
                ]
        },
        "apihelp-main-description": "{{doc-apihelp-description|main}}",
        "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
        "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
        "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}\n{{doc-important|Do not translate <code><<nowiki />nowiki>{{<nowiki />REVISIONID}}<<nowiki />/nowiki></code>}}",
-       "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
+       "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop|paramvalues=1}}",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "{{doc-apihelp-paramvalue|expandtemplates|prop|wikitext}}",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "{{doc-apihelp-paramvalue|expandtemplates|prop|categories}}",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "{{doc-apihelp-paramvalue|expandtemplates|prop|properties}}",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "{{doc-apihelp-paramvalue|expandtemplates|prop|volatile}}",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "{{doc-apihelp-paramvalue|expandtemplates|prop|ttl}}",
+       "apihelp-expandtemplates-paramvalue-prop-modules": "{{doc-apihelp-paramvalue|expandtemplates|prop|modules}}",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "{{doc-apihelp-paramvalue|expandtemplates|prop|jsconfigvars}}",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "{{doc-apihelp-paramvalue|expandtemplates|prop|encodedjsconfigvars}}",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|expandtemplates|prop|parsetree}}",
        "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
        "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
        "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
        "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
        "apihelp-filerevert-description": "{{doc-apihelp-description|filerevert}}",
        "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
-       "apihelp-filerevert-param-comment": "{{doc-apihelp-param|filerevert|comment}}",
+       "apihelp-filerevert-param-comment": "Translate as \"a comment about the upload\".\n\n{{doc-apihelp-param|filerevert|comment}}",
        "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
        "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
        "apihelp-help-description": "{{doc-apihelp-description|help}}",
        "apihelp-parse-paramvalue-prop-properties": "{{doc-apihelp-paramvalue|parse|prop|properties}}",
        "apihelp-parse-paramvalue-prop-limitreportdata": "{{doc-apihelp-paramvalue|parse|prop|limitreportdata}}",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "{{doc-apihelp-paramvalue|parse|prop|limitreporthtml}}",
+       "apihelp-parse-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|parse|prop|parsetree|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
        "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
        "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
        "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
        "apihelp-query-param-export": "{{doc-apihelp-param|query|export}}",
        "apihelp-query-param-exportnowrap": "{{doc-apihelp-param|query|exportnowrap}}",
        "apihelp-query-param-iwurl": "{{doc-apihelp-param|query|iwurl}}",
-       "apihelp-query-param-continue": "{{doc-apihelp-param|query|continue}}",
        "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
        "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
        "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
        "apihelp-query+deletedrevisions-param-tag": "{{doc-apihelp-param|query+deletedrevisions|tag}}",
        "apihelp-query+deletedrevisions-param-user": "{{doc-apihelp-param|query+deletedrevisions|user}}",
        "apihelp-query+deletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+deletedrevisions|excludeuser}}",
-       "apihelp-query+deletedrevisions-param-limit": "{{doc-apihelp-param|query+deletedrevisions|limit}}",
-       "apihelp-query+deletedrevisions-param-prop": "{{doc-apihelp-param|query+deletedrevisions|prop}}",
        "apihelp-query+deletedrevisions-example-titles": "{{doc-apihelp-example|query+deletedrevisions}}",
        "apihelp-query+deletedrevisions-example-revids": "{{doc-apihelp-example|query+deletedrevisions}}",
        "apihelp-query+deletedrevs-description": "{{doc-apihelp-description|query+deletedrevs}}",
        "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
        "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
        "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
-       "apihelp-query+revisions+base-param-prop": "{{doc-apihelp-param|query+revisions+base|prop|description=the \"prop\" parameter to revision querying modules|noseealso=1}}",
+       "apihelp-query+revisions+base-param-prop": "{{doc-apihelp-param|query+revisions+base|prop|description=the \"prop\" parameter to revision querying modules|noseealso=1|paramvalues=1}}",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+revisions+base|prop|ids}}",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+revisions+base|prop|flags}}",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+revisions+base|prop|timestamp}}",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+revisions+base|prop|user}}",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+revisions+base|prop|userid}}",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+revisions+base|prop|size}}",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+revisions+base|prop|sha1}}",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "{{doc-apihelp-paramvalue|query+revisions+base|prop|contentmodel}}",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+revisions+base|prop|comment}}",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+revisions+base|prop|parsedcomment}}",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "{{doc-apihelp-paramvalue|query+revisions+base|prop|content}}",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+revisions+base|prop|tags}}",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|query+revisions+base|prop|parsetree|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
        "apihelp-query+revisions+base-param-limit": "{{doc-apihelp-param|query+revisions+base|limit|description=the \"limit\" parameter to revision querying modules|noseealso=1}}",
        "apihelp-query+revisions+base-param-expandtemplates": "{{doc-apihelp-param|query+revisions+base|expandtemplates|description=the \"expandtemplates\" parameter to revision querying modules|noseealso=1}}",
        "apihelp-query+revisions+base-param-generatexml": "{{doc-apihelp-param|query+revisions+base|generatexml|description=the \"generatexml\" parameter to revision querying modules|noseealso=1}}",
        "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|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+watchlist-param-user": "{{doc-apihelp-param|query+watchlist|user}}",
        "apihelp-query+watchlist-param-excludeuser": "{{doc-apihelp-param|query+watchlist|excludeuser}}",
        "apihelp-query+watchlist-param-limit": "{{doc-apihelp-param|query+watchlist|limit}}",
-       "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop}}",
+       "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop|paramvalues=1}}",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+watchlist|prop|ids}}",
+       "apihelp-query+watchlist-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+watchlist|prop|title}}",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+watchlist|prop|flags}}",
+       "apihelp-query+watchlist-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+watchlist|prop|user}}",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+watchlist|prop|userid}}",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+watchlist|prop|comment}}",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+watchlist|prop|parsedcomment}}",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+watchlist|prop|timestamp}}",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "{{doc-apihelp-paramvalue|query+watchlist|prop|patrol}}",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "{{doc-apihelp-paramvalue|query+watchlist|prop|sizes}}",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "{{doc-apihelp-paramvalue|query+watchlist|prop|notificationtimestamp}}",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "{{doc-apihelp-paramvalue|query+watchlist|prop|loginfo}}",
        "apihelp-query+watchlist-param-show": "{{doc-apihelp-param|query+watchlist|show}}",
        "apihelp-query+watchlist-param-type": "{{doc-apihelp-param|query+watchlist|type}}",
        "apihelp-query+watchlist-param-owner": "{{doc-apihelp-param|query+watchlist|owner}}",
        "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
        "apihelp-dbg-description": "{{doc-apihelp-description|dbg|seealso=* {{msg-mw|apihelp-dbgfm-description}}}}",
        "apihelp-dbgfm-description": "{{doc-apihelp-description|dbgfm|seealso=* {{msg-mw|apihelp-dbg-description}}}}",
-       "apihelp-dump-description": "{{doc-apihelp-description|dump|seealso=* {{msg-mw|apihelp-dumpfm-description}}}}",
-       "apihelp-dumpfm-description": "{{doc-apihelp-description|dumpfm|seealso=* {{msg-mw|apihelp-dump-description}}}}",
        "apihelp-json-description": "{{doc-apihelp-description|json|seealso=* {{msg-mw|apihelp-jsonfm-description}}}}",
        "apihelp-json-param-callback": "{{doc-apihelp-param|json|callback}}",
        "apihelp-json-param-utf8": "{{doc-apihelp-param|json|utf8}}",
        "apihelp-rawfm-description": "{{doc-apihelp-description|rawfm|seealso=* {{msg-mw|apihelp-raw-description}}}}",
        "apihelp-txt-description": "{{doc-apihelp-description|txt|seealso=* {{msg-mw|apihelp-txtfm-description}}}}",
        "apihelp-txtfm-description": "{{doc-apihelp-description|txtfm|seealso=* {{msg-mw|apihelp-txt-description}}}}",
-       "apihelp-wddx-description": "{{doc-apihelp-description|wddx|seealso=* {{msg-mw|apihelp-wddxfm-description}}}}",
-       "apihelp-wddxfm-description": "{{doc-apihelp-description|wddxfm|seealso=* {{msg-mw|apihelp-wddx-description}}}}",
        "apihelp-xml-description": "{{doc-apihelp-description|xml|seealso=* {{msg-mw|apihelp-xmlfm-description}}}}",
        "apihelp-xml-param-xslt": "{{doc-apihelp-param|xml|xslt}}",
        "apihelp-xml-param-includexmlnamespace": "{{doc-apihelp-param|xml|includexmlnamespace}}",
        "apihelp-yamlfm-description": "{{doc-apihelp-description|yamlfm|seealso=* {{msg-mw|apihelp-yaml-description}}}}",
        "api-format-title": "{{technical}}\nPage title when API output is pretty-printed in HTML.",
        "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
+       "api-format-prettyprint-header-only-html": "{{technical}} Displayed as a header when API output is pretty-printed in HTML, but there is no non-html module.\n\nParameters:\n* $1 - Format name",
        "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
        "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
        "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
        "api-help-fallback-description": "{{notranslate}}",
        "api-help-fallback-parameter": "{{notranslate}}",
        "api-help-fallback-example": "{{notranslate}}",
-       "api-help-flags": "{{optional}} Label for the API help flags box\n\nParameters:\n* $1 - Number of flags to be displayed",
+       "api-help-flags": "{{ignored}} Label for the API help flags box\n\nParameters:\n* $1 - Number of flags to be displayed",
        "api-help-flag-deprecated": "Flag displayed for an API module that is deprecated",
        "api-help-flag-internal": "Flag displayed for an API module that is considered internal or unstable",
        "api-help-flag-readrights": "Flag displayed for an API module that requires read rights",
        "api-help-license": "Displayed in the flags box to indicate the license of an API module.\n\nParameters:\n* $1 - Page to link to display the full license text\n* $2 - Display text for the link\n\nSee also:\n* {{msg-mw|api-help-license-noname}}\n* {{msg-mw|api-help-license-unknown}}",
        "api-help-license-noname": "Displayed in the flags box to indicate the license of an API module, when the tag for the license is not known.\n\nParameters:\n* $1 - Page to link to display the full license text\n\nSee also:\n* {{msg-mw|api-help-license}}\n* {{msg-mw|api-help-license-unknown}}",
        "api-help-license-unknown": "Displayed in the flags box to indicate that the license of the API module is not known.\n\nSee also:\n* {{msg-mw|api-help-license}}\n* {{msg-mw|api-help-license-noname}}",
-       "api-help-help-urls": "{{optional}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
+       "api-help-help-urls": "{{ignored}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
        "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed\n{{Identical|Parameter}}",
        "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter\n{{Identical|Deprecated}}",
        "api-help-param-required": "Displayed in the API help for any required parameter",
        "api-help-param-type-limit": "{{technical}} {{doc-important|Do not translate text inside &lt;kbd%gt; tags}} Used to indicate that a parameter is a \"limit\" type. Parameters:\n* $1 - Always 1.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
        "api-help-param-type-integer": "{{technical}} Used to indicate that a parameter is an integer or list of integers. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
        "api-help-param-type-boolean": "{{technical}} {{doc-important|Do not translate <code>Special:ApiHelp</code> in this message.}} Used to indicate that a parameter is a boolean. Parameters:\n* $1 - Always 1.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
-       "api-help-param-type-password": "{{optional}}{{technical}} Used to indicate that a parameter is a password or list of passwords. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
+       "api-help-param-type-password": "{{ignored}}{{technical}} Used to indicate that a parameter is a password or list of passwords. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
        "api-help-param-type-timestamp": "{{technical}} {{doc-important|Do not translate <code>Special:ApiHelp</code> in this message.}} Used to indicate that a parameter is a timestamp or list of timestamps. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
        "api-help-param-type-user": "{{technical}} Used to indicate that a parameter is a username or list of usernames. Parameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes a list of values.\nSee also:\n* {{msg-mw|api-help-datatypes}}\n* [[Special:PrefixIndex/MediaWiki:api-help-param-type]]",
        "api-help-param-list": "Used to display the possible values for a parameter taking a list of values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Comma-separated list of values, possibly formatted using {{msg-mw|api-help-param-list-can-be-empty}}\n{{Identical|Value}}",
index 0b50ad2..c4c7045 100644 (file)
@@ -6,7 +6,8 @@
                        "Eakarpov",
                        "Kaganer",
                        "Mariya",
-                       "Дмитрий"
+                       "Дмитрий",
+                       "WindEwriX"
                ]
        },
        "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: Ошибки и предупреждения]].",
@@ -22,7 +23,9 @@
        "apihelp-block-description": "Блокировка участника.",
        "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать.",
        "apihelp-block-param-reason": "Причина блокировки.",
+       "apihelp-block-param-anononly": "Блокировать только анонимных пользователей (т. е. запретить анонимные правки для этого IP-адреса).",
        "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
+       "apihelp-block-param-watchuser": "Следить за страницей пользователя или IP-участника и страницей обсуждения.",
        "apihelp-checktoken-param-token": "токен для проверки",
        "apihelp-checktoken-param-maxtokenage": "Максимально допустимый возраст токена (в секундах).",
        "apihelp-checktoken-example-simple": "Проверить годность <kbd>csrf</kbd>-токена.",
@@ -50,6 +53,7 @@
        "apihelp-delete-description": "Удалить страницу.",
        "apihelp-delete-param-title": "Заголовок страницы удалить. Совместное использование с <var>$1страницы</var> невозможно.",
        "apihelp-delete-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
+       "apihelp-delete-param-unwatch": "Удалить страницу из списка наблюдения текущего пользователя.",
        "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-param-minor": "Незначительное изменение (малая правка).",
        "apihelp-edit-param-notminor": "Значительное изменение (обычная, не «малая», правка).",
        "apihelp-edit-param-bot": "Пометить правку как сделанную ботом.",
+       "apihelp-edit-param-createonly": "Не редактировать страницу, если она уже существует.",
        "apihelp-edit-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
+       "apihelp-edit-param-unwatch": "Удалить страницу из списка наблюдения текущего пользователя.",
        "apihelp-edit-example-edit": "Редактировать страницу",
        "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>контентом</kbd>.",
        "apihelp-expandtemplates-description": "Разворачивает все шаблоны в wikitext.",
        "apihelp-expandtemplates-param-title": "Заголовок страницы.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "Дерево разбора XML входных данных.",
        "apihelp-feedcontributions-param-year": "От года (и ранее).",
        "apihelp-feedcontributions-param-month": "От месяца (и ранее).",
+       "apihelp-feedrecentchanges-param-hideminor": "Скрыть малые правки.",
+       "apihelp-feedrecentchanges-param-hidebots": "Скрыть правки ботов.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Скрыть отпатруллированные правки.",
        "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-import-param-summary": "Импорт итога",
        "apihelp-import-param-xml": "Загруженный XML-файл.",
index 5a5cd05..7ae00b3 100644 (file)
@@ -12,7 +12,8 @@
                        "Jenniesarina",
                        "Marfuas",
                        "VickyC",
-                       "Josve05a"
+                       "Josve05a",
+                       "Rockyfelle"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-postlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aviseringar]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R|Buggar & förslag]\n</div>\n<strong>Status:</strong> Alla funktioner som visas på denna sida borde fungera. API:et är dock fortfarande under aktiv utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/mediawiki-api-announce e-postlistan] för att få aviseringar om uppdateringar.\n\n<strong>Felaktiga förfrågningar:</strong> När felaktiga förfrågningar skickas till API:et skickas en HTTP-header med nyckeln \"MediaWiki-API-Error\" och sedan sätts både värdet på headern och den felkoden som returneras till samma värde. För mer information läs [[mw:API:Errors_and_warnings|API: Fel och varningar]].",
@@ -20,7 +21,7 @@
        "apihelp-main-param-format": "Formatet för utdata.",
        "apihelp-main-param-smaxage": "Ange headervärdet <code>s-maxage</code> till så här många sekunder. Fel cachelagras aldrig.",
        "apihelp-main-param-maxage": "Ange headervärdet <code>max-age</code> till så här många sekunder. Fel cachelagras aldrig.",
-       "apihelp-main-param-assert": "Bekräftar att användaren är inloggad om satt till <kbd>user</kbd>, eller har bot-användarrättigheter om satt till <kbd>bot</kbd>.",
+       "apihelp-main-param-assert": "Bekräfta att användaren är inloggad om satt till <kbd>user</kbd>, eller har bot-användarrättigheter om satt till <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Alla värde som anges här kommer att inkluderas i svaret. Kan användas för att särskilja förfrågningar.",
        "apihelp-main-param-servedby": "Inkludera det värdnamn som besvarade förfrågan i resultatet.",
        "apihelp-main-param-curtimestamp": "Inkludera den aktuella tidsstämpeln i resultatet.",
        "apihelp-import-param-templates": "För interwiki-importer: importera även alla mallar som ingår.",
        "apihelp-import-param-namespace": "Importera till denna namnrymd. Kan inte användas tillsammans med <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Importera som undersida till denna sida. Kan inte användas tillsammans med <var>$1namespace</var>.",
-       "apihelp-import-example-import": "Importera [[meta:Help:Parserfunktioner]] till namnrymd 100 med full historik.",
+       "apihelp-import-example-import": "Importera [[meta:Help:ParserFunctions]] till namnrymd 100 med full historik.",
        "apihelp-login-description": "Logga in och hämta autentiserings-cookies.\n\nOm inloggningen lyckas, finns de cookies som krävs med i HTTP-svarshuvuden. Om inloggningen misslyckas kan ytterligare försök per tidsenhet begränsas, som ett sätt att försöka minska risken för automatiserade lösenordsgissningar.",
        "apihelp-login-param-name": "Användarnamn.",
        "apihelp-login-param-password": "Lösenord.",
        "apihelp-query+contributors-param-limit": "Hur många bidragsgivare att returnera.",
        "apihelp-query+deletedrevisions-param-user": "Lista endast sidversioner av denna användare.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Lista inte sidversioner av denna användare.",
-       "apihelp-query+deletedrevisions-param-limit": "Maximala antalet sidversioner att lista.",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Läge|Lägen}}: $2",
        "apihelp-query+deletedrevs-param-from": "Börja lista vid denna titel.",
        "apihelp-query+deletedrevs-param-to": "Sluta lista vid denna titel.",
        "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 9952ab9..4b61085 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Sayginer",
-                       "Sadrettin"
+                       "Sadrettin",
+                       "Uğurkent"
                ]
        },
        "apihelp-createaccount-param-name": "Kullanıcı adı.",
@@ -34,6 +35,8 @@
        "apihelp-feedrecentchanges-example-simple": "Son değişiklikleri göster",
        "apihelp-feedrecentchanges-example-30days": "Son 30 gündeki değişiklikleri göster",
        "apihelp-filerevert-description": "Bir dosyayı eski bir sürümüne geri döndür.",
+       "apihelp-login-param-name": "Kullanıcı adı.",
+       "apihelp-login-param-password": "Parola.",
        "apihelp-move-description": "Bir sayfayı taşı.",
        "apihelp-move-param-from": "Taşımak istediğiniz sayfanın başlığı. $1fromid ile birlikte kullanılamaz.",
        "apihelp-move-param-noredirect": "Yönlendirme oluşturmayın.",
index a027d9d..8c9f8c8 100644 (file)
@@ -8,10 +8,12 @@
        },
        "apihelp-main-param-action": "Tác vụ để thực hiện.",
        "apihelp-main-param-format": "Định dạng của dữ liệu được cho ra.",
+       "apihelp-main-param-uselang": "Ngôn ngữ để sử dụng cho các phiên dịch thông điệp. Một danh sách các mã có thể được lấy từ <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> với <kbd>siprop=languages</kbd>, hoặc <kbd>user</kbd> cụ thể sử dụng ngôn ngữ tham khảo của người dùng hiện tại, hoặc <kbd>content</kbd> cụ thể để sử dụng ngôn ngữ nội dung của wiki này.",
        "apihelp-block-description": "Cấm người dùng.",
        "apihelp-block-param-user": "Tên truy nhập, địa chỉ IP hoặc dãi IP mà bạn muốn chặn.",
        "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-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-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-dump-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP.",
-       "apihelp-dumpfm-description": "Cho ra dữ liệu dưới dạng var_dump() 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-wddx-description": "Cho ra dữ liệu dưới dạng WDDX.",
-       "apihelp-wddxfm-description": "Cho ra dữ liệu dưới dạng WDDX (đị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.",
index c24d4ce..c2acd42 100644 (file)
@@ -4,5 +4,7 @@
                        "פוילישער"
                ]
        },
+       "apihelp-main-param-action": "וועלכע אקציע אויסצופירן.",
+       "apihelp-main-param-format": "פארמאט פונעם אויסגאב.",
        "api-help-source": "מקור: $1"
 }
index 00676c2..551a3e1 100644 (file)
@@ -11,7 +11,9 @@
                        "JuneAugsut",
                        "EagerLin",
                        "Simon xianyu",
-                       "Kuailong"
+                       "Kuailong",
+                       "Zhxy 519",
+                       "御坂美琴"
                ]
        },
        "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: 错误与警告]]。",
        "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-redirect": "自动解重定向。",
        "apihelp-edit-param-contentformat": "用于输入文本的内容串行化格式。",
        "apihelp-edit-param-contentmodel": "新内容的内容模型。",
        "apihelp-edit-param-token": "令牌应总是发送为最后参数,或至少在$1text参数之后。",
-       "apihelp-edit-example-edit": "编辑一个页面",
-       "apihelp-edit-example-prepend": "页面中预置<kbd>_&#95;NOTOC_&#95;</kbd>",
-       "apihelp-edit-example-undo": "通过13585撤销修订版本13579并自动填写编辑摘要",
+       "apihelp-edit-example-edit": "编辑一个页面",
+       "apihelp-edit-example-prepend": "页面中预置<kbd>_&#95;NOTOC_&#95;</kbd>",
+       "apihelp-edit-example-undo": "通过13585撤销修订版本13579并自动填写编辑摘要",
        "apihelp-emailuser-description": "电子邮件联系一位用户。",
        "apihelp-emailuser-param-target": "电子邮件的目标用户。",
        "apihelp-emailuser-param-subject": "主题页眉。",
        "apihelp-expandtemplates-param-title": "页面标题。",
        "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
        "apihelp-expandtemplates-param-revid": "修订版本ID,用于<nowiki>{{REVISIONID}}</nowiki>和类似变体。",
-       "apihelp-expandtemplates-param-prop": "要获取的那条信息:\n;wikitext:展开的wiki文本。\n;categories:任何在不代表wiki文本输出的输入框出现的分类。\n;properties:由wiki文本中扩充的魔术字定义的页面属性。\n;volatile:输出是否不稳定,并且不应在任何页面中再度使用。\n;ttl:结果的哪个缓存后等待最长时间应无效化。\n;parsetree:输入的XML解析树。\n注意如果没有选定值,结果将包含wiki文本,但将以弃用的格式显示。",
+       "apihelp-expandtemplates-param-prop": "要获取的那条信息。\n\n注意如果没有选定值,结果将包含wiki文本,但将以弃用的格式显示。",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "扩充的wiki文本。",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "由wiki文本中扩充的魔术字定义的页面属性。",
+       "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": "展开wiki文本<kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>。",
        "apihelp-imagerotate-param-rotation": "顺时针旋转图像的度数。",
        "apihelp-imagerotate-example-simple": "<kbd>90</kbd>度旋转<kbd>File:Example.png</kbd>。",
        "apihelp-imagerotate-example-generator": "将<kbd>Category:Flip</kbd>之中的所有图像旋转<kbd>180</kbd>度。",
-       "apihelp-import-description": "从另一个wiki导入一个页面,或一个XML文件。\n\n注意当发送一个用于<var>xml</var>参数的文件时,HTTP POST必须作为一次文件上传完成(也就是使用multipart/form-data)。",
+       "apihelp-import-description": "从另一个wiki或从一个XML文件导入页面。\n\n注意当发送一个用于<var>xml</var>参数的文件时,HTTP POST必须作为一次文件上传完成(也就是使用multipart/form-data)。",
        "apihelp-import-param-summary": "导入摘要。",
        "apihelp-import-param-xml": "上传的XML文件。",
        "apihelp-import-param-interwikisource": "用于跨wiki导入:导入的来源wiki。",
        "apihelp-import-param-templates": "用于跨wiki导入:连带导入所有包含的模板。",
        "apihelp-import-param-namespace": "导入至此名字空间。不能与<var>$1rootpage</var>一起使用。",
        "apihelp-import-param-rootpage": "作为此页面的子页面导入。不能与<var>$1namespace</var>一起使用。",
-       "apihelp-import-example-import": "将页面[[meta:Help:Parserfunctions]]连带完整历史导入至100名字空间。",
+       "apihelp-import-example-import": "将页面[[meta:Help:ParserFunctions]]连带完整历史导入至100名字空间。",
        "apihelp-login-description": "登录并获得身份验证Cookie。\n\n在成功登录的情况下,所需的Cookie将包含在HTTP响应头中。在登录失败的情况下,进一步的尝试可能会被自动密码猜解攻击的限制所遏制。",
        "apihelp-login-param-name": "用户名。",
        "apihelp-login-param-password": "密码。",
        "apihelp-move-param-unwatch": "从当前用户的监视列表中移除页面及重定向。",
        "apihelp-move-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-move-param-ignorewarnings": "忽略任何警告。",
-       "apihelp-move-example-move": "移动<kbd>坏标题</kbd>到<kbd>好标题</kbd>并且不留下重定向。",
+       "apihelp-move-example-move": "移动<kbd>Badtitle</kbd>到<kbd>Goodtitle</kbd>,不保留重定向。",
        "apihelp-opensearch-description": "使用OpenSearch协议搜索本wiki。",
        "apihelp-opensearch-param-search": "搜索字符串。",
        "apihelp-opensearch-param-limit": "要返回的结果最大数。",
        "apihelp-parse-paramvalue-prop-displaytitle": "为被解析的wiki文本添加标题。",
        "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模块。",
+       "apihelp-parse-paramvalue-prop-modules": "提供在页面中使用的ResourceLoader模块。无论<kbd>jsconfigvars</kbd>还是<kbd>encodedjsconfigvars</kbd>都必须与<kbd>modules</kbd>共同被请求。",
        "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-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-generatexml": "生成XML解析树(需要内容模型<code>$1</code>)。",
+       "apihelp-parse-param-generatexml": "ç\94\9fæ\88\90XML解æ\9e\90æ \91ï¼\88é\9c\80è¦\81å\86\85容模å\9e\8b<code>$1</code>ï¼\9b被<kbd>$2prop=parsetree</kbd>æ\89\80å\8f\96代ï¼\89ã\80\82",
        "apihelp-parse-param-preview": "在预览模式下解析。",
        "apihelp-parse-param-sectionpreview": "在小节预览模式下解析 (同时要启用预览模式)。",
        "apihelp-parse-param-disabletoc": "在输出中禁用目录。",
+       "apihelp-parse-param-contentformat": "用于输入文本的内容序列化格式。只当与$1text一起使用时有效。",
        "apihelp-parse-example-page": "解析一个页面。",
        "apihelp-parse-example-text": "解析wiki文本。",
-       "apihelp-parse-example-texttitle": "解析维基文本,指定页面标题。",
+       "apihelp-parse-example-texttitle": "解析wiki文本,指定页面标题。",
        "apihelp-parse-example-summary": "解析一个摘要。",
        "apihelp-patrol-description": "巡查页面或修订版本。",
        "apihelp-patrol-param-rcid": "所要巡查的最近变更 ID。",
        "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-purge-example-generator": "刷新主名字空间的前10个页面",
        "apihelp-query-description": "获取来自和有关MediaWiki的数据。\n\n所有数据修改将首先要使用查询以获得令牌以阻止来自恶意网站的滥用破坏。",
        "apihelp-query-param-prop": "要为已查询页面获取的属性。",
        "apihelp-query-param-list": "要获取的列表。",
        "apihelp-query-param-meta": "要获取的元数据。",
-       "apihelp-query-param-rawcontinue": "目前被忽略。将来<var>$1continue</var>将成为默认,且这里将需要得到原始的<samp>query-continue</samp>数据。",
+       "apihelp-query-param-exportnowrap": "返回导出XML,不需要将其包裹在一个XML结果中(与[[Special:Export]]格式相同)。只能与$1export一起使用。",
+       "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+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|miser模式]],同时使用<var>$1user</var>和<var>$1namespace</var>将导致继续前返回少于<var>$1limit</var>个结果,在极端条件下可能不返回任何结果。",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "当作为生成器使用时,生成标题而不是修订ID。",
        "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-to": "要列举的最终文件标题。",
        "apihelp-query+allfileusages-param-prefix": "搜索此值开头的所有文件标题。",
+       "apihelp-query+allfileusages-param-unique": "只显示明显的文件标题。不能与$1prop=ids一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
        "apihelp-query+allfileusages-param-prop": "要包含的信息束:\n;ids:添加使用中的页面的页面ID(不能与$1unique一起使用)。\n;title:添加文件的标题。",
        "apihelp-query+allfileusages-param-limit": "要返回的总计项目。",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
        "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-minsize": "限于至少这么多字节的图像。",
        "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
        "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
        "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
        "apihelp-query+allmessages-param-prop": "要获取的属性。",
        "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+alltransclusions-param-limit": "要返回的总计项目。",
        "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
        "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+backlinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+backlinks-param-limit": "返回总计页面数。如果<var>$1redirect</var>被启用,则限定分别适用于每一等级(这意味着将返回多达2 * <var>$1limit</var>个结果)。",
        "apihelp-query+backlinks-example-simple": "显示至<kbd>Main page<kbd>的链接。",
-       "apihelp-query+backlinks-example-generator": "è\8e·å¾\97关于链接至<kbd>Main page<kbd>的页面的信息。",
+       "apihelp-query+backlinks-example-generator": "è\8e·å\8f\96关于链接至<kbd>Main page<kbd>的页面的信息。",
        "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
        "apihelp-query+blocks-param-start": "枚举的起始时间戳。",
        "apihelp-query+blocks-param-end": "枚举的结束时间戳。",
        "apihelp-query+deletedrevisions-param-tag": "只列出被此标签标记的修订。",
        "apihelp-query+deletedrevisions-param-user": "只列出此用户做出的修订。",
        "apihelp-query+deletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
-       "apihelp-query+deletedrevisions-param-limit": "要列出的修订的最高数额。",
-       "apihelp-query+deletedrevisions-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;tags:用于修订的标签。",
        "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-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
        "apihelp-query+deletedrevs-param-from": "从此标题开始列出。",
        "apihelp-query+deletedrevs-param-to": "列出至此标题为止。",
+       "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-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+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(非跨wiki链接)。",
        "apihelp-query+extlinks-param-limit": "返回多少链接。",
-       "apihelp-query+extlinks-example-simple": "获取<kbd>首页</kbd>的外部链接列表。",
+       "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-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+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
        "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
        "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+imageinfo-paramvalue-prop-parsedcomment": "解析版本上的注释。",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "添加文件的规范标题。",
        "apihelp-query+imageinfo-paramvalue-prop-url": "为文件及其描述页面提供URL。",
-       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "大小别名。",
+       "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所使用,以获取关于现有文件的信息。不适用于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张被缩放的图片。",
        "apihelp-query+imageinfo-param-urlheight": "与$1urlwidth类似。",
        "apihelp-query+imageinfo-param-metadataversion": "要使用的元数据版本。如果<kbd>latest</kbd>被指定,则使用最新版本。默认为<kbd>1</kbd>以便向下兼容。",
        "apihelp-query+imageinfo-param-extmetadatalanguage": "要取得extmetadata的语言。This affects both which translation to fetch, if multiple are available, as well as how things like numbers and various values are formatted.",
        "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-dir": "罗列所采用的方向。",
-       "apihelp-query+images-example-simple": "获取[[首页]]使用的文件列表",
-       "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
+       "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+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-subjectid": "每个讨论页的母页面的页面ID。",
        "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
        "apihelp-query+info-paramvalue-prop-preload": "提供由EditFormPreloadText返回的文本。",
        "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
-       "apihelp-query+info-example-simple": "è\8e·å¾\97有关页面<kbd>Main Page</kbd>的信息。",
-       "apihelp-query+info-example-protection": "获取<kbd>首页</kbd>相关的常规和保护信息。",
+       "apihelp-query+info-example-simple": "è\8e·å\8f\96有关页面<kbd>Main Page</kbd>的信息。",
+       "apihelp-query+info-example-protection": "获取<kbd>Main Page</kbd>相关的常规和保护信息。",
        "apihelp-query+iwbacklinks-param-prefix": "跨维基前缀。",
        "apihelp-query+iwbacklinks-param-title": "要搜索的跨wiki链接。必须与<var>$1blprefix</var>一起使用。",
        "apihelp-query+iwbacklinks-param-limit": "返回的总计页面数。",
        "apihelp-query+langlinks-param-title": "要搜索的链接。必须与<var>$1lang</var>一起使用。",
        "apihelp-query+langlinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
-       "apihelp-query+langlinks-example-simple": "ä»\8e页é\9d¢<kbd>Main Page</kbd>è\8e·å¾\97跨语言链接。",
+       "apihelp-query+langlinks-example-simple": "ä»\8e页é\9d¢<kbd>Main Page</kbd>è\8e·å\8f\96跨语言链接。",
        "apihelp-query+links-description": "从指定页面返回所有链接。",
        "apihelp-query+links-param-namespace": "只显示这些名字空间的链接。",
        "apihelp-query+links-param-limit": "返回多少链接。",
        "apihelp-query+links-param-dir": "罗列所采用的方向。",
-       "apihelp-query+links-example-simple": "ä»\8e页é\9d¢<kbd>Main Page</kbd>è\8e·å¾\97链接",
-       "apihelp-query+links-example-generator": "è\8e·å¾\97有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
-       "apihelp-query+links-example-namespaces": "è\8e·å¾\97在{{ns:user}}和{{ns:template}}名字空间中来自页面<kbd>Main Page</kbd>的链接。",
+       "apihelp-query+links-example-simple": "ä»\8e页é\9d¢<kbd>Main Page</kbd>è\8e·å\8f\96链接",
+       "apihelp-query+links-example-generator": "è\8e·å\8f\96有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
+       "apihelp-query+links-example-namespaces": "è\8e·å\8f\96在{{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-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+linkshere-param-limit": "返回多少。",
        "apihelp-query+linkshere-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
-       "apihelp-query+linkshere-example-simple": "获取链接至[[首页]]的页面列表",
-       "apihelp-query+linkshere-example-generator": "获取有关链接至[[首页]]的页面的信息",
+       "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-end": "枚举的结束时间戳。",
+       "apihelp-query+logevents-param-prefix": "过滤以此前缀开头的记录。",
        "apihelp-query+logevents-example-simple": "列出最近日志活动",
        "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
        "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
        "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-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+redirects-description": "返回至指定页面的所有重定向。",
        "apihelp-query+redirects-param-namespace": "只包含这些名字空间的页面。",
        "apihelp-query+redirects-param-limit": "返回多少重定向。",
-       "apihelp-query+redirects-example-simple": "获取至[[Project:首页]]的重定向列表",
-       "apihelp-query+redirects-example-generator": "获取所有重定向至[[首页]]的信息",
+       "apihelp-query+redirects-example-simple": "获取至[[Main Page]]的重定向列表。",
+       "apihelp-query+redirects-example-generator": "获取所有重定向至[[Main Page]]的信息。",
        "apihelp-query+revisions-paraminfo-singlepageonly": "可能只能与单一页面使用(模式#2)。",
-       "apihelp-query+revisions-example-content": "è\8e·å¾\97带内容的数据,用于标题<kbd>API</kbd>和<kbd>Main Page</kbd>的最近修订。",
+       "apihelp-query+revisions-example-content": "è\8e·å\8f\96带内容的数据,用于标题<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-example-first5-after": "è\8e·å¾\97<kbd>Main Page</kbd>于2006年05月01日之后做出的前5次修订版本。",
+       "apihelp-query+revisions-example-first5-after": "è\8e·å\8f\96<kbd>Main Page</kbd>于2006年05月01日之后做出的前5次修订版本。",
        "apihelp-query+revisions-example-first5-not-localhost": "获取<kbd>Main Page</kbd>的前5次不是由匿名用户<kbd>127.0.0.1</kbd>做出的修订。",
        "apihelp-query+revisions-example-first5-user": "获取<kbd>Main Page</kbd>的前5次由用户<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-sha1": "修订的SHA-1(base 16)。",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "修订的内容模型ID。",
+       "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-search": "搜索所有匹配此值的页面标题或内容。根据wiki的搜索后端工具,您可以使用搜索字符串以调用特殊搜索功能。",
        "apihelp-query+search-param-namespace": "只在这些名字空间搜索。",
        "apihelp-query+search-param-what": "要执行的搜索类型。",
        "apihelp-query+search-param-info": "要返回的元数据。",
        "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-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-replag": "检查当前的响应延迟。",
+       "apihelp-query+stashimageinfo-description": "返回用于藏匿文件的文件信息。",
        "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+templates-description": "返回指定页面上所有被嵌入的页面。",
        "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
-       "apihelp-query+templates-param-limit": "返回多少模板。",
+       "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+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-param-prop": "要获取的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:标记作为重定向的页面。",
        "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
        "apihelp-query+transcludedin-param-limit": "返回多少。",
-       "apihelp-query+transcludedin-example-simple": "获得嵌入<kbd>Main Page</kbd>的页面列表。",
-       "apihelp-query+transcludedin-example-generator": "获得有关嵌入<kbd>Main Page</kbd>的页面的信息。",
+       "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-example-user": "显示用户<kbd>Example</kbd>的贡献。",
        "apihelp-query+usercontribs-example-ipprefix": "显示来自<kbd>192.0.2.</kbd>前缀所有 IP 地址的贡献。",
        "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
        "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+watchlist-param-limit": "根据结果返回的结果总数。",
+       "apihelp-query+watchlist-paramvalue-prop-title": "添加页面标题。",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "添加编辑摘要。",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "添加解析过的编辑摘要。",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "添加编辑时间戳。",
        "apihelp-query+watchlist-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
        "apihelp-query+watchlist-example-generator": "在当前用户的监视列表中检索用于最近更改页面的页面信息。",
        "apihelp-query+watchlistraw-description": "获得当前用户的监视列表上的所有页面。",
        "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
        "apihelp-query+watchlistraw-param-limit": "根据结果返回的结果总数。",
+       "apihelp-query+watchlistraw-param-prop": "要获取的额外属性:\n;changed:添加最近被通知有关编辑的用户的时间戳。",
        "apihelp-query+watchlistraw-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
        "apihelp-query+watchlistraw-param-fromtitle": "要列举的起始标题(带名字空间前缀)。",
        "apihelp-query+watchlistraw-param-totitle": "要列举的最终标题(带名字空间前缀)。",
        "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-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-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>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
        "apihelp-tag-param-reason": "更改原因。",
        "apihelp-tag-example-rev": "从修订ID 123添加<kbd>vandalism</kbd>标签,而不指定原因",
        "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-tokens-example-edit": "检索一个编辑令牌(默认)。",
+       "apihelp-tokens-example-emailmove": "检索一个电子邮件令牌和一个移动令牌。",
        "apihelp-unblock-description": "解封一位用户。",
        "apihelp-unblock-param-id": "解封时需要的封禁ID(通过<kbd>list=blocks</kbd>获得)。不能与<var>$1user</var>一起使用。",
        "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与<var>$1id</var>一起使用。",
        "apihelp-undelete-param-reason": "恢复的原因。",
        "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
-       "apihelp-undelete-example-revisions": "恢复<kbd>首页</kbd>的两个修订。",
+       "apihelp-undelete-example-revisions": "恢复<kbd>Main Page</kbd>的两个修订。",
        "apihelp-upload-param-filename": "目标文件名。",
        "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
        "apihelp-upload-param-watch": "监视页面。",
        "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
        "apihelp-upload-param-file": "文件内容。",
        "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
+       "apihelp-upload-param-filesize": "全部上传的文件大小。",
        "apihelp-upload-param-offset": "块的偏移量(字节)。",
        "apihelp-upload-param-chunk": "大块内容。",
        "apihelp-upload-example-url": "从URL上传",
        "apihelp-userrights-example-userid": "将ID为<kbd>123</kbd>的用户加入至<kbd>机器人</kbd>组,并将其从<kbd>管理员</kbd>和<kbd>行政员</kbd>组移除。",
        "apihelp-watch-param-title": "要(取消)监视的页面。也可使用<var>$1titles</var>。",
        "apihelp-watch-example-watch": "监视页面<kbd>Main Page</kbd>。",
-       "apihelp-watch-example-unwatch": "取消监视页面<kbd>首页</kbd>。",
-       "apihelp-format-example-generic": "格式化查询结果为$1格式。",
+       "apihelp-watch-example-unwatch": "取消监视页面<kbd>Main Page</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-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-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-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-xmlfm-description": "输出数据为XML格式(HTML优质打印效果)。",
        "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-orm-param-props": "要查询的字段。",
        "api-orm-param-limit": "返回的总行数。",
+       "api-pageset-param-titles": "要工作的标题列表。",
+       "api-pageset-param-pageids": "要工作的页面ID列表。",
+       "api-pageset-param-revids": "要工作的修订ID列表。",
        "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": "如有需要,将标题转换为其他变体。只有当wiki的内容语言支持变体转换时才能工作。支持变体转换的语言包括$1。",
        "api-help-title": "MediaWiki API 帮助",
        "api-help-lead": "这是自动生成的MediaWiki API文档页面。\n\n文档和例子:https://www.mediawiki.org/wiki/API:Main_page/zh",
        "api-help-main-header": "主模块",
        "api-help-param-default": "默认:$1",
        "api-help-param-default-empty": "默认:<span class=\"apihelp-empty\">(空)</span>",
        "api-help-param-token": "从[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]取回的“$1”令牌",
+       "api-help-param-token-webui": "出于兼容性考虑,web UI中使用的令牌也被接受。",
        "api-help-param-disabled-in-miser-mode": "由于[[mw:Manual:$wgMiserMode|miser模式]]而禁用。",
        "api-help-param-limited-in-miser-mode": "<strong>注意:</strong>由于[[mw:Manual:$wgMiserMode|miser模式]],使用这个可能导致继续前返回少于<var>$1limit</var>个结果;极端情况下可能不会返回任何结果。",
        "api-help-param-direction": "列举的方向:\n;newer:最早的优先。注意:$1start应早于$1end。\n;older:最新的优先(默认)。注意:$1start应晚于$1end。",
        "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年9月~2009年的开发组领导)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan(创建者,2006年9月~2007年9月的开发组领导)\n* Brad Jorsch(2013年至今的开发组领导)\n\n请将您的评论、建议和问题发送至mediawiki-api@lists.wikimedia.org,或提交错误请求在https://phabricator.wikimedia.org/。"
 }
index 3db32ba..8531e23 100644 (file)
@@ -4,7 +4,8 @@
                        "Cwlin0416",
                        "Liuxinyu970226",
                        "LNDDYL",
-                       "EagerLin"
+                       "EagerLin",
+                       "Zhxy 519"
                ]
        },
        "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 Bug與請求]\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 的值與錯誤碼將會送回並設定為相同的值。詳細資訊請參閱[[mw:API:Errors_and_warnings|API: 錯誤與警告]]。",
@@ -86,6 +87,8 @@
        "apihelp-expandtemplates-description": "展開所有於 wikitext 中模板。",
        "apihelp-expandtemplates-param-title": "頁面標題。",
        "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
+       "apihelp-feedcontributions-description": "回傳使用者貢獻 Feed。",
+       "apihelp-feedcontributions-param-feedformat": "Feed 的格式。",
        "apihelp-feedcontributions-param-showsizediff": "顯示修訂版本之間的差異大小。",
        "apihelp-feedcontributions-example-simple": "返回使用者<kbd>Example</kbd>的貢獻。",
        "apihelp-feedrecentchanges-description": "返回近期邊更摘要。",
        "apihelp-query+allredirects-param-limit": "要回傳的項目總數。",
        "apihelp-query+alltransclusions-param-limit": "要回傳的項目總數。",
        "apihelp-query+categories-param-limit": "要回傳的分類數量。",
+       "apihelp-query+categoryinfo-description": "回傳有關指定分類的資訊。",
        "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
        "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
        "apihelp-query+duplicatefiles-param-limit": "要回傳的重複檔案數量。",
        "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+extlinks-description": "回傳所有指定頁面的外部 URL (非 interwiki)。",
        "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
        "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
        "apihelp-query+filearchive-param-limit": "要回傳的圖片總數。",
        "apihelp-query+fileusage-param-limit": "要回傳的數量。",
+       "apihelp-query+imageinfo-description": "回傳檔案資訊與上傳日誌。",
        "apihelp-query+imageinfo-param-limit": "每個檔案要回傳的檔案修訂數量。",
+       "apihelp-query+images-description": "回傳指定頁面中包含的所有檔案。",
        "apihelp-query+images-param-limit": "要回傳的檔案數量。",
+       "apihelp-query+iwlinks-description": "回傳指定頁面的所有 interwiki 連結。",
        "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
        "apihelp-query+langbacklinks-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+langlinks-description": "回傳指定頁面的所有跨語言連結。",
        "apihelp-query+langlinks-param-limit": "要回傳的 langlinks 數量。",
+       "apihelp-query+links-description": "回傳指定頁面的所有連結。",
        "apihelp-query+links-param-limit": "要回傳的連結數量。",
        "apihelp-query+linkshere-param-limit": "要回傳的數量。",
        "apihelp-query+logevents-param-limit": "要回傳的事件項目總數。",
        "apihelp-query+recentchanges-description": "列舉出近期變動。",
        "apihelp-query+recentchanges-param-limit": "要回傳變更總數。",
        "apihelp-query+recentchanges-example-simple": "近期變動清單",
+       "apihelp-query+redirects-description": "回傳連結至指定頁面的所有重新導向。",
        "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
        "apihelp-query+search-param-limit": "要回傳的頁面總數。",
-       "apihelp-query+templates-param-limit": "要回傳的樣板數量。",
+       "apihelp-query+stashimageinfo-description": "回傳多筆儲藏檔案的檔案資訊。",
+       "apihelp-query+stashimageinfo-example-simple": "回傳儲藏檔案的檔案資訊。",
+       "apihelp-query+templates-description": "回傳指定頁面中所有引用的頁面。",
+       "apihelp-query+templates-param-limit": "要回傳的模板數量。",
        "apihelp-query+tokens-param-type": "要請求的密鑰類型。",
        "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
        "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
index 517f379..2abcabd 100644 (file)
@@ -181,11 +181,11 @@ class FileDependency extends CacheDependency {
 
        function loadDependencyValues() {
                if ( is_null( $this->timestamp ) ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        # Dependency on a non-existent file stores "false"
                        # This is a valid concept!
                        $this->timestamp = filemtime( $this->filename );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
        }
 
@@ -193,9 +193,9 @@ class FileDependency extends CacheDependency {
         * @return bool
         */
        function isExpired() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $lastmod = filemtime( $this->filename );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $lastmod === false ) {
                        if ( $this->timestamp === false ) {
                                # Still nonexistent
index 4bf3611..5632596 100644 (file)
@@ -185,9 +185,9 @@ abstract class FileCacheBase {
         * @return void
         */
        public function clearCache() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                unlink( $this->cachePath() );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                $this->mCached = false;
        }
 
index c07032b..483eaa5 100644 (file)
@@ -48,6 +48,7 @@ class HTMLFileCache extends FileCacheBase {
         * @throws MWException
         */
        public function __construct( $title, $action ) {
+               parent::__construct();
                $allowedTypes = self::cacheablePageActions();
                if ( !in_array( $action, $allowedTypes ) ) {
                        throw new MWException( 'Invalid file cache type given.' );
diff --git a/includes/cache/LCStoreStaticArray.php b/includes/cache/LCStoreStaticArray.php
new file mode 100644 (file)
index 0000000..6a597ca
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+/**
+ *  Localisation cache storage based on PHP files and static arrays.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @since 1.26
+ */
+class LCStoreStaticArray implements LCStore {
+       /** @var string|null Current language code. */
+       private $currentLang = null;
+
+       /** @var array Localisation data. */
+       private $data = array();
+
+       /** @var string File name. */
+       private $fname = null;
+
+       /** @var string Directory for cache files. */
+       private $directory;
+
+       public function __construct( $conf = array() ) {
+               global $wgCacheDirectory;
+
+               if ( isset( $conf['directory'] ) ) {
+                       $this->directory = $conf['directory'];
+               } else {
+                       $this->directory = $wgCacheDirectory;
+               }
+       }
+
+       public function startWrite( $code ) {
+               $this->currentLang = $code;
+               $this->fname = $this->directory . '/' . $code . '.l10n.php';
+               $this->data[$code] = array();
+               if ( file_exists( $this->fname ) ) {
+                       $this->data[$code] = require $this->fname;
+               }
+       }
+
+       public function set( $key, $value ) {
+               $this->data[$this->currentLang][$key] = self::encode( $value );
+       }
+
+       /**
+        * Encodes a value into an array format
+        *
+        * @param mixed $value
+        * @return array
+        * @throws RuntimeException
+        */
+       public static function encode( $value ) {
+               if ( is_scalar( $value ) || $value === null ) {
+                       // [V]alue
+                       return array( 'v', $value );
+               }
+               if ( is_object( $value ) ) {
+                       // [S]erialized
+                       return array( 's', serialize( $value ) );
+               }
+               if ( is_array( $value ) ) {
+                       // [A]rray
+                       return array( 'a', array_map( function ( $v ) {
+                               return LCStoreStaticArray::encode( $v );
+                       }, $data ) );
+               }
+
+               throw new RuntimeException( 'Cannot encode ' . var_export( $value, true ) );
+       }
+
+       /**
+        * Decode something that was encoded with encode
+        *
+        * @param array $encoded
+        * @return array|mixed
+        * @throws RuntimeException
+        */
+       public static function decode( array $encoded ) {
+               $type = $encoded[0];
+               $data = $encoded[1];
+
+               switch ( $type ) {
+               case 'v':
+                       return $data;
+               case 's':
+                       return unserialize( $data );
+               case 'a':
+                       return array_map( function ( $v ) {
+                               return LCStoreStaticArray::decode( $v );
+                       }, $data );
+               default:
+                       throw new RuntimeException(
+                               'Unable to decode ' . var_export( $encoded, true ) );
+               }
+       }
+
+       public function finishWrite() {
+               file_put_contents(
+                       $this->fname,
+                       "<?php\n" .
+                       "// Generated by LCStoreStaticArray.php -- do not edit!\n" .
+                       "return " .
+                       var_export( $this->data[$this->currentLang], true ) . ';'
+               );
+               $this->currentLang = null;
+               $this->fname = null;
+       }
+
+       public function get( $code, $key ) {
+               if ( !array_key_exists( $code, $this->data ) ) {
+                       $fname = $this->directory . '/' . $code . '.l10n.php';
+                       if ( !file_exists( $fname ) ) {
+                               return null;
+                       }
+                       $this->data[$code] = require $fname;
+               }
+               $data = $this->data[$code];
+               if ( array_key_exists( $key, $data ) ) {
+                       return self::decode( $data[$key] );
+               }
+               return null;
+       }
+}
index eace1ee..e8cc5e5 100644 (file)
@@ -220,17 +220,14 @@ class LinkCache {
 
                $key = $nt->getPrefixedDBkey();
                if ( $this->isBadLink( $key ) || $nt->isExternal() ) {
-
                        return 0;
                }
                $id = $this->getGoodLinkID( $key );
                if ( $id != 0 ) {
-
                        return $id;
                }
 
                if ( $key === '' ) {
-
                        return 0;
                }
 
index dc5a2eb..276e84a 100644 (file)
@@ -204,6 +204,9 @@ class LocalisationCache {
                                case 'db':
                                        $storeClass = 'LCStoreDB';
                                        break;
+                               case 'array':
+                                       $storeClass = 'LCStoreStaticArray';
+                                       break;
                                case 'detect':
                                        $storeClass = $wgCacheDirectory ? 'LCStoreCDB' : 'LCStoreDB';
                                        break;
@@ -506,15 +509,15 @@ class LocalisationCache {
         */
        protected function readPHPFile( $_fileName, $_fileType ) {
                // Disable APC caching
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $_apcEnabled = ini_set( 'apc.cache_by_default', '0' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                include $_fileName;
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                ini_set( 'apc.cache_by_default', $_apcEnabled );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $_fileType == 'core' || $_fileType == 'extension' ) {
                        $data = compact( self::$allKeys );
@@ -536,13 +539,11 @@ class LocalisationCache {
        public function readJSONFile( $fileName ) {
 
                if ( !is_readable( $fileName ) ) {
-
                        return array();
                }
 
                $json = file_get_contents( $fileName );
                if ( $json === false ) {
-
                        return array();
                }
 
index 31ee487..585fcd3 100644 (file)
@@ -50,6 +50,8 @@ define( 'MSG_WAIT_TIMEOUT', 30 );
  * @ingroup Cache
  */
 class MessageCache {
+       const FOR_UPDATE = 1; // force message reload
+
        /**
         * Process local cache of loaded messages that are defined in
         * MediaWiki namespace. First array level is a language code,
@@ -83,6 +85,16 @@ class MessageCache {
         */
        protected $mLoadedLanguages = array();
 
+       /**
+        * @var bool $mInParser
+        */
+       protected $mInParser = false;
+
+       /** @var BagOStuff */
+       protected $mMemc;
+       /** @var WANObjectCache */
+       protected $wanCache;
+
        /**
         * Singleton instance
         *
@@ -90,11 +102,6 @@ class MessageCache {
         */
        private static $instance;
 
-       /**
-        * @var bool $mInParser
-        */
-       protected $mInParser = false;
-
        /**
         * Get the signleton instance of this class
         *
@@ -136,6 +143,8 @@ class MessageCache {
                $this->mMemc = $memCached;
                $this->mDisable = !$useDB;
                $this->mExpiry = $expiry;
+
+               $this->wanCache = ObjectCache::getMainWANInstance();
        }
 
        /**
@@ -165,9 +174,9 @@ class MessageCache {
                $filename = "$wgCacheDirectory/messages-" . wfWikiID() . "-$code";
 
                # Check file existence
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $file = fopen( $filename, 'r' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$file ) {
                        return false; // No cache file
                }
@@ -202,9 +211,9 @@ class MessageCache {
                $filename = "$wgCacheDirectory/messages-" . wfWikiID() . "-$code";
                wfMkdirParents( $wgCacheDirectory, null, __METHOD__ ); // might fail
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $file = fopen( $filename, 'w' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$file ) {
                        wfDebug( "Unable to open local cache file for writing\n" );
@@ -214,9 +223,9 @@ class MessageCache {
 
                fwrite( $file, $hash . $serialized );
                fclose( $file );
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                chmod( $filename, 0666 );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
        }
 
        /**
@@ -236,10 +245,11 @@ class MessageCache {
         * is disabled.
         *
         * @param bool|string $code Language to which load messages
+        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache
         * @throws MWException
         * @return bool
         */
-       function load( $code = false ) {
+       function load( $code = false, $mode = null ) {
                global $wgUseLocalMessageCache;
 
                if ( !is_string( $code ) ) {
@@ -250,7 +260,7 @@ class MessageCache {
                }
 
                # Don't do double loading...
-               if ( isset( $this->mLoadedLanguages[$code] ) ) {
+               if ( isset( $this->mLoadedLanguages[$code] ) && $mode != self::FOR_UPDATE ) {
                        return true;
                }
 
@@ -268,15 +278,14 @@ 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
-               $cacheKey = wfMemcKey( 'messages', $code ); # Key in memc for messages
 
                # 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 ) {
-
-                       $hash = $this->mMemc->get( wfMemcKey( 'messages', $code, 'hash' ) );
+                       list( $hash, $hashExpired ) = $this->getValidationHash( $code );
                        if ( $hash ) {
                                $cache = $this->getLocalCache( $hash, $code );
                                if ( !$cache ) {
@@ -284,6 +293,9 @@ class MessageCache {
                                } 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;
@@ -293,21 +305,29 @@ class MessageCache {
                }
 
                if ( !$success ) {
+                       $cacheKey = wfMemcKey( 'messages', $code ); # Key in memc for messages
                        # 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++ ) {
-                               $cache = $this->mMemc->get( $cacheKey );
-                               if ( !$cache ) {
-                                       $where[] = 'global cache is empty';
-                               } elseif ( $this->isCacheExpired( $cache ) ) {
-                                       $where[] = 'global cache is expired';
-                                       $staleCache = $cache;
+                               if ( $hashExpired && $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.
+                                       $where[] = 'global cache is presumed expired';
                                } else {
-                                       $where[] = 'got from global cache';
-                                       $this->mCache[$code] = $cache;
-                                       $this->saveToCaches( $cache, 'local-only', $code );
-                                       $success = true;
+                                       $cache = $this->mMemc->get( $cacheKey );
+                                       if ( !$cache ) {
+                                               $where[] = 'global cache is empty';
+                                       } elseif ( $this->isCacheExpired( $cache ) ) {
+                                               $where[] = 'global cache is expired';
+                                               $staleCache = $cache;
+                                       } else {
+                                               $where[] = 'got from global cache';
+                                               $this->mCache[$code] = $cache;
+                                               $this->saveToCaches( $cache, 'local-only', $code );
+                                               $success = true;
+                                       }
                                }
 
                                if ( $success ) {
@@ -315,68 +335,11 @@ class MessageCache {
                                        break;
                                }
 
-                               # We need to call loadFromDB. Limit the concurrency to a single
-                               # process. This prevents the site from going down when the cache
-                               # expires.
-                               $statusKey = wfMemcKey( 'messages', $code, 'status' );
-                               $acquired = $this->mMemc->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT );
-                               if ( $acquired ) {
-                                       # Unlock the status key if there is an exception
-                                       $that = $this;
-                                       $statusUnlocker = new ScopedCallback( function () use ( $that, $statusKey ) {
-                                               $that->mMemc->delete( $statusKey );
-                                       } );
-
-                                       # Now let's regenerate
-                                       $where[] = 'loading from database';
-
-                                       # 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 ) ) {
-                                               $mainUnlocker = new ScopedCallback( function () use ( $that, $cacheKey ) {
-                                                       $that->unlock( $cacheKey );
-                                               } );
-                                       } else {
-                                               $mainUnlocker = null;
-                                               $where[] = 'could not acquire main lock';
-                                       }
-
-                                       $cache = $this->loadFromDB( $code );
-                                       $this->mCache[$code] = $cache;
-                                       $success = true;
-                                       $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:
-                                               #
-                                               #   - The cache is more than the maximum size (typically
-                                               #     1MB compressed).
-                                               #
-                                               #   - Memcached has no space remaining in the relevant slab
-                                               #     class. This is unlikely with recent versions of
-                                               #     memcached.
-                                               #
-                                               # Either way, if there is a local cache, nothing bad will
-                                               # happen. If there is no local cache, disabling the message
-                                               # cache for all requests avoids incurring a loadFromDB()
-                                               # overhead on every request, and thus saves the wiki from
-                                               # complete downtime under moderate traffic conditions.
-                                               if ( !$wgUseLocalMessageCache ) {
-                                                       $this->mMemc->set( $statusKey, 'error', 60 * 5 );
-                                                       $where[] = 'could not save cache, disabled globally for 5 minutes';
-                                               } else {
-                                                       $where[] = "could not save global cache";
-                                               }
-                                       }
-
+                               # 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
+                                       $success = true;
                                        break;
                                } elseif ( $staleCache ) {
                                        # Use the stale cache while some other thread constructs the new one
@@ -391,6 +354,7 @@ class MessageCache {
                                        $where[] = "could not acquire status key.";
                                        break;
                                } else {
+                                       $statusKey = wfMemcKey( 'messages', $code, 'status' );
                                        $status = $this->mMemc->get( $statusKey );
                                        if ( $status === 'error' ) {
                                                # Disable cache
@@ -415,12 +379,86 @@ class MessageCache {
                        # All good, just record the success
                        $this->mLoadedLanguages[$code] = true;
                }
+
                $info = implode( ', ', $where );
                wfDebugLog( 'MessageCache', __METHOD__ . ": Loading $code... $info\n" );
 
                return $success;
        }
 
+       /**
+        * @param string $code
+        * @param array $where List of wfDebug() comments
+        * @return bool Lock acquired and loadFromDB() called
+        */
+       protected function loadFromDBWithLock( $code, array &$where ) {
+               global $wgUseLocalMessageCache;
+
+               $memCache = $this->mMemc;
+
+               $statusKey = wfMemcKey( 'messages', $code, 'status' );
+               if ( !$memCache->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT ) ) {
+                       return false; // could not acquire lock
+               }
+
+               # 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';
+
+               $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;
+                       $where[] = 'could not acquire main lock';
+               }
+
+               $cache = $this->loadFromDB( $code );
+               $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:
+                       #
+                       #   - The cache is more than the maximum size (typically
+                       #     1MB compressed).
+                       #
+                       #   - Memcached has no space remaining in the relevant slab
+                       #     class. This is unlikely with recent versions of
+                       #     memcached.
+                       #
+                       # Either way, if there is a local cache, nothing bad will
+                       # happen. If there is no local cache, disabling the message
+                       # cache for all requests avoids incurring a loadFromDB()
+                       # overhead on every request, and thus saves the wiki from
+                       # complete downtime under moderate traffic conditions.
+                       if ( !$wgUseLocalMessageCache ) {
+                               $memCache->set( $statusKey, 'error', 60 * 5 );
+                               $where[] = 'could not save cache, disabled globally for 5 minutes';
+                       } else {
+                               $where[] = "could not save global cache";
+                       }
+               }
+
+               return true;
+       }
+
        /**
         * Loads cacheable messages from the database. Messages bigger than
         * $wgMaxMsgCacheEntrySize are assigned a special value, and are loaded
@@ -431,6 +469,7 @@ class MessageCache {
         */
        function loadFromDB( $code ) {
                global $wgMaxMsgCacheEntrySize, $wgLanguageCode, $wgAdaptiveMessageCache;
+
                $dbr = wfGetDB( DB_SLAVE );
                $cache = array();
 
@@ -514,18 +553,21 @@ class MessageCache {
         * @param mixed $text New contents of the page.
         */
        public function replace( $title, $text ) {
-               global $wgMaxMsgCacheEntrySize;
+               global $wgMaxMsgCacheEntrySize, $wgContLang, $wgLanguageCode;
 
                if ( $this->mDisable ) {
-
                        return;
                }
 
                list( $msg, $code ) = $this->figureMessage( $title );
+               if ( strpos( $title, '/' ) !== false && $code === $wgLanguageCode ) {
+                       # Content language overrides do not use the /<code> suffix
+                       return;
+               }
 
                $cacheKey = wfMemcKey( 'messages', $code );
-               $this->load( $code );
                $this->lock( $cacheKey );
+               $this->load( $code, self::FOR_UPDATE );
 
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
 
@@ -545,6 +587,7 @@ class MessageCache {
                # Update caches
                $this->saveToCaches( $this->mCache[$code], 'all', $code );
                $this->unlock( $cacheKey );
+               $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
 
                // Also delete cached sidebar... just in case it is affected
                $codes = array( $code );
@@ -554,19 +597,16 @@ class MessageCache {
                        $codes = array_keys( Language::fetchLanguageNames() );
                }
 
-               $cache = ObjectCache::getMainWANInstance();
                foreach ( $codes as $code ) {
                        $sidebarKey = wfMemcKey( 'sidebar', $code );
-                       $cache->delete( $sidebarKey, 5 );
+                       $this->wanCache->delete( $sidebarKey, 5 );
                }
 
                // Update the message in the message blob store
-               global $wgContLang;
                $blobStore = new MessageBlobStore();
                $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
 
                Hooks::run( 'MessageCacheReplace', array( $title, $text ) );
-
        }
 
        /**
@@ -601,9 +641,8 @@ class MessageCache {
        protected function saveToCaches( $cache, $dest, $code = false ) {
                global $wgUseLocalMessageCache;
 
-               $cacheKey = wfMemcKey( 'messages', $code );
-
                if ( $dest === 'all' ) {
+                       $cacheKey = wfMemcKey( 'messages', $code );
                        $success = $this->mMemc->set( $cacheKey, $cache );
                } else {
                        $success = true;
@@ -613,13 +652,45 @@ class MessageCache {
                if ( $wgUseLocalMessageCache ) {
                        $serialized = serialize( $cache );
                        $hash = md5( $serialized );
-                       $this->mMemc->set( wfMemcKey( 'messages', $code, 'hash' ), $hash );
+                       $this->setValidationHash( $code, $hash );
                        $this->saveToLocal( $serialized, $hash, $code );
                }
 
                return $success;
        }
 
+       /**
+        * Get the md5 used to validate the local disk cache
+        *
+        * @param string $code
+        * @return array (hash or false, bool expiry status)
+        */
+       protected function getValidationHash( $code ) {
+               $curTTL = null;
+               $value = $this->wanCache->get(
+                       wfMemcKey( 'messages', $code, 'hash' ),
+                       $curTTL,
+                       array( wfMemcKey( 'messages', $code ) )
+               );
+               $expired = ( $curTTL === null || $curTTL < 0 );
+
+               return array( $value, $expired );
+       }
+
+       /**
+        * Set the md5 used to validate the local disk cache
+        *
+        * @param string $code
+        * @param string $hash
+        */
+       protected function setValidationHash( $code, $hash ) {
+               $this->wanCache->set(
+                       wfMemcKey( 'messages', $code, 'hash' ),
+                       $hash,
+                       WANObjectCache::TTL_NONE
+               );
+       }
+
        /**
         * Represents a write lock on the messages key.
         *
@@ -1042,7 +1113,8 @@ class MessageCache {
 
                if ( !$title || !$title instanceof Title ) {
                        global $wgTitle;
-                       wfDebugLog( 'GlobalTitleFail', __METHOD__ . ' called by ' . wfGetAllCallers( 5 ) . ' with no title set.' );
+                       wfDebugLog( 'GlobalTitleFail', __METHOD__ . ' called by ' .
+                               wfGetAllCallers( 5 ) . ' with no title set.' );
                        $title = $wgTitle;
                }
                // Sometimes $wgTitle isn't set either...
@@ -1073,11 +1145,10 @@ class MessageCache {
        function clear() {
                $langs = Language::fetchLanguageNames( null, 'mw' );
                foreach ( array_keys( $langs ) as $code ) {
-                       # Global cache
-                       $this->mMemc->delete( wfMemcKey( 'messages', $code ) );
-                       # Invalidate all local caches
-                       $this->mMemc->delete( wfMemcKey( 'messages', $code, 'hash' ) );
+                       # Global and local caches
+                       $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
                }
+
                $this->mLoadedLanguages = array();
        }
 
@@ -1087,6 +1158,7 @@ class MessageCache {
         */
        public function figureMessage( $key ) {
                global $wgLanguageCode;
+
                $pieces = explode( '/', $key );
                if ( count( $pieces ) < 2 ) {
                        return array( $key, $wgLanguageCode );
index 8a42489..2a3aac2 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, str_replace( ' ', '_', $row->user_name ) );
+                               $lb->add( NS_USER, $row->user_name );
                                $this->typesCached[$userId]['userpage'] = 1;
                        }
                        if ( $this->queryNeeded( $userId, 'usertalk', $options ) ) {
-                               $lb->add( NS_USER_TALK, str_replace( ' ', '_', $row->user_name ) );
+                               $lb->add( NS_USER_TALK, $row->user_name );
                                $this->typesCached[$userId]['usertalk'] = 1;
                        }
                }
index 28c2f7e..28a1cca 100644 (file)
@@ -187,6 +187,10 @@ class ChangesFeed {
                $sorted = array();
                $n = 0;
                foreach ( $rows as $obj ) {
+                       if ( $obj->rc_type == RC_EXTERNAL ) {
+                               continue;
+                       }
+
                        if ( $n > 0 &&
                                $obj->rc_type == RC_EDIT &&
                                $obj->rc_namespace >= 0 &&
index 932006d..fdc9944 100644 (file)
@@ -204,7 +204,8 @@ class ChangesList extends ContextSource {
                $code = $lang->getCode();
                static $fastCharDiff = array();
                if ( !isset( $fastCharDiff[$code] ) ) {
-                       $fastCharDiff[$code] = $config->get( 'MiserMode' ) || $context->msg( 'rc-change-size' )->plain() === '$1';
+                       $fastCharDiff[$code] = $config->get( 'MiserMode' )
+                               || $context->msg( 'rc-change-size' )->plain() === '$1';
                }
 
                $formattedSize = $lang->formatNum( $szdiff );
@@ -370,6 +371,19 @@ class ChangesList extends ContextSource {
                $s .= " $articlelink";
        }
 
+       /**
+        * @param RecentChange $rc
+        * @param bool $unpatrolled
+        * @param bool $watched
+        * @return string
+        * @since 1.26
+        */
+       public function getArticleLink( RecentChange $rc, $unpatrolled, $watched ) {
+               $s = '';
+               $this->insertArticleLink( $s, $rc, $unpatrolled, $watched );
+               return $s;
+       }
+
        /**
         * Get the timestamp from $rc formatted with current user's settings
         * and a separator
@@ -542,6 +556,17 @@ class ChangesList extends ContextSource {
                }
        }
 
+       /**
+        * @param RecentChange $rc
+        * @return string
+        * @since 1.26
+        */
+       public function getRollback( RecentChange $rc ) {
+               $s = '';
+               $this->insertRollback( $s, $rc );
+               return $s;
+       }
+
        /**
         * @param string $s
         * @param RecentChange $rc
@@ -560,6 +585,18 @@ class ChangesList extends ContextSource {
                $s .= ' ' . $tagSummary;
        }
 
+       /**
+        * @param RecentChange $rc
+        * @param array $classes
+        * @return string
+        * @since 1.26
+        */
+       public function getTags( RecentChange $rc, array &$classes ) {
+               $s = '';
+               $this->insertTags( $s, $rc, $classes );
+               return $s;
+       }
+
        public function insertExtra( &$s, &$rc, &$classes ) {
                // Empty, used for subclasses to add anything special.
        }
index 19277f1..e5916bd 100644 (file)
@@ -304,18 +304,18 @@ class EnhancedChangesList extends ChangesList {
                        # Classes to apply -- TODO implement
                        $classes = array();
                        $type = $rcObj->mAttribs['rc_type'];
+                       $data = array();
 
                        $trClass = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
                                ? ' class="mw-enhanced-watched"' : '';
+                       $separator = ' <span class="mw-changeslist-separator">. .</span> ';
 
-                       $r .= '<tr' . $trClass . '><td></td><td class="mw-enhanced-rc">';
-                       $r .= $this->recentChangesFlags( array(
+                       $data['recentChangesFlags'] = array(
                                'newpage' => $type == RC_NEW,
                                'minor' => $rcObj->mAttribs['rc_minor'],
                                'unpatrolled' => $rcObj->unpatrolled,
                                'bot' => $rcObj->mAttribs['rc_bot'],
-                       ) );
-                       $r .= '&#160;</td><td class="mw-enhanced-rc-nested"><span class="mw-enhanced-rc-time">';
+                       );
 
                        $params = $queryParams;
 
@@ -330,7 +330,6 @@ class EnhancedChangesList extends ChangesList {
                        } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
                                $link = '<span class="history-deleted">' . $rcObj->timestamp . '</span> ';
                        } else {
-
                                $link = Linker::linkKnown(
                                        $rcObj->getTitle(),
                                        $rcObj->timestamp,
@@ -341,40 +340,69 @@ class EnhancedChangesList extends ChangesList {
                                        $link = '<span class="history-deleted">' . $link . '</span> ';
                                }
                        }
-                       $r .= $link . '</span>';
+                       $data['timestampLink'] = $link;
 
+                       $currentAndLastLinks = '';
                        if ( !$type == RC_LOG || $type == RC_NEW ) {
-                               $r .= ' ' . $this->msg( 'parentheses' )->rawParams(
+                               $currentAndLastLinks .= ' ' . $this->msg( 'parentheses' )->rawParams(
                                        $rcObj->curlink .
                                                $this->message['pipe-separator'] .
                                                $rcObj->lastlink
                                )->escaped();
                        }
-                       $r .= ' <span class="mw-changeslist-separator">. .</span> ';
+                       $data['currentAndLastLinks'] = $currentAndLastLinks;
+                       $data['separatorAfterCurrentAndLastLinks'] = $separator;
 
                        # Character diff
                        if ( $RCShowChangedSize ) {
                                $cd = $this->formatCharacterDifference( $rcObj );
                                if ( $cd !== '' ) {
-                                       $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
+                                       $data['characterDiff'] = $cd;
+                                       $data['separatorAfterCharacterDiff'] = $separator;
                                }
                        }
 
                        if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) {
-                               $r .= $this->insertLogEntry( $rcObj );
+                               $data['logEntry'] = $this->insertLogEntry( $rcObj );
                        } else {
                                # User links
-                               $r .= $rcObj->userlink;
-                               $r .= $rcObj->usertalklink;
-                               $r .= $this->insertComment( $rcObj );
+                               $data['userLink'] = $rcObj->userlink;
+                               $data['userTalkLink'] = $rcObj->usertalklink;
+                               $data['comment'] = $this->insertComment( $rcObj );
                        }
 
                        # Rollback
-                       $this->insertRollback( $r, $rcObj );
+                       $data['rollback'] = $this->getRollback( $rcObj );
+
                        # Tags
-                       $this->insertTags( $r, $rcObj, $classes );
+                       $data['tags'] = $this->getTags( $rcObj, $classes );
+
+                       // give the hook a chance to modify the data
+                       $success = Hooks::run( 'EnhancedChangesListModifyLineData',
+                               array( $this, &$data, $block, $rcObj ) );
+                       if ( !$success ) {
+                               // skip entry if hook aborted it
+                               continue;
+                       }
+
+                       $line = '<tr' . $trClass . '><td></td><td class="mw-enhanced-rc">';
+                       if ( isset( $data['recentChangesFlags'] ) ) {
+                               $line .= $this->recentChangesFlags( $data['recentChangesFlags'] );
+                               unset( $data['recentChangesFlags'] );
+                       }
+                       $line .= '&#160;</td><td class="mw-enhanced-rc-nested">';
+
+                       if ( isset( $data['timestampLink'] ) ) {
+                               $line .= '<span class="mw-enhanced-rc-time">' . $data['timestampLink'] . '</span>';
+                               unset( $data['timestampLink'] );
+                       }
+
+                       // everything else: makes it easier for extensions to add or remove data
+                       $line .= implode( '', $data );
 
-                       $r .= "</td></tr>\n";
+                       $line .= "</td></tr>\n";
+
+                       $r .= $line;
                }
                $r .= "</table>\n";
 
@@ -498,6 +526,8 @@ class EnhancedChangesList extends ChangesList {
         * @return string A HTML formatted line (generated using $r)
         */
        protected function recentChangesBlockLine( $rcObj ) {
+               $data = array();
+
                $query['curid'] = $rcObj->mAttribs['rc_cur_id'];
 
                $type = $rcObj->mAttribs['rc_type'];
@@ -512,32 +542,33 @@ class EnhancedChangesList extends ChangesList {
                }
                $classes[] = $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
                        ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
-               $r = Html::openElement( 'table', array( 'class' => $classes ) ) .
-                       Html::openElement( 'tr' );
 
-               $r .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
                # Flag and Timestamp
-               $r .= $this->recentChangesFlags( array(
+               $data['recentChangesFlags'] = array(
                        'newpage' => $type == RC_NEW,
                        'minor' => $rcObj->mAttribs['rc_minor'],
                        'unpatrolled' => $rcObj->unpatrolled,
                        'bot' => $rcObj->mAttribs['rc_bot'],
-               ) );
-               $r .= '&#160;' . $rcObj->timestamp . '&#160;</td><td>';
+               );
+               // timestamp is not really a link here, but is called timestampLink
+               // for consistency with EnhancedChangesListModifyLineData
+               $data['timestampLink'] = $rcObj->timestamp;
+
                # Article or log link
                if ( $logType ) {
                        $logPage = new LogPage( $logType );
                        $logTitle = SpecialPage::getTitleFor( 'Log', $logType );
                        $logName = $logPage->getName()->escaped();
-                       $r .= $this->msg( 'parentheses' )
+                       $data['logLink'] = $this->msg( 'parentheses' )
                                ->rawParams( Linker::linkKnown( $logTitle, $logName ) )->escaped();
                } else {
-                       $this->insertArticleLink( $r, $rcObj, $rcObj->unpatrolled, $rcObj->watched );
+                       $data['articleLink'] = $this->getArticleLink( $rcObj, $rcObj->unpatrolled, $rcObj->watched );
                }
+
                # Diff and hist links
                if ( $type != RC_LOG ) {
                        $query['action'] = 'history';
-                       $r .= ' ' . $this->msg( 'parentheses' )
+                       $data['historyLink'] = ' ' . $this->msg( 'parentheses' )
                                ->rawParams( $rcObj->difflink . $this->message['pipe-separator'] . Linker::linkKnown(
                                        $rcObj->getTitle(),
                                        $this->message['hist'],
@@ -545,31 +576,61 @@ class EnhancedChangesList extends ChangesList {
                                        $query
                                ) )->escaped();
                }
-               $r .= ' <span class="mw-changeslist-separator">. .</span> ';
+               $data['separatorAfterLinks'] = ' <span class="mw-changeslist-separator">. .</span> ';
+
                # Character diff
                if ( $this->getConfig()->get( 'RCShowChangedSize' ) ) {
                        $cd = $this->formatCharacterDifference( $rcObj );
                        if ( $cd !== '' ) {
-                               $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
+                               $data['characterDiff'] = $cd;
+                               $data['separatorAftercharacterDiff'] = ' <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
                if ( $type == RC_LOG ) {
-                       $r .= $this->insertLogEntry( $rcObj );
+                       $data['logEntry'] = $this->insertLogEntry( $rcObj );
                } else {
-                       $r .= ' ' . $rcObj->userlink . $rcObj->usertalklink;
-                       $r .= $this->insertComment( $rcObj );
-                       $this->insertRollback( $r, $rcObj );
+                       $data['userLink'] = $rcObj->userlink;
+                       $data['userTalkLink'] = $rcObj->usertalklink;
+                       $data['comment'] = $this->insertComment( $rcObj );
+                       $data['rollback'] = $this->getRollback( $rcObj );
                }
 
                # Tags
-               $this->insertTags( $r, $rcObj, $classes );
+               $data['tags'] = $this->getTags( $rcObj, $classes );
+
                # Show how many people are watching this if enabled
-               $r .= $this->numberofWatchingusers( $rcObj->numberofWatchingusers );
+               $data['watchingUsers'] = $this->numberofWatchingusers( $rcObj->numberofWatchingusers );
 
-               $r .= "</td></tr></table>\n";
+               // give the hook a chance to modify the data
+               $success = Hooks::run( 'EnhancedChangesListModifyBlockLineData',
+                       array( $this, &$data, $rcObj ) );
+               if ( !$success ) {
+                       // skip entry if hook aborted it
+                       return '';
+               }
 
-               return $r;
+               $line = Html::openElement( 'table', array( 'class' => $classes ) ) .
+                       Html::openElement( 'tr' );
+               $line .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
+
+               if ( isset( $data['recentChangesFlags'] ) ) {
+                       $line .= $this->recentChangesFlags( $data['recentChangesFlags'] );
+                       unset( $data['recentChangesFlags'] );
+               }
+
+               if ( isset( $data['timestampLink'] ) ) {
+                       $line .= '&#160;' . $data['timestampLink'];
+                       unset( $data['timestampLink'] );
+               }
+               $line .= '&#160;</td><td>';
+
+               // everything else: makes it easier for extensions to add or remove data
+               $line .= implode( '', $data );
+
+               $line .= "</td></tr></table>\n";
+
+               return $line;
        }
 
        /**
index 13e94db..77bf5df 100644 (file)
@@ -848,4 +848,21 @@ class RecentChange {
 
                return wfTimestamp( TS_UNIX, $timestamp ) > time() - $tolerance - $wgRCMaxAge;
        }
+
+       /**
+        * Parses and returns the rc_params attribute
+        *
+        * @since 1.26
+        *
+        * @return array|null
+        */
+       public function parseParams() {
+               $rcParams = $this->getAttribute( 'rc_params' );
+
+               MediaWiki\suppressWarnings();
+               $unserializedParams = unserialize( $rcParams );
+               MediaWiki\restoreWarnings();
+
+               return $unserializedParams;
+       }
 }
index 79763bd..95f4816 100644 (file)
@@ -417,21 +417,23 @@ class ChangeTags {
                        return Status::newFatal( 'tags-update-no-permission' );
                }
 
-               // to be added, a tag has to be explicitly defined
-               // @todo Allow extensions to define tags that can be applied by users...
-               $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
-               $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags );
-               if ( $diff ) {
-                       return self::restrictedTagError( 'tags-update-add-not-allowed-one',
-                               'tags-update-add-not-allowed-multi', $diff );
+               if ( $tagsToAdd ) {
+                       // to be added, a tag has to be explicitly defined
+                       // @todo Allow extensions to define tags that can be applied by users...
+                       $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
+                       $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags );
+                       if ( $diff ) {
+                               return self::restrictedTagError( 'tags-update-add-not-allowed-one',
+                                       'tags-update-add-not-allowed-multi', $diff );
+                       }
                }
 
-               // to be removed, a tag has to be either explicitly defined or not defined
-               // at all
-               $definedTags = self::listDefinedTags();
-               $diff = array_diff( $tagsToRemove, $explicitlyDefinedTags );
-               if ( $diff ) {
-                       $intersect = array_intersect( $diff, $definedTags );
+               if ( $tagsToRemove ) {
+                       // to be removed, a tag must not be defined by an extension, or equivalently it
+                       // has to be either explicitly defined or not defined at all
+                       // (assuming no edge case of a tag both explicitly-defined and extension-defined)
+                       $extensionDefinedTags = self::listExtensionDefinedTags();
+                       $intersect = array_intersect( $tagsToRemove, $extensionDefinedTags );
                        if ( $intersect ) {
                                return self::restrictedTagError( 'tags-update-remove-not-allowed-one',
                                        'tags-update-remove-not-allowed-multi', $intersect );
@@ -747,12 +749,6 @@ class ChangeTags {
                        return Status::newFatal( 'tags-manage-no-permission' );
                }
 
-               // non-existing tags cannot be activated
-               $tagUsage = self::tagUsageStatistics();
-               if ( !isset( $tagUsage[$tag] ) ) {
-                       return Status::newFatal( 'tags-activate-not-found', $tag );
-               }
-
                // defined tags cannot be activated (a defined tag is either extension-
                // defined, in which case the extension chooses whether or not to active it;
                // or user-defined, in which case it is considered active)
@@ -761,6 +757,12 @@ class ChangeTags {
                        return Status::newFatal( 'tags-activate-not-allowed', $tag );
                }
 
+               // non-existing tags cannot be activated
+               $tagUsage = self::tagUsageStatistics();
+               if ( !isset( $tagUsage[$tag] ) ) { // we already know the tag is undefined
+                       return Status::newFatal( 'tags-activate-not-found', $tag );
+               }
+
                return Status::newGood();
        }
 
@@ -885,7 +887,7 @@ class ChangeTags {
 
                // does the tag already exist?
                $tagUsage = self::tagUsageStatistics();
-               if ( isset( $tagUsage[$tag] ) ) {
+               if ( isset( $tagUsage[$tag] ) || in_array( $tag, self::listDefinedTags() ) ) {
                        return Status::newFatal( 'tags-create-already-exists', $tag );
                }
 
@@ -995,11 +997,11 @@ class ChangeTags {
                        return Status::newFatal( 'tags-manage-no-permission' );
                }
 
-               if ( !isset( $tagUsage[$tag] ) ) {
+               if ( !isset( $tagUsage[$tag] ) && !in_array( $tag, self::listDefinedTags() ) ) {
                        return Status::newFatal( 'tags-delete-not-found', $tag );
                }
 
-               if ( $tagUsage[$tag] > self::MAX_DELETE_USES ) {
+               if ( isset( $tagUsage[$tag] ) && $tagUsage[$tag] > self::MAX_DELETE_USES ) {
                        return Status::newFatal( 'tags-delete-too-many-uses', $tag, self::MAX_DELETE_USES );
                }
 
@@ -1044,6 +1046,7 @@ class ChangeTags {
 
                // store the tag usage statistics
                $tagUsage = self::tagUsageStatistics();
+               $hitcount = isset( $tagUsage[$tag] ) ? $tagUsage[$tag] : 0;
 
                // do it!
                $deleteResult = self::deleteTagEverywhere( $tag );
@@ -1052,7 +1055,7 @@ class ChangeTags {
                }
 
                // log it
-               $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $tagUsage[$tag] );
+               $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $hitcount );
                $deleteResult->value = $logId;
                return $deleteResult;
        }
@@ -1170,6 +1173,7 @@ class ChangeTags {
        /**
         * Returns a map of any tags used on the wiki to number of edits
         * tagged with them, ordered descending by the hitcount.
+        * This does not include tags defined somewhere that have never been applied.
         *
         * Keeps a short-term cache in memory, so calling this multiple times in the
         * same request should be fine.
@@ -1203,12 +1207,6 @@ class ChangeTags {
                                        $out[$row->ct_tag] = $row->hitcount;
                                }
 
-                               foreach ( ChangeTags::listDefinedTags() as $tag ) {
-                                       if ( !isset( $out[$tag] ) ) {
-                                               $out[$tag] = 0;
-                                       }
-                               }
-
                                return $out;
                        },
                        300,
diff --git a/includes/compat/CdbCompat.php b/includes/compat/CdbCompat.php
new file mode 100644 (file)
index 0000000..0074cc9
--- /dev/null
@@ -0,0 +1,45 @@
+<?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
+ */
+
+/***
+ * This file contains a set of backwards-compatability class names
+ * after the cdb functions were moved out into a separate library
+ * and put under a proper namespace
+ *
+ * @since 1.25
+ */
+
+/**
+ * @deprecated since 1.25
+ */
+abstract class CdbReader extends \Cdb\Reader {
+}
+
+/**
+ * @deprecated since 1.25
+ */
+abstract class CdbWriter extends \Cdb\Writer {
+}
+
+/**
+ * @deprecated since 1.25
+ */
+class CdbException extends \Cdb\Exception {
+}
diff --git a/includes/compat/normal/.gitignore b/includes/compat/normal/.gitignore
new file mode 100644 (file)
index 0000000..5af0afa
--- /dev/null
@@ -0,0 +1,6 @@
+/CompositionExclusions.txt
+/DerivedNormalizationProps.txt
+/NormalizationCorrections.txt
+/NormalizationTest.txt
+/UnicodeData.txt
+/testdata
diff --git a/includes/compat/normal/UtfNormal.php b/includes/compat/normal/UtfNormal.php
new file mode 100644 (file)
index 0000000..c9c05a0
--- /dev/null
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Unicode normalization routines
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+/**
+ * @defgroup UtfNormal UtfNormal
+ */
+
+use UtfNormal\Validator;
+
+/**
+ * Unicode normalization routines for working with UTF-8 strings.
+ * Currently assumes that input strings are valid UTF-8!
+ *
+ * Not as fast as I'd like, but should be usable for most purposes.
+ * UtfNormal::toNFC() will bail early if given ASCII text or text
+ * it can quickly determine is already normalized.
+ *
+ * All functions can be called static.
+ *
+ * See description of forms at http://www.unicode.org/reports/tr15/
+ *
+ * @deprecated since 1.25, use UtfNormal\Validator directly
+ * @ingroup UtfNormal
+ */
+class UtfNormal {
+       /**
+        * The ultimate convenience function! Clean up invalid UTF-8 sequences,
+        * and convert to normal form C, canonical composition.
+        *
+        * Fast return for pure ASCII strings; some lesser optimizations for
+        * strings containing only known-good characters. Not as fast as toNFC().
+        *
+        * @param string $string a UTF-8 string
+        * @return string a clean, shiny, normalized UTF-8 string
+        */
+       static function cleanUp( $string ) {
+               return Validator::cleanUp( $string );
+       }
+
+       /**
+        * Convert a UTF-8 string to normal form C, canonical composition.
+        * Fast return for pure ASCII strings; some lesser optimizations for
+        * strings containing only known-good characters.
+        *
+        * @param string $string a valid UTF-8 string. Input is not validated.
+        * @return string a UTF-8 string in normal form C
+        */
+       static function toNFC( $string ) {
+               return Validator::toNFC( $string );
+       }
+
+       /**
+        * Convert a UTF-8 string to normal form D, canonical decomposition.
+        * Fast return for pure ASCII strings.
+        *
+        * @param string $string a valid UTF-8 string. Input is not validated.
+        * @return string a UTF-8 string in normal form D
+        */
+       static function toNFD( $string ) {
+               return Validator::toNFD( $string );
+       }
+
+       /**
+        * Convert a UTF-8 string to normal form KC, compatibility composition.
+        * This may cause irreversible information loss, use judiciously.
+        * Fast return for pure ASCII strings.
+        *
+        * @param string $string a valid UTF-8 string. Input is not validated.
+        * @return string a UTF-8 string in normal form KC
+        */
+       static function toNFKC( $string ) {
+               return Validator::toNFKC( $string );
+       }
+
+       /**
+        * Convert a UTF-8 string to normal form KD, compatibility decomposition.
+        * This may cause irreversible information loss, use judiciously.
+        * Fast return for pure ASCII strings.
+        *
+        * @param string $string a valid UTF-8 string. Input is not validated.
+        * @return string a UTF-8 string in normal form KD
+        */
+       static function toNFKD( $string ) {
+               return Validator::toNFKD( $string );
+       }
+
+       /**
+        * Returns true if the string is _definitely_ in NFC.
+        * Returns false if not or uncertain.
+        * @param string $string a valid UTF-8 string. Input is not validated.
+        * @return bool
+        */
+       static function quickIsNFC( $string ) {
+               return Validator::quickIsNFC( $string );
+       }
+
+       /**
+        * Returns true if the string is _definitely_ in NFC.
+        * Returns false if not or uncertain.
+        * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
+        * @return bool
+        */
+       static function quickIsNFCVerify( &$string ) {
+               return Validator::quickIsNFCVerify( $string );
+       }
+}
diff --git a/includes/compat/normal/UtfNormalDefines.php b/includes/compat/normal/UtfNormalDefines.php
new file mode 100644 (file)
index 0000000..b8e44c7
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+/**
+ * Backwards-compatability constants which are now provided by the
+ * UtfNormal library. They are hardcoded here since they are needed
+ * before the composer autoloader is initialized.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 UtfNormal
+ */
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_FIRST', 0xac00 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LAST', 0xd7a3 );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LBASE', 0x1100 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_VBASE', 0x1161 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_TBASE', 0x11a7 );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LCOUNT', 19 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_VCOUNT', 21 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_TCOUNT', 28 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_NCOUNT', UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LEND', UNICODE_HANGUL_LBASE + UNICODE_HANGUL_LCOUNT - 1 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_VEND', UNICODE_HANGUL_VBASE + UNICODE_HANGUL_VCOUNT - 1 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_TEND', UNICODE_HANGUL_TBASE + UNICODE_HANGUL_TCOUNT - 1 );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_SURROGATE_FIRST', 0xd800 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_SURROGATE_LAST', 0xdfff );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_MAX', 0x10ffff );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_REPLACEMENT', 0xfffd );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_FIRST', "\xea\xb0\x80" /*codepointToUtf8( UNICODE_HANGUL_FIRST )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_LAST', "\xed\x9e\xa3" /*codepointToUtf8( UNICODE_HANGUL_LAST )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_LBASE', "\xe1\x84\x80" /*codepointToUtf8( UNICODE_HANGUL_LBASE )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_VBASE', "\xe1\x85\xa1" /*codepointToUtf8( UNICODE_HANGUL_VBASE )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_TBASE', "\xe1\x86\xa7" /*codepointToUtf8( UNICODE_HANGUL_TBASE )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_LEND', "\xe1\x84\x92" /*codepointToUtf8( UNICODE_HANGUL_LEND )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_VEND', "\xe1\x85\xb5" /*codepointToUtf8( UNICODE_HANGUL_VEND )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_TEND', "\xe1\x87\x82" /*codepointToUtf8( UNICODE_HANGUL_TEND )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_SURROGATE_FIRST', "\xed\xa0\x80" /*codepointToUtf8( UNICODE_SURROGATE_FIRST )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_SURROGATE_LAST', "\xed\xbf\xbf" /*codepointToUtf8( UNICODE_SURROGATE_LAST )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_MAX', "\xf4\x8f\xbf\xbf" /*codepointToUtf8( UNICODE_MAX )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_REPLACEMENT', "\xef\xbf\xbd" /*codepointToUtf8( UNICODE_REPLACEMENT )*/ );
+#define( 'UTF8_REPLACEMENT', '!' );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_OVERLONG_A', "\xc1\xbf" );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_OVERLONG_B', "\xe0\x9f\xbf" );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_OVERLONG_C', "\xf0\x8f\xbf\xbf" );
+
+# These two ranges are illegal
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FDD0', "\xef\xb7\x90" /*codepointToUtf8( 0xfdd0 )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FDEF', "\xef\xb7\xaf" /*codepointToUtf8( 0xfdef )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FFFE', "\xef\xbf\xbe" /*codepointToUtf8( 0xfffe )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FFFF', "\xef\xbf\xbf" /*codepointToUtf8( 0xffff )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HEAD', false );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_TAIL', true );
diff --git a/includes/compat/normal/UtfNormalUtil.php b/includes/compat/normal/UtfNormalUtil.php
new file mode 100644 (file)
index 0000000..9ed9bc2
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Some of these functions are adapted from places in MediaWiki.
+ * Should probably merge them for consistency.
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+
+use UtfNormal\Utils;
+
+/**
+ * Return UTF-8 sequence for a given Unicode code point.
+ *
+ * @param $codepoint Integer:
+ * @return String
+ * @throws InvalidArgumentException if fed out of range data.
+ * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function codepointToUtf8( $codepoint ) {
+       return Utils::codepointToUtf8( $codepoint );
+}
+
+/**
+ * Take a series of space-separated hexadecimal numbers representing
+ * Unicode code points and return a UTF-8 string composed of those
+ * characters. Used by UTF-8 data generation and testing routines.
+ *
+ * @param $sequence String
+ * @return String
+ * @throws InvalidArgumentException if fed out of range data.
+ * @private
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function hexSequenceToUtf8( $sequence ) {
+       return Utils::hexSequenceToUtf8( $sequence );
+}
+
+/**
+ * Take a UTF-8 string and return a space-separated series of hex
+ * numbers representing Unicode code points. For debugging.
+ *
+ * @fixme this is private but extensions + maint scripts are using it
+ * @param string $str UTF-8 string.
+ * @return string
+ * @private
+ */
+function utf8ToHexSequence( $str ) {
+       $buf = '';
+       foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
+               $buf .= sprintf( '%04x ', UtfNormal\Utils::utf8ToCodepoint( $cp ) );
+       }
+
+       return rtrim( $buf );
+}
+
+/**
+ * Determine the Unicode codepoint of a single-character UTF-8 sequence.
+ * Does not check for invalid input data.
+ *
+ * @param $char String
+ * @return Integer
+ * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function utf8ToCodepoint( $char ) {
+       return Utils::utf8ToCodepoint( $char );
+}
+
+/**
+ * Escape a string for inclusion in a PHP single-quoted string literal.
+ *
+ * @param string $string string to be escaped.
+ * @return String: escaped string.
+ * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function escapeSingleString( $string ) {
+       return Utils::escapeSingleString( $string );
+}
index a188e48..bf91a4f 100644 (file)
@@ -355,16 +355,20 @@ abstract class ContentHandler {
         *
         * @param string $name The content model ID, as given by a CONTENT_MODEL_XXX
         *    constant or returned by Revision::getContentModel().
+        * @param Language|null $lang The language to parse the message in (since 1.26)
         *
         * @throws MWException If the model ID isn't known.
         * @return string The content model's localized name.
         */
-       public static function getLocalizedName( $name ) {
+       public static function getLocalizedName( $name, Language $lang = null ) {
                // Messages: content-model-wikitext, content-model-text,
                // content-model-javascript, content-model-css
                $key = "content-model-$name";
 
                $msg = wfMessage( $key );
+               if ( $lang ) {
+                       $msg->inLanguage( $lang );
+               }
 
                return $msg->exists() ? $msg->plain() : $name;
        }
@@ -1023,7 +1027,7 @@ abstract class ContentHandler {
 
        /**
         * Returns true for content models that support caching using the
-        * ParserCache mechanism. See WikiPage::isParserCacheUsed().
+        * ParserCache mechanism. See WikiPage::shouldCheckParserCache().
         *
         * @since 1.21
         *
@@ -1132,7 +1136,7 @@ abstract class ContentHandler {
                        $handlers = Hooks::getHandlers( $event );
                        $handlerInfo = array();
 
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
 
                        foreach ( $handlers as $handler ) {
                                if ( is_array( $handler ) ) {
@@ -1155,7 +1159,7 @@ abstract class ContentHandler {
                                $handlerInfo[] = $info;
                        }
 
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        wfWarn( "Using obsolete hook $event via ContentHandler::runLegacyHooks()! Handlers: " .
                                implode( ', ', $handlerInfo ), 2 );
index 3b449b6..8beae39 100644 (file)
@@ -82,7 +82,6 @@ class WikitextContent extends TextContent {
                $text = $with->getNativeData();
 
                if ( strval( $sectionId ) === '' ) {
-
                        return $with; # XXX: copy first?
                }
 
index 00323ca..aaa1fa7 100644 (file)
@@ -67,6 +67,11 @@ class DerivativeContext extends ContextSource {
         */
        private $config;
 
+       /**
+        * @var Stats
+        */
+       private $stats;
+
        /**
         * Constructor
         * @param IContextSource $context Context to inherit from
index 4e790c0..e676ec9 100644 (file)
@@ -131,7 +131,7 @@ class RequestContext implements IContextSource {
        public function getStats() {
                if ( $this->stats === null ) {
                        $config = $this->getConfig();
-                       $prefix = $config->has( 'StatsdMetricPrefix' )
+                       $prefix = $config->get( 'StatsdMetricPrefix' )
                                ? rtrim( $config->get( 'StatsdMetricPrefix' ), '.' )
                                : 'MediaWiki';
                        $this->stats = new BufferingStatsdDataFactory( $prefix );
@@ -380,7 +380,6 @@ class RequestContext implements IContextSource {
         */
        public function getSkin() {
                if ( $this->skin === null ) {
-
                        $skin = null;
                        Hooks::run( 'RequestContextCreateSkin', array( $this, &$skin ) );
                        $factory = SkinFactory::getDefaultInstance();
index 97073dd..e74fe80 100644 (file)
@@ -915,10 +915,6 @@ abstract class DatabaseBase implements IDatabase {
                // Although postgres and oracle support schemas, we don't use them (yet)
                // to maintain backwards compatibility
                $defaultSchemas = array(
-                       'mysql' => null,
-                       'postgres' => null,
-                       'sqlite' => null,
-                       'oracle' => null,
                        'mssql' => 'get from global',
                );
 
@@ -932,7 +928,9 @@ abstract class DatabaseBase implements IDatabase {
                        $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0;
                        $p['variables'] = isset( $p['variables'] ) ? $p['variables'] : array();
                        $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global';
-                       $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType];
+                       if ( !isset( $p['schema'] ) ) {
+                               $p['schema'] = isset( $defaultSchemas[$dbType] ) ? $defaultSchemas[$dbType] : null;
+                       }
                        $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false;
 
                        return new $class( $p );
@@ -1021,6 +1019,17 @@ abstract class DatabaseBase implements IDatabase {
                return $closed;
        }
 
+       /**
+        * Make sure isOpen() returns true as a sanity check
+        *
+        * @throws DBUnexpectedError
+        */
+       protected function assertOpen() {
+               if ( !$this->isOpen() ) {
+                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
+               }
+       }
+
        /**
         * Closes underlying database connection
         * @since 1.20
@@ -1177,9 +1186,7 @@ abstract class DatabaseBase implements IDatabase {
                $queryId = MWDebug::query( $sql, $fname, $isMaster );
 
                # Avoid fatals if close() was called
-               if ( !$this->isOpen() ) {
-                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
-               }
+               $this->assertOpen();
 
                # Do the query and handle errors
                $startTime = microtime( true );
@@ -3650,9 +3657,7 @@ abstract class DatabaseBase implements IDatabase {
                }
 
                # Avoid fatals if close() was called
-               if ( !$this->isOpen() ) {
-                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
-               }
+               $this->assertOpen();
 
                $this->doBegin( $fname );
                $this->mTrxTimestamp = microtime( true );
@@ -3717,9 +3722,7 @@ abstract class DatabaseBase implements IDatabase {
                }
 
                # Avoid fatals if close() was called
-               if ( !$this->isOpen() ) {
-                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
-               }
+               $this->assertOpen();
 
                $this->runOnTransactionPreCommitCallbacks();
                $writeTime = $this->pendingWriteQueryDuration();
@@ -3776,9 +3779,7 @@ abstract class DatabaseBase implements IDatabase {
                }
 
                # Avoid fatals if close() was called
-               if ( !$this->isOpen() ) {
-                       throw new DBUnexpectedError( $this, "DB connection was already closed." );
-               }
+               $this->assertOpen();
 
                $this->doRollback( $fname );
                $this->mTrxIdleCallbacks = array(); // cancel
@@ -3831,6 +3832,7 @@ abstract class DatabaseBase implements IDatabase {
         * @param string $prefix Only show tables with this prefix, e.g. mw_
         * @param string $fname Calling function name
         * @throws MWException
+        * @return array
         */
        function listTables( $prefix = null, $fname = __METHOD__ ) {
                throw new MWException( 'DatabaseBase::listTables is not implemented in descendant class' );
@@ -3853,6 +3855,7 @@ abstract class DatabaseBase implements IDatabase {
         * @param string $prefix Only show VIEWs with this prefix, eg. unit_test_
         * @param string $fname Name of calling function
         * @throws MWException
+        * @return array
         * @since 1.22
         */
        public function listViews( $prefix = null, $fname = __METHOD__ ) {
@@ -3864,6 +3867,7 @@ abstract class DatabaseBase implements IDatabase {
         *
         * @param string $name Name of the database-structure to test.
         * @throws MWException
+        * @return bool
         * @since 1.22
         */
        public function isView( $name ) {
@@ -4025,9 +4029,9 @@ abstract class DatabaseBase implements IDatabase {
        public function sourceFile(
                $filename, $lineCallback = false, $resultCallback = false, $fname = false, $inputCallback = false
        ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $fp = fopen( $filename, 'r' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( false === $fp ) {
                        throw new MWException( "Could not open \"{$filename}\".\n" );
index 2b8f395..85f1b96 100644 (file)
@@ -119,9 +119,9 @@ class DatabaseMssql extends DatabaseBase {
                        $connectionInfo['PWD'] = $password;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $this->mConn = sqlsrv_connect( $server, $connectionInfo );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $this->mConn === false ) {
                        throw new DBConnectionError( $this, $this->lastError() );
@@ -1089,7 +1089,9 @@ class DatabaseMssql extends DatabaseBase {
         * @param string $s
         * @return string
         */
-       public function strencode( $s ) { # Should not be called by us
+       public function strencode( $s ) {
+               // Should not be called by us
+
                return str_replace( "'", "''", $s );
        }
 
index 823d9b6..5b15147 100644 (file)
@@ -33,10 +33,12 @@ class DatabaseMysql extends DatabaseMysqlBase {
         * @return resource False on error
         */
        protected function doQuery( $sql ) {
+               $conn = $this->getBindingHandle();
+
                if ( $this->bufferResults() ) {
-                       $ret = mysql_query( $sql, $this->mConn );
+                       $ret = mysql_query( $sql, $conn );
                } else {
-                       $ret = mysql_unbuffered_query( $sql, $this->mConn );
+                       $ret = mysql_unbuffered_query( $sql, $conn );
                }
 
                return $ret;
@@ -48,8 +50,7 @@ class DatabaseMysql extends DatabaseMysqlBase {
         * @throws DBConnectionError
         */
        protected function mysqlConnect( $realServer ) {
-               # Fail now
-               # Otherwise we get a suppressed fatal error, which is very hard to track down
+               # Avoid a suppressed fatal error, which is very hard to track down
                if ( !extension_loaded( 'mysql' ) ) {
                        throw new DBConnectionError(
                                $this,
@@ -73,6 +74,9 @@ class DatabaseMysql extends DatabaseMysqlBase {
 
                $conn = false;
 
+               # The kernel's default SYN retransmission period is far too slow for us,
+               # so we use a short timeout plus a manual retry. Retrying means that a small
+               # but finite rate of SYN packet loss won't cause user-visible errors.
                for ( $i = 0; $i < $numAttempts && !$conn; $i++ ) {
                        if ( $i > 1 ) {
                                usleep( 1000 );
@@ -93,8 +97,10 @@ class DatabaseMysql extends DatabaseMysqlBase {
         * @return bool
         */
        protected function mysqlSetCharset( $charset ) {
+               $conn = $this->getBindingHandle();
+
                if ( function_exists( 'mysql_set_charset' ) ) {
-                       return mysql_set_charset( $charset, $this->mConn );
+                       return mysql_set_charset( $charset, $conn );
                } else {
                        return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
                }
@@ -104,14 +110,18 @@ class DatabaseMysql extends DatabaseMysqlBase {
         * @return bool
         */
        protected function closeConnection() {
-               return mysql_close( $this->mConn );
+               $conn = $this->getBindingHandle();
+
+               return mysql_close( $conn );
        }
 
        /**
         * @return int
         */
        function insertId() {
-               return mysql_insert_id( $this->mConn );
+               $conn = $this->getBindingHandle();
+
+               return mysql_insert_id( $conn );
        }
 
        /**
@@ -129,7 +139,9 @@ class DatabaseMysql extends DatabaseMysqlBase {
         * @return int
         */
        function affectedRows() {
-               return mysql_affected_rows( $this->mConn );
+               $conn = $this->getBindingHandle();
+
+               return mysql_affected_rows( $conn );
        }
 
        /**
@@ -137,9 +149,11 @@ class DatabaseMysql extends DatabaseMysqlBase {
         * @return bool
         */
        function selectDB( $db ) {
+               $conn = $this->getBindingHandle();
+
                $this->mDBname = $db;
 
-               return mysql_select_db( $db, $this->mConn );
+               return mysql_select_db( $db, $conn );
        }
 
        protected function mysqlFreeResult( $res ) {
@@ -183,10 +197,14 @@ class DatabaseMysql extends DatabaseMysqlBase {
        }
 
        protected function mysqlRealEscapeString( $s ) {
-               return mysql_real_escape_string( $s, $this->mConn );
+               $conn = $this->getBindingHandle();
+
+               return mysql_real_escape_string( $s, $conn );
        }
 
        protected function mysqlPing() {
-               return mysql_ping( $this->mConn );
+               $conn = $this->getBindingHandle();
+
+               return mysql_ping( $conn );
        }
 }
index 561c811..e326909 100644 (file)
@@ -59,22 +59,16 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        function open( $server, $user, $password, $dbName ) {
                global $wgAllDBsAreLocalhost, $wgSQLMode;
 
-               # Debugging hack -- fake cluster
-               if ( $wgAllDBsAreLocalhost ) {
-                       $realServer = 'localhost';
-               } else {
-                       $realServer = $server;
-               }
+               # Close/unset connection handle
                $this->close();
+
+               # Debugging hack -- fake cluster
+               $realServer = $wgAllDBsAreLocalhost ? 'localhost' : $server;
                $this->mServer = $server;
                $this->mUser = $user;
                $this->mPassword = $password;
                $this->mDBname = $dbName;
 
-               # The kernel's default SYN retransmission period is far too slow for us,
-               # so we use a short timeout plus a manual retry. Retrying means that a small
-               # but finite rate of SYN packet loss won't cause user-visible errors.
-               $this->mConn = false;
                $this->installErrorHandler();
                try {
                        $this->mConn = $this->mysqlConnect( $realServer );
@@ -104,9 +98,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                }
 
                if ( $dbName != '' ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $success = $this->selectDB( $dbName );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( !$success ) {
                                wfLogDBError(
                                        "Error selecting database {db_name} on server {db_server}",
@@ -203,9 +197,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $ok = $this->mysqlFreeResult( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$ok ) {
                        throw new DBUnexpectedError( $this, "Unable to free MySQL result" );
                }
@@ -228,9 +222,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $row = $this->mysqlFetchObject( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                $errno = $this->lastErrno();
                // Unfortunately, mysql_fetch_object does not reset the last errno.
@@ -264,9 +258,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $row = $this->mysqlFetchArray( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                $errno = $this->lastErrno();
                // Unfortunately, mysql_fetch_array does not reset the last errno.
@@ -300,9 +294,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $n = $this->mysqlNumRows( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                // Unfortunately, mysql_num_rows does not reset the last errno.
                // We are not checking for any errors here, since
@@ -413,12 +407,12 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        function lastError() {
                if ( $this->mConn ) {
                        # Even if it's non-zero, it can still be invalid
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $error = $this->mysqlError( $this->mConn );
                        if ( !$error ) {
                                $error = $this->mysqlError();
                        }
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                } else {
                        $error = $this->mysqlError();
                }
@@ -586,9 +580,12 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        function ping() {
                $ping = $this->mysqlPing();
                if ( $ping ) {
+                       // Connection was good or lost but reconnected...
+                       // @note: mysqlnd (php 5.6+) does not support this (PHP bug 52561)
                        return true;
                }
 
+               // Try a full disconnect/reconnect cycle if ping() failed
                $this->closeConnection();
                $this->mOpened = false;
                $this->mConn = false;
@@ -1058,6 +1055,28 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        ( $this->lastErrno() == 1290 && strpos( $this->lastError(), '--read-only' ) !== false );
        }
 
+       /**
+        * Get the underlying binding handle, mConn
+        *
+        * Makes sure that mConn is set (disconnects and ping() failure can unset it).
+        * This catches broken callers than catch and ignore disconnection exceptions.
+        * Unlike checking isOpen(), this is safe to call inside of open().
+        *
+        * @return resource|object
+        * @throws DBUnexpectedError
+        * @since 1.26
+        */
+       protected function getBindingHandle() {
+               if ( !$this->mConn ) {
+                       throw new DBUnexpectedError(
+                               $this,
+                               'DB connection was already closed or the connection dropped.'
+                       );
+               }
+
+               return $this->mConn;
+       }
+
        /**
         * @param string $oldName
         * @param string $newName
index d2b5ecb..8ca2362 100644 (file)
  * @see Database
  */
 class DatabaseMysqli extends DatabaseMysqlBase {
+       /** @var mysqli */
+       protected $mConn;
+
        /**
         * @param string $sql
         * @return resource
         */
        protected function doQuery( $sql ) {
+               $conn = $this->getBindingHandle();
+
                if ( $this->bufferResults() ) {
-                       $ret = $this->mConn->query( $sql );
+                       $ret = $conn->query( $sql );
                } else {
-                       $ret = $this->mConn->query( $sql, MYSQLI_USE_RESULT );
+                       $ret = $conn->query( $sql, MYSQLI_USE_RESULT );
                }
 
                return $ret;
@@ -50,8 +55,8 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         */
        protected function mysqlConnect( $realServer ) {
                global $wgDBmysql5;
-               # Fail now
-               # Otherwise we get a suppressed fatal error, which is very hard to track down
+
+               # Avoid suppressed fatal error, which is very hard to track down
                if ( !function_exists( 'mysqli_init' ) ) {
                        throw new DBConnectionError( $this, "MySQLi functions missing,"
                                . " have you compiled PHP with the --with-mysqli option?\n" );
@@ -116,8 +121,10 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return bool
         */
        protected function mysqlSetCharset( $charset ) {
-               if ( method_exists( $this->mConn, 'set_charset' ) ) {
-                       return $this->mConn->set_charset( $charset );
+               $conn = $this->getBindingHandle();
+
+               if ( method_exists( $conn, 'set_charset' ) ) {
+                       return $conn->set_charset( $charset );
                } else {
                        return $this->query( 'SET NAMES ' . $charset, __METHOD__ );
                }
@@ -127,14 +134,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return bool
         */
        protected function closeConnection() {
-               return $this->mConn->close();
+               $conn = $this->getBindingHandle();
+
+               return $conn->close();
        }
 
        /**
         * @return int
         */
        function insertId() {
-               return (int)$this->mConn->insert_id;
+               $conn = $this->getBindingHandle();
+
+               return (int)$conn->insert_id;
        }
 
        /**
@@ -152,7 +163,9 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return int
         */
        function affectedRows() {
-               return $this->mConn->affected_rows;
+               $conn = $this->getBindingHandle();
+
+               return $conn->affected_rows;
        }
 
        /**
@@ -160,9 +173,11 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return bool
         */
        function selectDB( $db ) {
+               $conn = $this->getBindingHandle();
+
                $this->mDBname = $db;
 
-               return $this->mConn->select_db( $db );
+               return $conn->select_db( $db );
        }
 
        /**
@@ -289,11 +304,15 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return string
         */
        protected function mysqlRealEscapeString( $s ) {
-               return $this->mConn->real_escape_string( $s );
+               $conn = $this->getBindingHandle();
+
+               return $conn->real_escape_string( $s );
        }
 
        protected function mysqlPing() {
-               return $this->mConn->ping();
+               $conn = $this->getBindingHandle();
+
+               return $conn->ping();
        }
 
        /**
index 9b00fbd..081174a 100644 (file)
@@ -220,9 +220,9 @@ class DatabaseOracle extends DatabaseBase {
 
        function __destruct() {
                if ( $this->mOpened ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $this->close();
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
        }
 
@@ -306,7 +306,7 @@ class DatabaseOracle extends DatabaseBase {
 
                $session_mode = $this->mFlags & DBO_SYSDBA ? OCI_SYSDBA : OCI_DEFAULT;
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                if ( $this->mFlags & DBO_PERSISTENT ) {
                        $this->mConn = oci_pconnect(
                                $this->mUser,
@@ -332,7 +332,7 @@ class DatabaseOracle extends DatabaseBase {
                                $session_mode
                        );
                }
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $this->mUser != $this->mDBname ) {
                        //change current schema in session
@@ -393,7 +393,7 @@ class DatabaseOracle extends DatabaseBase {
                        $explain_count
                );
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
 
                if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) {
                        $e = oci_error( $this->mConn );
@@ -411,7 +411,7 @@ class DatabaseOracle extends DatabaseBase {
                        }
                }
 
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $explain_count > 0 ) {
                        return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table ' .
@@ -687,7 +687,7 @@ class DatabaseOracle extends DatabaseBase {
                        }
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
 
                if ( oci_execute( $stmt, $this->execFlags() ) === false ) {
                        $e = oci_error( $stmt );
@@ -702,7 +702,7 @@ class DatabaseOracle extends DatabaseBase {
                        $this->mAffectedRows = oci_num_rows( $stmt );
                }
 
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( isset( $lob ) ) {
                        foreach ( $lob as $lob_v ) {
@@ -1250,9 +1250,9 @@ class DatabaseOracle extends DatabaseBase {
                }
                $sql = 'ALTER SESSION SET CURRENT_SCHEMA=' . strtoupper( $db );
                $stmt = oci_parse( $this->mConn, $sql );
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $success = oci_execute( $stmt );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$success ) {
                        $e = oci_error( $stmt );
                        if ( $e['code'] != '1435' ) {
@@ -1491,7 +1491,7 @@ class DatabaseOracle extends DatabaseBase {
                        }
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
 
                if ( oci_execute( $stmt, $this->execFlags() ) === false ) {
                        $e = oci_error( $stmt );
@@ -1506,7 +1506,7 @@ class DatabaseOracle extends DatabaseBase {
                        $this->mAffectedRows = oci_num_rows( $stmt );
                }
 
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( isset( $lob ) ) {
                        foreach ( $lob as $lob_v ) {
index 9287f7a..9ad76ab 100644 (file)
@@ -551,9 +551,9 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $ok = pg_free_result( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$ok ) {
                        throw new DBUnexpectedError( $this, "Unable to free Postgres result\n" );
                }
@@ -568,9 +568,9 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $row = pg_fetch_object( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                # @todo FIXME: HACK HACK HACK HACK debug
 
                # @todo hashar: not sure if the following test really trigger if the object
@@ -589,9 +589,9 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $row = pg_fetch_array( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( pg_last_error( $this->mConn ) ) {
                        throw new DBUnexpectedError(
                                $this,
@@ -606,9 +606,9 @@ class DatabasePostgres extends DatabaseBase {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $n = pg_num_rows( $res );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( pg_last_error( $this->mConn ) ) {
                        throw new DBUnexpectedError(
                                $this,
@@ -1510,7 +1510,9 @@ SQL;
                return pg_unescape_bytea( $b );
        }
 
-       function strencode( $s ) { # Should not be called by us
+       function strencode( $s ) {
+               // Should not be called by us
+
                return pg_escape_string( $this->mConn, $s );
        }
 
@@ -1702,4 +1704,5 @@ SQL;
        }
 } // end DatabasePostgres class
 
-class PostgresBlob extends Blob {}
+class PostgresBlob extends Blob {
+}
index 99c9a14..52dca08 100644 (file)
@@ -60,8 +60,6 @@ class LoadBalancer {
        private $mLastError = 'Unknown error';
        /** @var integer Total connections opened */
        private $connsOpened = 0;
-       /** @var ProcessCacheLRU */
-       private $mProcCache;
 
        /** @var integer Warn when this many connection are held */
        const CONN_HELD_WARN_THRESHOLD = 10;
@@ -113,8 +111,6 @@ class LoadBalancer {
                                }
                        }
                }
-
-               $this->mProcCache = new ProcessCacheLRU( 30 );
        }
 
        /**
@@ -538,7 +534,6 @@ class LoadBalancer {
                # Now we have an explicit index into the servers array
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
-
                        return $this->reportConnectionError();
                }
 
@@ -651,10 +646,7 @@ class LoadBalancer {
        public function openConnection( $i, $wiki = false ) {
                if ( $wiki !== false ) {
                        $conn = $this->openForeignConnection( $i, $wiki );
-
-                       return $conn;
-               }
-               if ( isset( $this->mConns['local'][$i][0] ) ) {
+               } elseif ( isset( $this->mConns['local'][$i][0] ) ) {
                        $conn = $this->mConns['local'][$i][0];
                } else {
                        $server = $this->mServers[$i];
@@ -671,6 +663,15 @@ class LoadBalancer {
                        }
                }
 
+               if ( $conn && !$conn->isOpen() ) {
+                       // Connection was made but later unrecoverably lost for some reason.
+                       // Do not return a handle that will just throw exceptions on use,
+                       // but let the calling code (e.g. getReaderIndex) try another server.
+                       // See DatabaseMyslBase::ping() for how this can happen.
+                       $this->mErrorConnection = $conn;
+                       $conn = false;
+               }
+
                return $conn;
        }
 
@@ -1235,16 +1236,8 @@ class LoadBalancer {
                        return array( 0 => 0 ); // no replication = no lag
                }
 
-               if ( $this->mProcCache->has( 'slave_lag', 'times', 1 ) ) {
-                       return $this->mProcCache->get( 'slave_lag', 'times' );
-               }
-
                # Send the request to the load monitor
-               $times = $this->getLoadMonitor()->getLagTimes( array_keys( $this->mServers ), $wiki );
-
-               $this->mProcCache->set( 'slave_lag', 'times', $times );
-
-               return $times;
+               return $this->getLoadMonitor()->getLagTimes( array_keys( $this->mServers ), $wiki );
        }
 
        /**
@@ -1271,8 +1264,10 @@ class LoadBalancer {
 
        /**
         * Clear the cache for slag lag delay times
+        *
+        * This is only used for testing
         */
        public function clearLagTimeCache() {
-               $this->mProcCache->clear( 'slave_lag' );
+               $this->getLoadMonitor()->clearCaches();
        }
 }
index 8c4d0ed..7dc2da0 100644 (file)
@@ -75,13 +75,17 @@ class LoadMonitorMySQL implements LoadMonitor {
        /** @var LoadBalancer */
        public $parent;
        /** @var BagOStuff */
-       protected $cache;
+       protected $srvCache;
+       /** @var BagOStuff */
+       protected $mainCache;
 
        public function __construct( $parent ) {
                global $wgMemc;
 
                $this->parent = $parent;
-               $this->cache = $wgMemc ?: wfGetMainCache();
+
+               $this->srvCache = ObjectCache::newAccelerator( array(), 'hash' );
+               $this->mainCache = $wgMemc ?: wfGetMainCache();
        }
 
        public function scaleLoads( &$loads, $group = false, $wiki = false ) {
@@ -89,65 +93,79 @@ class LoadMonitorMySQL implements LoadMonitor {
 
        public function getLagTimes( $serverIndexes, $wiki ) {
                if ( count( $serverIndexes ) == 1 && reset( $serverIndexes ) == 0 ) {
-                       // Single server only, just return zero without caching
+                       # Single server only, just return zero without caching
                        return array( 0 => 0 );
                }
 
-               $expiry = 5;
-               $requestRate = 10;
-
-               $cache = $this->cache;
-               $masterName = $this->parent->getServerName( 0 );
-               $memcKey = wfMemcKey( 'lag_times', $masterName );
-               $times = $cache->get( $memcKey );
-               if ( is_array( $times ) ) {
-                       # Randomly recache with probability rising over $expiry
-                       $elapsed = time() - $times['timestamp'];
-                       $chance = max( 0, ( $expiry - $elapsed ) * $requestRate );
-                       if ( mt_rand( 0, $chance ) != 0 ) {
-                               unset( $times['timestamp'] ); // hide from caller
-
-                               return $times;
-                       }
-                       wfIncrStats( 'lag_cache.miss.expired' );
-               } else {
-                       wfIncrStats( 'lag_cache.miss.absent' );
+               $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;
 
-               # Cache key missing or expired
-               if ( $cache->lock( $memcKey, 0, 10 ) ) {
+               # (c) Cache key missing or expired; regenerate and backfill
+               if ( $this->mainCache->lock( $key, 0, 10 ) ) {
                        # Let this process alone update the cache value
-                       $unlocker = new ScopedCallback( function () use ( $cache, $memcKey ) {
-                               $cache->unlock( $memcKey );
+                       $cache = $this->mainCache;
+                       $unlocker = new ScopedCallback( function () use ( $cache, $key ) {
+                               $cache->unlock( $key );
                        } );
-               } elseif ( is_array( $times ) ) {
+               } elseif ( $staleValue ) {
                        # Could not acquire lock but an old cache exists, so use it
-                       unset( $times['timestamp'] ); // hide from caller
-
-                       return $times;
+                       return $value['lagTimes'];
                }
 
-               $times = array();
+               $lagTimes = array();
                foreach ( $serverIndexes as $i ) {
                        if ( $i == 0 ) { # Master
-                               $times[$i] = 0;
+                               $lagTimes[$i] = 0;
                        } elseif ( false !== ( $conn = $this->parent->getAnyOpenConnection( $i ) ) ) {
-                               $times[$i] = $conn->getLag();
+                               $lagTimes[$i] = $conn->getLag();
                        } elseif ( false !== ( $conn = $this->parent->openConnection( $i, $wiki ) ) ) {
-                               $times[$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.
+                               $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
-               $times['timestamp'] = time();
-               $cache->set( $memcKey, $times, $expiry + 10 );
-               unset( $times['timestamp'] ); // hide from caller
+               $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 );
+       }
 
-               return $times;
+       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' );
        }
 }
index 6027375..6bd6411 100644 (file)
@@ -181,7 +181,7 @@ class LegacyLogger extends AbstractLogger {
                } elseif ( $channel === 'profileoutput' ) {
                        // Legacy wfLogProfilingData formatitng
                        $forward = '';
-                       if ( isset( $context['forwarded_for'] )) {
+                       if ( isset( $context['forwarded_for'] ) ) {
                                $forward = " forwarded for {$context['forwarded_for']}";
                        }
                        if ( isset( $context['client_ip'] ) ) {
@@ -365,7 +365,7 @@ class LegacyLogger extends AbstractLogger {
                        $transport = UDPTransport::newFromString( $file );
                        $transport->emit( $text );
                } else {
-                       wfSuppressWarnings();
+                       \MediaWiki\suppressWarnings();
                        $exists = file_exists( $file );
                        $size = $exists ? filesize( $file ) : false;
                        if ( !$exists ||
@@ -373,7 +373,7 @@ class LegacyLogger extends AbstractLogger {
                        ) {
                                file_put_contents( $file, $text, FILE_APPEND );
                        }
-                       wfRestoreWarnings();
+                       \MediaWiki\restoreWarnings();
                }
        }
 
index 20e4a4c..a480aec 100644 (file)
@@ -56,7 +56,6 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 100 );
                if ( $count >= 100 ) { // many backlinks
                        JobQueueGroup::singleton()->lazyPush( $job );
-                       JobQueueGroup::singleton()->deduplicateRootJob( $job );
                } else { // few backlinks ($count might be off even if 0)
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->onTransactionIdle( function () use ( $job ) {
index e4f00e7..e9ec7ff 100644 (file)
@@ -267,7 +267,6 @@ class LinksUpdate extends SqlDataUpdate {
                        );
 
                        JobQueueGroup::singleton()->push( $job );
-                       JobQueueGroup::singleton()->deduplicateRootJob( $job );
                }
        }
 
@@ -996,15 +995,27 @@ class LinksDeletionUpdate extends SqlDataUpdate {
 
                # If using cleanup triggers, we can skip some manual deletes
                if ( !$this->mDb->cleanupTriggers() ) {
-                       # Clean up recentchanges entries...
-                       $this->mDb->delete( 'recentchanges',
-                               array( 'rc_type != ' . RC_LOG,
+                       # Find recentchanges entries to clean up...
+                       $rcIdsForTitle = $this->mDb->selectFieldValues( 'recentchanges',
+                               'rc_id',
+                               array(
+                                       'rc_type != ' . RC_LOG,
                                        'rc_namespace' => $title->getNamespace(),
-                                       'rc_title' => $title->getDBkey() ),
-                               __METHOD__ );
-                       $this->mDb->delete( 'recentchanges',
+                                       'rc_title' => $title->getDBkey()
+                               ),
+                               __METHOD__
+                       );
+                       $rcIdsForPage = $this->mDb->selectFieldValues( 'recentchanges',
+                               'rc_id',
                                array( 'rc_type != ' . RC_LOG, 'rc_cur_id' => $id ),
-                               __METHOD__ );
+                               __METHOD__
+                       );
+
+                       # T98706: delete PK to avoid lock contention with RC delete log insertions
+                       $rcIds = array_merge( $rcIdsForTitle, $rcIdsForPage );
+                       if ( $rcIds ) {
+                               $this->mDb->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
+                       }
                }
        }
 
index 07a0522..c138eec 100644 (file)
@@ -685,24 +685,20 @@ class DifferenceEngine extends ContextSource {
                $this->mCacheHit = true;
                // Check if the diff should be hidden from this user
                if ( !$this->loadRevisionData() ) {
-
                        return false;
                } elseif ( $this->mOldRev &&
                        !$this->mOldRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
                ) {
-
                        return false;
                } elseif ( $this->mNewRev &&
                        !$this->mNewRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
                ) {
-
                        return false;
                }
                // Short-circuit
                if ( $this->mOldRev === false || ( $this->mOldRev && $this->mNewRev
                        && $this->mOldRev->getID() == $this->mNewRev->getID() )
                ) {
-
                        return '';
                }
                // Cacheable?
@@ -726,7 +722,6 @@ class DifferenceEngine extends ContextSource {
 
                // Loadtext is permission safe, this just clears out the diff
                if ( !$this->loadText() ) {
-
                        return false;
                }
 
@@ -859,12 +854,10 @@ class DifferenceEngine extends ContextSource {
 
                        $tempFile1 = fopen( $tempName1, "w" );
                        if ( !$tempFile1 ) {
-
                                return false;
                        }
                        $tempFile2 = fopen( $tempName2, "w" );
                        if ( !$tempFile2 ) {
-
                                return false;
                        }
                        fwrite( $tempFile1, $otext );
@@ -1040,7 +1033,7 @@ class DifferenceEngine extends ContextSource {
                        $key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold';
                        $msg = $this->msg( $key )->escaped();
                        $editLink = $this->msg( 'parentheses' )->rawParams(
-                               Linker::linkKnown( $title, $msg, array( ), $editQuery ) )->escaped();
+                               Linker::linkKnown( $title, $msg, array(), $editQuery ) )->escaped();
                        $header .= ' ' . Html::rawElement(
                                'span',
                                array( 'class' => 'mw-diff-edit' ),
index d3ee9b9..b910ec6 100644 (file)
@@ -74,9 +74,7 @@ class HttpError extends MWException {
        public function report() {
                $this->doLog();
 
-               $httpMessage = HttpStatus::getMessage( $this->httpCode );
-
-               header( "Status: {$this->httpCode} {$httpMessage}", true, $this->httpCode );
+               HttpStatus::header( $this->httpCode );
                header( 'Content-type: text/html; charset=utf-8' );
 
                print $this->getHTML();
index e54e568..c0186f9 100644 (file)
@@ -238,8 +238,7 @@ class MWException extends Exception {
                } elseif ( self::isCommandLine() ) {
                        MWExceptionHandler::printError( $this->getText() );
                } else {
-                       self::header( 'HTTP/1.1 500 Internal Server Error' );
-                       self::header( 'Status: 500 Internal Server Error' );
+                       self::statusHeader( 500 );
                        self::header( "Content-Type: $wgMimeType; charset=utf-8" );
 
                        $this->reportHTML();
@@ -266,4 +265,9 @@ class MWException extends Exception {
                        header( $header );
                }
        }
+       private static function statusHeader( $code ) {
+               if ( !headers_sent() ) {
+                       HttpStatus::header( $code );
+               }
+       }
 }
index a58705f..1681dc0 100644 (file)
@@ -502,7 +502,7 @@ TXT;
                global $wgLogExceptionBacktrace;
 
                // The set_error_handler callback is independent from error_reporting.
-               // Filter out unwanted errors manually (e.g. when wfSuppressWarnings 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 );
index 6ee9b2e..213bb87 100644 (file)
@@ -75,9 +75,9 @@ class FSFile {
         * @return string|bool TS_MW timestamp or false on failure
         */
        public function getTimestamp() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $timestamp = filemtime( $this->path );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $timestamp !== false ) {
                        $timestamp = wfTimestamp( TS_MW, $timestamp );
                }
@@ -200,13 +200,12 @@ class FSFile {
        public function getSha1Base36( $recache = false ) {
 
                if ( $this->sha1Base36 !== null && !$recache ) {
-
                        return $this->sha1Base36;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $this->sha1Base36 = sha1_file( $this->path );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $this->sha1Base36 !== false ) {
                        $this->sha1Base36 = wfBaseConvert( $this->sha1Base36, 16, 36, 31 );
index f2d13ee..d27d2c6 100644 (file)
@@ -328,8 +328,8 @@ class FileBackendMultiWrite extends FileBackend {
                                $cStat = $cBackend->getFileStat( array( 'src' => $cPath, 'latest' => true ) );
                                if ( $cStat === null || ( $cSha1 !== false && !$cStat ) ) { // sanity
                                        $status->fatal( 'backend-fail-internal', $cBackend->getName() );
-                                       wfDebugLog( 'FileOperation', __METHOD__
-                                       . ': File is not available on the clone backend' );
+                                       wfDebugLog( 'FileOperation', __METHOD__ .
+                                               ': File is not available on the clone backend' );
                                        continue; // file is not available on the clone backend...
                                }
                                if ( $mSha1 === $cSha1 ) {
@@ -433,7 +433,7 @@ class FileBackendMultiWrite extends FileBackend {
         */
        protected function substPaths( $paths, FileBackendStore $backend ) {
                return preg_replace(
-                       '!^mwstore://' . preg_quote( $this->name ) . '/!',
+                       '!^mwstore://' . preg_quote( $this->name, '!' ) . '/!',
                        StringUtils::escapeRegexReplacement( "mwstore://{$backend->getName()}/" ),
                        $paths // string or array
                );
index 9f147f0..7d2d831 100644 (file)
@@ -377,9 +377,9 @@ abstract class FileBackendStore extends FileBackend {
                unset( $params['latest'] ); // sanity
 
                // Check that the specified temp file is valid...
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $ok = ( is_file( $tmpPath ) && filesize( $tmpPath ) == 0 );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$ok ) { // not present or not empty
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
 
@@ -694,9 +694,9 @@ abstract class FileBackendStore extends FileBackend {
        protected function doGetFileContentsMulti( array $params ) {
                $contents = array();
                foreach ( $this->doGetLocalReferenceMulti( $params ) as $path => $fsFile ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $contents[$path] = $fsFile ? file_get_contents( $fsFile->getPath() ) : false;
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
 
                return $contents;
index 66d8794..5d4e8e1 100644 (file)
@@ -577,9 +577,9 @@ class StoreFileOp extends FileOp {
        }
 
        protected function getSourceSha1Base36() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $hash = sha1_file( $this->params['src'] );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $hash !== false ) {
                        $hash = wfBaseConvert( $hash, 16, 36, 31 );
                }
index 7c2f825..ba2cf23 100644 (file)
@@ -67,9 +67,9 @@ class MemoryFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $data = file_get_contents( $params['src'] );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $data === false ) { // source doesn't exist?
                        $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
 
index 0dcaf2a..9bae2ae 100644 (file)
@@ -270,9 +270,9 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $sha1Hash = sha1_file( $params['src'] );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $sha1Hash === false ) { // source doesn't exist?
                        $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
 
index fa4eb5f..46b5360 100644 (file)
@@ -59,15 +59,14 @@ class TempFSFile extends FSFile {
                $ext = ( $extension != '' ) ? ".{$extension}" : "";
                for ( $attempt = 1; true; $attempt++ ) {
                        $path = "{$base}-{$attempt}{$ext}";
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $newFileHandle = fopen( $path, 'x' );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $newFileHandle ) {
                                fclose( $newFileHandle );
                                break; // got it
                        }
                        if ( $attempt >= 5 ) {
-
                                return null; // give up
                        }
                }
@@ -84,9 +83,9 @@ class TempFSFile extends FSFile {
         */
        public function purge() {
                $this->canDelete = false; // done
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $ok = unlink( $this->path );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                unset( self::$pathsCollect[$this->path] );
 
@@ -144,9 +143,9 @@ class TempFSFile extends FSFile {
         */
        public static function purgeAllOnShutdown() {
                foreach ( self::$pathsCollect as $path ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        unlink( $path );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
        }
 
index bce6b34..6f46f0e 100644 (file)
@@ -117,9 +117,9 @@ class FSLockManager extends LockManager {
                        if ( isset( $this->handles[$path] ) ) {
                                $handle = $this->handles[$path];
                        } else {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $handle = fopen( $this->getLockPath( $path ), 'a+' );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                                if ( !$handle ) { // lock dir missing?
                                        wfMkdirParents( $this->lockDir );
                                        $handle = fopen( $this->getLockPath( $path ), 'a+' ); // try again
index 5b42c2c..e66fdaf 100644 (file)
@@ -63,7 +63,7 @@ class FileRepo {
        protected $transformVia404;
 
        /** @var string URL of image description pages, e.g.
-        *    http://en.wikipedia.org/wiki/File:
+        *    https://en.wikipedia.org/wiki/File:
         */
        protected $descBaseUrl;
 
@@ -76,7 +76,7 @@ class FileRepo {
         *    to $wgScriptExtension, e.g. .php5 defaults to .php */
        protected $scriptExtension;
 
-       /** @var string Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 */
+       /** @var string Equivalent to $wgArticlePath, e.g. https://en.wikipedia.org/wiki/$1 */
        protected $articleUrl;
 
        /** @var bool Equivalent to $wgCapitalLinks (or $wgCapitalLinkOverrides[NS_FILE],
@@ -907,9 +907,9 @@ class FileRepo {
                $status->merge( $backend->doOperations( $operations, $opts ) );
                // Cleanup for disk source files...
                foreach ( $sourceFSFilesToDelete as $file ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        unlink( $file ); // FS cleanup
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
 
                return $status;
@@ -1295,9 +1295,9 @@ class FileRepo {
                }
                // Cleanup for disk source files...
                foreach ( $sourceFSFilesToDelete as $file ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        unlink( $file ); // FS cleanup
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
 
                return $status;
index 7ead968..ec84762 100644 (file)
@@ -29,7 +29,7 @@
  * $wgForeignFileRepos[] = array(
  *   'class'                  => 'ForeignAPIRepo',
  *   'name'                   => 'shared',
- *   'apibase'                => 'http://en.wikipedia.org/w/api.php',
+ *   'apibase'                => 'https://en.wikipedia.org/w/api.php',
  *   'fetchDescription'       => true, // Optional
  *   'descriptionCacheExpiry' => 3600,
  * );
@@ -72,7 +72,7 @@ class ForeignAPIRepo extends FileRepo {
                global $wgLocalFileRepo;
                parent::__construct( $info );
 
-               // http://commons.wikimedia.org/w/api.php
+               // https://commons.wikimedia.org/w/api.php
                $this->mApiBase = isset( $info['apibase'] ) ? $info['apibase'] : null;
 
                if ( isset( $info['apiThumbCacheExpiry'] ) ) {
@@ -521,6 +521,7 @@ class ForeignAPIRepo extends FileRepo {
                if ( $status->isOK() ) {
                        return $req->getContent();
                } else {
+                       wfDebug( "ForeignAPIRepo: ERROR on GET: " . $status->getWikiText() );
                        return false;
                }
        }
index 0713a92..1aec446 100644 (file)
@@ -587,6 +587,6 @@ class ArchivedFile {
                $this->load();
 
                $title = $this->getTitle();
-               return Revision::userCanBitfield( $this->deleted, $field, $user, $title ? : null );
+               return Revision::userCanBitfield( $this->deleted, $field, $user, $title ?: null );
        }
 }
index 01360d0..e1ee7fa 100644 (file)
@@ -40,7 +40,7 @@ class PackedOverlayImageGallery extends PackedImageGallery {
 
                # ATTENTION: The newline after <div class="gallerytext"> is needed to
                # accommodate htmltidy which in version 4.8.6 generated crackpot HTML
-               # in its absence, see: http://bugzilla.wikimedia.org/show_bug.cgi?id=1765
+               # in its absence, see: https://phabricator.wikimedia.org/T3765
                # -Ævar
 
                $thumbWidth = $this->getGBWidth( $thumb ) - $this->getThumbPadding() - $this->getGBPadding();
index 7a0206c..0df6f84 100644 (file)
@@ -205,7 +205,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
        protected function wrapGalleryText( $galleryText, $thumb ) {
                # ATTENTION: The newline after <div class="gallerytext"> is needed to
                # accommodate htmltidy which in version 4.8.6 generated crackpot html in
-               # its absence, see: http://bugzilla.wikimedia.org/show_bug.cgi?id=1765
+               # its absence, see: https://phabricator.wikimedia.org/T3765
                # -Ævar
 
                return "\n\t\t\t" . '<div class="gallerytext">' . "\n"
index 9f30ee3..afd7cf6 100644 (file)
 class HTMLButtonField extends HTMLFormField {
        protected $buttonType = 'button';
 
+       /** @var array $mFlags Flags to add to OOUI Button widget */
+       protected $mFlags = array();
+
        public function __construct( $info ) {
                $info['nodata'] = true;
+               if ( isset( $info['flags'] ) )
+                       $this->mFlags = $info['flags'];
                parent::__construct( $info );
        }
 
@@ -33,9 +38,11 @@ class HTMLButtonField extends HTMLFormField {
                return new OOUI\ButtonInputWidget( array(
                        'name' => $this->mName,
                        'value' => $value,
+                       'label' => $value,
                        'type' => $this->buttonType,
                        'classes' => array( 'mw-htmlform-submit', $this->mClass ),
                        'id' => $this->mID,
+                       'flags' => $this->mFlags,
                ) + $this->getAttributes( array( 'disabled', 'tabindex' ), array( 'tabindex' => 'tabIndex' ) ) );
        }
 
index ede30dd..55312ff 100644 (file)
@@ -20,9 +20,15 @@ class HTMLCheckField extends HTMLFormField {
                        $attr['class'] = $this->mClass;
                }
 
-               $chkLabel = Xml::check( $this->mName, $value, $attr )
-               . '&#160;'
-               . Html::rawElement( 'label', array( 'for' => $this->mID ), $this->mLabel );
+               $attrLabel = array( 'for' => $this->mID );
+               if ( isset( $attr['title'] ) ) {
+                       // propagate tooltip to label
+                       $attrLabel['title'] = $attr['title'];
+               }
+
+               $chkLabel = Xml::check( $this->mName, $value, $attr ) .
+                       '&#160;' .
+                       Html::rawElement( 'label', $attrLabel, $this->mLabel );
 
                if ( $wgUseMediaWikiUIEverywhere || $this->mParent instanceof VFormHTMLForm ) {
                        $chkLabel = Html::rawElement(
@@ -74,6 +80,11 @@ class HTMLCheckField extends HTMLFormField {
        function getLabel() {
                if ( $this->mParent instanceof OOUIHTMLForm ) {
                        return $this->mLabel;
+               } elseif (
+                       $this->mParent instanceof HTMLForm &&
+                       $this->mParent->getDisplayFormat() === 'div'
+               ) {
+                       return '';
                } else {
                        return '&#160;';
                }
index 7ccb60e..a0566a0 100644 (file)
@@ -119,9 +119,8 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
                        foreach ( $columns as $columnTag ) {
                                $thisTag = "$columnTag-$rowTag";
                                // Construct the checkbox
-                               $thisId = "{$this->mID}-$thisTag";
                                $thisAttribs = array(
-                                       'id' => $thisId,
+                                       'id' => "{$this->mID}-$thisTag",
                                        'value' => $thisTag,
                                );
                                $checked = in_array( $thisTag, (array)$value, true );
@@ -132,18 +131,13 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
                                        $checked = true;
                                        $thisAttribs['disabled'] = 1;
                                }
-                               $chkBox = $this->getOneCheckbox( $checked, $attribs + $thisAttribs );
 
-                               if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
-                                       $chkBox = Html::openElement( 'div', array( 'class' => 'mw-ui-checkbox' ) ) .
-                                               $chkBox .
-                                               Html::element( 'label', array( 'for' => $thisId ) ) .
-                                               Html::closeElement( 'div' );
-                               }
+                               $checkbox = $this->getOneCheckbox( $checked, $attribs + $thisAttribs );
+
                                $rowContents .= Html::rawElement(
                                        'td',
                                        array(),
-                                       $chkBox
+                                       $checkbox
                                );
                        }
                        $tableContents .= Html::rawElement( 'tr', array(), "\n$rowContents\n" );
@@ -162,11 +156,18 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
                        return new OOUI\CheckboxInputWidget( array(
                                'name' => "{$this->mName}[]",
                                'selected' => $checked,
-                               'value' => '1',
+                               'value' => $attribs['value'],
                        ) + $attribs );
+               } else {
+                       $checkbox = Xml::check( "{$this->mName}[]", $checked, $attribs );
+                       if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
+                               $checkbox = Html::openElement( 'div', array( 'class' => 'mw-ui-checkbox' ) ) .
+                                       $checkbox .
+                                       Html::element( 'label', array( 'for' => $attribs['id'] ) ) .
+                                       Html::closeElement( 'div' );
+                       }
+                       return $checkbox;
                }
-
-               return Xml::check( "{$this->mName}[]", $checked, $attribs );
        }
 
        protected function isTagForcedOff( $tag ) {
index 7f988d0..702651e 100644 (file)
@@ -125,6 +125,7 @@ class HTMLForm extends ContextSource {
        public static $typeMappings = array(
                'api' => 'HTMLApiField',
                'text' => 'HTMLTextField',
+               'textwithbutton' => 'HTMLTextFieldWithButton',
                'textarea' => 'HTMLTextAreaField',
                'select' => 'HTMLSelectField',
                'radio' => 'HTMLRadioField',
@@ -138,6 +139,7 @@ class HTMLForm extends ContextSource {
                'selectorother' => 'HTMLSelectOrOtherField',
                'selectandother' => 'HTMLSelectAndOtherField',
                'namespaceselect' => 'HTMLSelectNamespace',
+               'namespaceselectwithbutton' => 'HTMLSelectNamespaceWithButton',
                'tagfilter' => 'HTMLTagFilter',
                'submit' => 'HTMLSubmitField',
                'hidden' => 'HTMLHiddenField',
@@ -163,7 +165,7 @@ class HTMLForm extends ContextSource {
        protected $mFieldTree;
        protected $mShowReset = false;
        protected $mShowSubmit = true;
-       protected $mSubmitModifierClass = 'mw-ui-constructive';
+       protected $mSubmitFlag = 'constructive';
 
        protected $mSubmitCallback;
        protected $mValidationErrorMessage;
@@ -291,7 +293,10 @@ class HTMLForm extends ContextSource {
                }
 
                // Evil hack for mobile :(
-               if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $this->displayFormat === 'table' ) {
+               if (
+                       !$this->getConfig()->get( 'HTMLFormAllowTableFormat' )
+                       && $this->displayFormat === 'table'
+               ) {
                        $this->displayFormat = 'div';
                }
 
@@ -430,7 +435,9 @@ class HTMLForm extends ContextSource {
         * @throws MWException
         * @return HTMLFormField Instance of a subclass of HTMLFormField
         */
-       public static function loadInputFromParameters( $fieldname, $descriptor, HTMLForm $parent = null ) {
+       public static function loadInputFromParameters( $fieldname, $descriptor,
+               HTMLForm $parent = null
+       ) {
                $class = static::getClassFromDescriptor( $fieldname, $descriptor );
 
                $descriptor['fieldname'] = $fieldname;
@@ -965,7 +972,7 @@ class HTMLForm extends ContextSource {
                        $attribs['class'] = array( 'mw-htmlform-submit' );
 
                        if ( $useMediaWikiUIEverywhere ) {
-                               array_push( $attribs['class'], 'mw-ui-button', $this->mSubmitModifierClass );
+                               array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-' . $this->mSubmitFlag );
                        }
 
                        $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
@@ -1092,7 +1099,7 @@ class HTMLForm extends ContextSource {
         * @since 1.24
         */
        public function setSubmitDestructive() {
-               $this->mSubmitModifierClass = 'mw-ui-destructive';
+               $this->mSubmitFlag = 'destructive';
        }
 
        /**
@@ -1100,7 +1107,7 @@ class HTMLForm extends ContextSource {
         * @since 1.25
         */
        public function setSubmitProgressive() {
-               $this->mSubmitModifierClass = 'mw-ui-progressive';
+               $this->mSubmitFlag = 'progressive';
        }
 
        /**
index 49478fb..e19273b 100644 (file)
@@ -524,12 +524,20 @@ abstract class HTMLFormField {
                        'mw-htmlform-nolabel' => ( $label === '' )
                );
 
-               $field = Html::rawElement(
-                       'div',
-                       array( 'class' => $outerDivClass ) + $cellAttributes,
-                       $inputHtml . "\n$errors"
-               );
-               $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $this->mVFormClass, $errorClass );
+               $horizontalLabel = isset( $this->mParams['horizontal-label'] )
+                       ? $this->mParams['horizontal-label'] : false;
+
+               if ( $horizontalLabel ) {
+                       $field = '&#160;' . $inputHtml . "\n$errors";
+               } else {
+                       $field = Html::rawElement(
+                               'div',
+                               array( 'class' => $outerDivClass ) + $cellAttributes,
+                               $inputHtml . "\n$errors"
+                       );
+               }
+               $divCssClasses = array( "mw-htmlform-field-$fieldType",
+                       $this->mClass, $this->mVFormClass, $errorClass );
 
                $wrapperAttributes = array(
                        'class' => $divCssClasses,
@@ -796,6 +804,8 @@ abstract class HTMLFormField {
 
                $displayFormat = $this->mParent->getDisplayFormat();
                $html = '';
+               $horizontalLabel = isset( $this->mParams['horizontal-label'] )
+                       ? $this->mParams['horizontal-label'] : false;
 
                if ( $displayFormat === 'table' ) {
                        $html =
@@ -803,7 +813,7 @@ abstract class HTMLFormField {
                                        array( 'class' => 'mw-label' ) + $cellAttributes,
                                        Html::rawElement( 'label', $for, $labelValue ) );
                } elseif ( $hasLabel || $this->mShowEmptyLabels ) {
-                       if ( $displayFormat === 'div' ) {
+                       if ( $displayFormat === 'div' && !$horizontalLabel ) {
                                $html =
                                        Html::rawElement( 'div',
                                                array( 'class' => 'mw-label' ) + $cellAttributes,
diff --git a/includes/htmlform/HTMLFormFieldWithButton.php b/includes/htmlform/HTMLFormFieldWithButton.php
new file mode 100644 (file)
index 0000000..113bb4b
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Enables HTMLFormField elements to be build with a button.
+ */
+class HTMLFormFieldWithButton extends HTMLFormField {
+       /** @var string $mButtonClass CSS class for the button in this field */
+       protected $mButtonClass = '';
+
+       /** @var string|integer $mButtonId Element ID for the button in this field */
+       protected $mButtonId = '';
+
+       /** @var string $mButtonName Name the button in this field */
+       protected $mButtonName = '';
+
+       /** @var string $mButtonType Type of the button in this field (e.g. button or submit) */
+       protected $mButtonType = 'submit';
+
+       /** @var string $mButtonType Value for the button in this field */
+       protected $mButtonValue;
+
+       public function __construct( $info ) {
+               if ( isset( $info['buttonclass'] ) ) {
+                       $this->mButtonClass = $info['buttonclass'];
+               }
+               if ( isset( $info['buttonid'] ) ) {
+                       $this->mButtonId = $info['buttonid'];
+               }
+               if ( isset( $info['buttonname'] ) ) {
+                       $this->mButtonName = $info['buttonname'];
+               }
+               if ( isset( $info['buttondefault'] ) ) {
+                       $this->mButtonValue = $info['buttondefault'];
+               }
+               if ( isset( $info['buttontype'] ) ) {
+                       $this->mButtonType = $info['buttontype'];
+               }
+               parent::__construct( $info );
+       }
+
+       public function getInputHTML( $value ) {
+               $attr = array(
+                       'class' => 'mw-htmlform-submit ' . $this->mButtonClass,
+                       'id' => $this->mButtonId,
+               ) + $this->getAttributes( array( 'disabled', 'tabindex' ) );
+
+               return Html::input( $this->mButtonName, $this->mButtonValue, $this->mButtonType, $attr );
+       }
+
+       /**
+        * Combines the passed element with a button.
+        * @param String $element Element to combine the button with.
+        * @return String
+        */
+       public function getElement( $element ) {
+               return $element . '&#160;' . $this->getInputHTML( '' );
+       }
+}
index 8d28b59..523f045 100644 (file)
@@ -38,34 +38,19 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                $html = '';
 
                $attribs = $this->getAttributes( array( 'disabled', 'tabindex' ) );
-               $elementFunc = array( 'Html', $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' );
 
                foreach ( $options as $label => $info ) {
                        if ( is_array( $info ) ) {
                                $html .= Html::rawElement( 'h1', array(), $label ) . "\n";
                                $html .= $this->formatOptions( $info, $value );
                        } else {
-                               $thisAttribs = array( 'id' => "{$this->mID}-$info", 'value' => $info );
-
-                               // @todo: Make this use checkLabel for consistency purposes
-                               $checkbox = Xml::check(
-                                       $this->mName . '[]',
-                                       in_array( $info, $value, true ),
-                                       $attribs + $thisAttribs
-                               );
-                               $checkbox .= '&#160;' . call_user_func( $elementFunc,
-                                       'label',
-                                       array( 'for' => "{$this->mID}-$info" ),
-                                       $label
+                               $thisAttribs = array(
+                                       'id' => "{$this->mID}-$info",
+                                       'value' => $info,
                                );
+                               $checked = in_array( $info, $value, true );
 
-                               if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
-                                       $checkbox = Html::rawElement(
-                                               'div',
-                                               array( 'class' => 'mw-ui-checkbox' ),
-                                               $checkbox
-                                       );
-                               }
+                               $checkbox = $this->getOneCheckbox( $checked, $attribs + $thisAttribs, $label );
 
                                $html .= ' ' . Html::rawElement(
                                        'div',
@@ -78,6 +63,41 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                return $html;
        }
 
+       protected function getOneCheckbox( $checked, $attribs, $label ) {
+               if ( $this->mParent instanceof OOUIHTMLForm ) {
+                       if ( $this->mOptionsLabelsNotFromMessage ) {
+                               $label = new OOUI\HtmlSnippet( $label );
+                       }
+                       return new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => "{$this->mName}[]",
+                                       'selected' => $checked,
+                                       'value' => $attribs['value'],
+                               ) + $attribs ),
+                               array(
+                                       'label' => $label,
+                                       'align' => 'inline',
+                               )
+                       );
+               } else {
+                       $elementFunc = array( 'Html', $this->mOptionsLabelsNotFromMessage ? 'rawElement' : 'element' );
+                       $checkbox =
+                               Xml::check( "{$this->mName}[]", $checked, $attribs ) .
+                               '&#160;' .
+                               call_user_func( $elementFunc,
+                                       'label',
+                                       array( 'for' => $attribs['id'] ),
+                                       $label
+                               );
+                       if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
+                               $checkbox = Html::openElement( 'div', array( 'class' => 'mw-ui-checkbox' ) ) .
+                                       $checkbox .
+                                       Html::closeElement( 'div' );
+                       }
+                       return $checkbox;
+               }
+       }
+
        /**
         * @param WebRequest $request
         *
index 0f00540..19b45be 100644 (file)
@@ -38,6 +38,23 @@ class HTMLRadioField extends HTMLFormField {
                return $html;
        }
 
+       function getInputOOUI( $value ) {
+               $options = array();
+               foreach ( $this->getOptions() as $label => $value ) {
+                       $options[] = array(
+                               'data' => $value,
+                               'label' => $this->mOptionsLabelsNotFromMessage ? new OOUI\HtmlSnippet( $label ) : $label,
+                       );
+               }
+
+               return new OOUI\RadioSelectInputWidget( array(
+                       'name' => $this->mName,
+                       'value' => $value,
+                       'options' => $options,
+                       'classes' => 'mw-htmlform-flatlist-item',
+               ) + $this->getAttributes( array( 'disabled', 'tabindex' ), array( 'tabindex' => 'tabIndex' ) ) );
+       }
+
        function formatOptions( $options, $value ) {
                $html = '';
 
index a1c0c95..23ca3bf 100644 (file)
@@ -71,7 +71,6 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
         */
        function loadDataFromRequest( $request ) {
                if ( $request->getCheck( $this->mName ) ) {
-
                        $list = $request->getText( $this->mName );
                        $text = $request->getText( $this->mName . '-other' );
 
diff --git a/includes/htmlform/HTMLSelectNamespaceWithButton.php b/includes/htmlform/HTMLSelectNamespaceWithButton.php
new file mode 100644 (file)
index 0000000..24b15bd
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Creates a Html::namespaceSelector input field with a button assigned to the input field.
+ */
+class HTMLSelectNamespaceWithButton extends HTMLSelectNamespace {
+       /** @var HTMLFormClassWithButton $mClassWithButton */
+       protected $mClassWithButton = null;
+
+       public function __construct( $info ) {
+               $this->mClassWithButton = new HTMLFormFieldWithButton( $info );
+               parent::__construct( $info );
+       }
+
+       public function getInputHTML( $value ) {
+               return $this->mClassWithButton->getElement( parent::getInputHTML( $value ) );
+       }
+}
index 653c08c..938e428 100644 (file)
@@ -6,4 +6,6 @@
  */
 class HTMLSubmitField extends HTMLButtonField {
        protected $buttonType = 'submit';
+
+       protected $mFlags = array( 'primary', 'constructive' );
 }
index 22e96f6..aeb4b7c 100644 (file)
@@ -12,11 +12,21 @@ class HTMLTextAreaField extends HTMLFormField {
                return isset( $this->mParams['rows'] ) ? $this->mParams['rows'] : static::DEFAULT_ROWS;
        }
 
+       function getSpellCheck() {
+               $val = isset( $this->mParams['spellcheck'] ) ? $this->mParams['spellcheck'] : null;
+               if ( is_bool( $val ) ) {
+                       // "spellcheck" attribute literally requires "true" or "false" to work.
+                       return $val === true ? 'true' : 'false';
+               }
+               return null;
+       }
+
        function getInputHTML( $value ) {
                $attribs = array(
                                'id' => $this->mID,
                                'cols' => $this->getCols(),
                                'rows' => $this->getRows(),
+                               'spellcheck' => $this->getSpellCheck(),
                        ) + $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {
@@ -37,6 +47,10 @@ class HTMLTextAreaField extends HTMLFormField {
        }
 
        function getInputOOUI( $value ) {
+               if ( isset( $this->mParams['cols'] ) ) {
+                       throw new Exception( "OOUIHTMLForm does not support the 'cols' parameter for textareas" );
+               }
+
                $attribs = $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {
@@ -62,6 +76,7 @@ class HTMLTextAreaField extends HTMLFormField {
                        'name' => $this->mName,
                        'multiline' => true,
                        'value' => $value,
+                       'rows' => $this->getRows(),
                ) + $attribs );
        }
 }
index 2958274..5c04ee2 100644 (file)
@@ -5,6 +5,15 @@ class HTMLTextField extends HTMLFormField {
                return isset( $this->mParams['size'] ) ? $this->mParams['size'] : 45;
        }
 
+       function getSpellCheck() {
+               $val = isset( $this->mParams['spellcheck'] ) ? $this->mParams['spellcheck'] : null;
+               if ( is_bool( $val ) ) {
+                       // "spellcheck" attribute literally requires "true" or "false" to work.
+                       return $val === true ? 'true' : 'false';
+               }
+               return null;
+       }
+
        function getInputHTML( $value ) {
                $attribs = array(
                                'id' => $this->mID,
@@ -12,6 +21,7 @@ class HTMLTextField extends HTMLFormField {
                                'size' => $this->getSize(),
                                'value' => $value,
                                'dir' => $this->mDir,
+                               'spellcheck' => $this->getSpellCheck(),
                        ) + $this->getTooltipAndAccessKey();
 
                if ( $this->mClass !== '' ) {
@@ -103,6 +113,11 @@ 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(
diff --git a/includes/htmlform/HTMLTextFieldWithButton.php b/includes/htmlform/HTMLTextFieldWithButton.php
new file mode 100644 (file)
index 0000000..c6dac32
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Creates a text input field with a button assigned to the input field.
+ */
+class HTMLTextFieldWithButton extends HTMLTextField {
+       /** @var HTMLFormClassWithButton $mClassWithButton */
+       protected $mClassWithButton = null;
+
+       public function __construct( $info ) {
+               $this->mClassWithButton = new HTMLFormFieldWithButton( $info );
+               parent::__construct( $info );
+       }
+
+       public function getInputHTML( $value ) {
+               return $this->mClassWithButton->getElement( parent::getInputHTML( $value ) );
+       }
+}
index 6c9952a..80e91f7 100644 (file)
@@ -34,7 +34,6 @@ class OOUIHTMLForm extends HTMLForm {
        public function __construct( $descriptor, $context = null, $messagePrefix = '' ) {
                parent::__construct( $descriptor, $context, $messagePrefix );
                $this->getOutput()->enableOOUI();
-               $this->getOutput()->addModules( 'mediawiki.htmlform.ooui' );
                $this->getOutput()->addModuleStyles( 'mediawiki.htmlform.ooui.styles' );
        }
 
@@ -54,7 +53,7 @@ class OOUIHTMLForm extends HTMLForm {
                $buttons = '';
 
                if ( $this->mShowSubmit ) {
-                       $attribs = array();
+                       $attribs = array( 'infusable' => true );
 
                        if ( isset( $this->mSubmitID ) ) {
                                $attribs['id'] = $this->mSubmitID;
@@ -68,15 +67,11 @@ class OOUIHTMLForm extends HTMLForm {
                                $attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
                        }
 
-                       $attribs['classes'] = array(
-                               'mw-htmlform-submit',
-                               $this->mSubmitModifierClass,
-                       );
-
+                       $attribs['classes'] = array( 'mw-htmlform-submit' );
                        $attribs['type'] = 'submit';
                        $attribs['label'] = $this->getSubmitText();
                        $attribs['value'] = $this->getSubmitText();
-                       $attribs['flags'] = array( 'primary', 'constructive' );
+                       $attribs['flags'] = array( $this->mSubmitFlag );
 
                        $buttons .= new OOUI\ButtonInputWidget( $attribs );
                }
index 0c0e425..f1fd05d 100644 (file)
@@ -95,7 +95,7 @@ class VFormHTMLForm extends HTMLForm {
                        $attribs['class'] = array(
                                'mw-htmlform-submit',
                                'mw-ui-button mw-ui-big mw-ui-block',
-                               $this->mSubmitModifierClass,
+                               'mw-ui-' . $this->mSubmitFlag,
                        );
 
                        $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
index 6ccf2d5..752450f 100644 (file)
@@ -649,10 +649,10 @@ abstract class DatabaseInstaller {
                        return $status;
                }
                global $IP;
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $rows = file( "$IP/maintenance/interwiki.list",
                        FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                $interwikis = array();
                if ( !$rows ) {
                        return Status::newFatal( 'config-install-interwiki-list' );
index 5ae499d..2818349 100644 (file)
@@ -146,7 +146,6 @@ abstract class Installer {
         * @var array
         */
        protected $envPreps = array(
-               'envPrepExtension',
                'envPrepServer',
                'envPrepPath',
        );
@@ -177,7 +176,6 @@ abstract class Installer {
                'wgGitBin',
                'IP',
                'wgScriptPath',
-               'wgScriptExtension',
                'wgMetaNamespace',
                'wgDeletedDirectory',
                'wgEnableUploads',
@@ -540,9 +538,9 @@ abstract class Installer {
                global $wgAutoloadClasses;
                $wgAutoloadClasses = array();
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $_lsExists = file_exists( "$IP/LocalSettings.php" );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$_lsExists ) {
                        return false;
@@ -830,14 +828,14 @@ abstract class Installer {
         * @return bool
         */
        protected function envCheckPCRE() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $regexd = preg_replace( '/[\x{0430}-\x{04FF}]/iu', '', '-АБВГД-' );
                // Need to check for \p support too, as PCRE can be compiled
                // with utf8 support, but not unicode property support.
                // check that \p{Zs} (space separators) matches
                // U+3000 (Ideographic space)
                $regexprop = preg_replace( '/\p{Zs}/u', '', "-\xE3\x80\x80-" );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $regexd != '--' || $regexprop != '--' ) {
                        $this->showError( 'config-pcre-no-utf8' );
 
@@ -1125,12 +1123,12 @@ abstract class Installer {
                } elseif ( $c <= 0x7FF ) {
                        return chr( 0xC0 | $c >> 6 ) . chr( 0x80 | $c & 0x3F );
                } elseif ( $c <= 0xFFFF ) {
-                       return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F )
-                       . chr( 0x80 | $c & 0x3F );
+                       return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F ) .
+                               chr( 0x80 | $c & 0x3F );
                } elseif ( $c <= 0x10FFFF ) {
-                       return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F )
-                       . chr( 0x80 | $c >> 6 & 0x3F )
-                       . chr( 0x80 | $c & 0x3F );
+                       return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F ) .
+                               chr( 0x80 | $c >> 6 & 0x3F ) .
+                               chr( 0x80 | $c & 0x3F );
                } else {
                        return false;
                }
@@ -1227,19 +1225,6 @@ abstract class Installer {
         */
        abstract protected function envGetDefaultServer();
 
-       /**
-        * Environment prep for setting the preferred PHP file extension.
-        */
-       protected function envPrepExtension() {
-               // @todo FIXME: Detect this properly
-               if ( defined( 'MW_INSTALL_PHP5_EXT' ) ) {
-                       $ext = '.php5';
-               } else {
-                       $ext = '.php';
-               }
-               $this->setVar( 'wgScriptExtension', $ext );
-       }
-
        /**
         * Environment prep for setting $IP and $wgScriptPath.
         */
@@ -1289,9 +1274,9 @@ abstract class Installer {
                foreach ( $names as $name ) {
                        $command = $path . DIRECTORY_SEPARATOR . $name;
 
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $file_exists = file_exists( $command );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        if ( $file_exists ) {
                                if ( !$versionInfo ) {
@@ -1349,7 +1334,7 @@ abstract class Installer {
 
                // it would be good to check other popular languages here, but it'll be slow.
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
 
                foreach ( $scriptTypes as $ext => $contents ) {
                        foreach ( $contents as $source ) {
@@ -1368,14 +1353,14 @@ abstract class Installer {
                                unlink( $dir . $file );
 
                                if ( $text == 'exec' ) {
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
 
                                        return $ext;
                                }
                        }
                }
 
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                return false;
        }
@@ -1809,8 +1794,8 @@ abstract class Installer {
         * Some long-running pages (Install, Upgrade) will want to do this
         */
        protected function disableTimeLimit() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                set_time_limit( 0 );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
        }
 }
index 162a789..7b1cfdc 100644 (file)
@@ -57,7 +57,7 @@ class LocalSettingsGenerator {
 
                $confItems = array_merge(
                        array(
-                               'wgServer', 'wgScriptPath', 'wgScriptExtension',
+                               'wgServer', 'wgScriptPath',
                                'wgPasswordSender', 'wgImageMagickConvertCommand', 'wgShellLocale',
                                'wgLanguageCode', 'wgEnableEmail', 'wgEnableUserEmail', 'wgDiff3',
                                'wgEnotifUserTalk', 'wgEnotifWatchlist', 'wgEmailAuthentication',
@@ -331,7 +331,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## (like /w/index.php/Page_title to /wiki/Page_title) please see:
 ## https://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
-\$wgScriptExtension = \"{$this->values['wgScriptExtension']}\";
 ${serverSetting}
 ## The relative URL path to the skins directory
 \$wgStylePath = \"\$wgScriptPath/skins\";
@@ -372,7 +371,7 @@ ${serverSetting}
 {$magic}\$wgUseImageMagick = true;
 {$magic}\$wgImageMagickConvertCommand = \"{$this->values['wgImageMagickConvertCommand']}\";
 
-# InstantCommons allows wiki to use images from http://commons.wikimedia.org
+# InstantCommons allows wiki to use images from https://commons.wikimedia.org
 \$wgUseInstantCommons = {$this->values['wgUseInstantCommons']};
 
 ## If you use ImageMagick (or any other shell command) on a
index 5eef335..164cfab 100644 (file)
@@ -41,7 +41,7 @@ class MssqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ),
 
                        // 1.24
-                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql'),
+                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ),
 
                        // 1.25
                        array( 'dropTable', 'hitcounter' ),
index f990ddf..43b809c 100644 (file)
@@ -157,9 +157,9 @@ class SqliteInstaller extends DatabaseInstaller {
                        # Called early on in the installer, later we just want to sanity check
                        # if it's still writable
                        if ( $create ) {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $ok = wfMkdirParents( $dir, 0700, __METHOD__ );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                                if ( !$ok ) {
                                        return Status::newFatal( 'config-sqlite-mkdir-error', $dir );
                                }
index 156606a..4930826 100644 (file)
@@ -1184,12 +1184,11 @@ class WebInstaller extends Installer {
                }
                if ( $path !== false ) {
                        $scriptPath = preg_replace( '{^(.*)/(mw-)?config.*$}', '$1', $path );
-                       $scriptExtension = $this->getVar( 'wgScriptExtension' );
 
                        $this->setVar( 'wgScriptPath', "$scriptPath" );
                        // Update variables set from Setup.php that are derived from wgScriptPath
-                       $this->setVar( 'wgScript', "$scriptPath/index$scriptExtension" );
-                       $this->setVar( 'wgLoadScript', "$scriptPath/load$scriptExtension" );
+                       $this->setVar( 'wgScript', "$scriptPath/index.php" );
+                       $this->setVar( 'wgLoadScript', "$scriptPath/load.php" );
                        $this->setVar( 'wgStylePath', "$scriptPath/skins" );
                        $this->setVar( 'wgLocalStylePath', "$scriptPath/skins" );
                        $this->setVar( 'wgExtensionAssetsPath', "$scriptPath/extensions" );
index 98f3ae8..f40de71 100644 (file)
@@ -669,6 +669,8 @@ class WebInstallerUpgrade extends WebInstallerPage {
        }
 
        public function showDoneMessage() {
+               global $wgScriptExtension;
+
                $this->startForm();
                $regenerate = !$this->getVar( '_ExistingDBSettings' );
                if ( $regenerate ) {
@@ -682,7 +684,7 @@ class WebInstallerUpgrade extends WebInstallerPage {
                                wfMessage( $msg,
                                        $this->getVar( 'wgServer' ) .
                                        $this->getVar( 'wgScriptPath' ) . '/index' .
-                                       $this->getVar( 'wgScriptExtension' )
+                                       $wgScriptExtension
                                )->plain(), 'tick-32.png'
                        )
                );
@@ -1479,8 +1481,7 @@ class WebInstallerComplete extends WebInstallerPage {
                                wfMessage( 'config-install-done',
                                        $lsUrl,
                                        $this->getVar( 'wgServer' ) .
-                                       $this->getVar( 'wgScriptPath' ) . '/index' .
-                                       $this->getVar( 'wgScriptExtension' ),
+                                       $this->getVar( 'wgScriptPath' ) . '/index.php',
                                        '<downloadlink/>'
                                )->plain(), 'tick-32.png'
                        )
index 36136a5..c43f356 100644 (file)
@@ -6,7 +6,8 @@
                        "OsamaK",
                        "روخو",
                        "Claw eg",
-                       "Kuwaity26"
+                       "Kuwaity26",
+                       "محمد أحمد عبد الفتاح"
                ]
        },
        "config-desc": "مثبت لميدياويكي",
        "config-page-existingwiki": "ويكي موجودة",
        "config-help-restart": "هل تريد إزالة البيانات المحفوظة التي قد قمت بإدخالها وإعادة تشغيل عملية التثبيت؟",
        "config-restart": "نعم، إعادة التشغيل",
+       "config-env-good": "جرى التحقق من البيئة. يمكنك تنصيب ميدياويكي.",
+       "config-env-bad": "جرى التحقق من البيئة. لا يمكنك تنصيب ميدياويكي.",
        "config-env-php": "بي إتش بي $1 مثبت.",
+       "config-env-hhvm": "نصبت HHVM $1.",
        "config-db-type": "نوع قاعدة البيانات:",
        "config-db-host": "مضيف قاعدة البيانات:",
        "config-db-wiki-settings": "حدِّد هذا الويكي",
        "config-install-user-create-failed": "إنشاء مستخدم \"$1\" فشل:$2",
        "config-install-tables": "إنشاء الجداول",
        "config-install-keys": "توليد المفاتيح السرية",
+       "config-install-mainpage": "إنشاء صفحة رئيسية بالمحتوى الافتراضي",
        "config-help": "مساعدة",
        "config-help-tooltip": "اضغط للتوسيع",
        "mainpagetext": "'''تم تثبيت ميدياويكي بنجاح.'''",
index 0321d8e..abcb333 100644 (file)
@@ -65,7 +65,7 @@
        "config-magic-quotes-sybase": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nToto nastavení nepředvídatelně poškozuje vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
        "config-mbstring": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nToto nastavení způsobuje chyby a může nepředvídatelně poškozovat vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
        "config-safe-mode": "'''Upozornění:''' Je aktivní [http://www.php.net/features.safe-mode bezpečný režim] PHP.\nMůže způsobovat potíže, zejména při použití načítání souborů a podpory <code>math</code>.",
-       "config-xml-bad": "Chybí XML modul pro PHP.\nMediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.\nPokud běžíte na Mandrake, nainstalujte balíček php-xml.",
+       "config-xml-bad": "Chybí XML modul pro PHP.\nMediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.\nMožná si budete muset nainstalovat RPM balíček php-xml.",
        "config-pcre-old": "'''Kritická chyba:''' Je vyžadováno PCRE verze $1 nebo novější.\nVaše binárka PHP obsahuje PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Více informací.]",
        "config-pcre-no-utf8": "'''Kritická chyba''': PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.\nMediaWiki vyžaduje ke správné funkci podporu UTF-8.",
        "config-memory-raised": "<code>memory_limit</code> v PHP byl nastaven na $1, zvýšen na $2.",
index 995d576..da5d93f 100644 (file)
        "config-install-pg-schema-failed": "Falló la creación de las tablas.\nAsegúrate de que la cuenta «$1» tiene permiso de escritura para el esquema «$2».",
        "config-install-pg-commit": "Validando los cambios",
        "config-install-pg-plpgsql": "Comprobación de lenguaje PL/pgSQL",
-       "config-pg-no-plpgsql": "Necesita instalar el lenguaje PL/pgSQL en la base de datos $1",
+       "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-install-user": "Creando el usuario de la base de datos",
index 2e161f6..31441e0 100644 (file)
@@ -5,9 +5,12 @@
                        "Pikne",
                        "Boxmein",
                        "Cumbril",
-                       "Roland"
+                       "Roland",
+                       "Postituvi"
                ]
        },
+       "config-desc": "MediaWiki paigaldaja",
+       "config-title": "MediaWiki $1 install",
        "config-information": "Teave",
        "config-upgrade-key-missing": "Tuvastati olemasolev MediaWiki install.\nSelle installi täiendamiseks lisa palun järgmine rida faili <code>LocalSettings.php</code> lõppu:\n\n$1",
        "config-session-error": "Tõrge seansi alustamisel: $1",
index 2d06d42..de26499 100644 (file)
@@ -8,7 +8,8 @@
                        "Pouyana",
                        "Reza1615",
                        "Alirezaaa",
-                       "Danialbehzadi"
+                       "Danialbehzadi",
+                       "Leyth"
                ]
        },
        "config-desc": "نصب کنندهٔ ویکی‌مدیا",
@@ -66,7 +67,7 @@
        "config-magic-quotes-sybase": "'''مخرب: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] فعال است.\nاین گزینه اطلاعات داده شده به رایانه را به طور غیر‌قابل پیش‌بینی از بین می‌برد.\nشما نمی‌توانید مدیاویکی را نصب یا استفاده کنید مگر اینکه این گزینه غیر‌فعال باشد.",
        "config-mbstring": "''' مخرب:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] فعال است.\nاین گزینه باعث ایجاد خطا می‌شود و ممکن است اطلاعات را به طور غیر‌قابل پیش‌بینی از بین ببرد.\nشما نمی‌توانید مدیاویکی را نصب یا استفاده کنید مگر اینکه این گزینه غیر‌فعال باشد.",
        "config-safe-mode": "'''هشدار:'''  PHP's [http://www.php.net/features.safe-mode safe mode] فعال است.\nممکن است باعث ایجاد مشکلاتی شود، مخصوصاً اگر از ارسال پرونده استفاده شود و <code>math</code> پشتیبانی شود.",
-       "config-xml-bad": "Ù\85اÚ\98Ù\88Ù\84 Ø§Ú©Ø³â\80\8cاÙ\85â\80\8cاÙ\84 Ù¾Û\8câ\80\8cاÚ\86â\80\8cÙ¾Û\8c Ú©Ø§Ø± Ù\86Ù\85Û\8câ\80\8cÚ©Ù\86د.\nÙ\85دÛ\8cاÙ\88Û\8cÚ©Û\8c Ù\86Û\8cازÙ\85Ù\86د Ø¹Ù\85Ù\84Û\8cاتÛ\8c Ø¯Ø± Ø§Û\8cÙ\86 Ù\85اÚ\98Ù\88Ù\84 Ø§Ø³Øª Ù\88 Ø¯Ø± Ø§Û\8cÙ\86 Ù¾Û\8cکربÙ\86دÛ\8c Ú©Ø§Ø± Ù\86Ø®Ù\88اÙ\87دâ\80\8cکرد.\nاگر Ù\85اÙ\86â\80\8cدرÛ\8cÚ© Ø±Ø§ Ø§Ø¬Ø±Ø§ Ù\85Û\8câ\80\8cÚ©Ù\86Û\8cد, Ø¨Ø³ØªÙ\87Ù\94 Ù\86رÙ\85 Ø§Ù\81زارÛ\8c پی‌اچ‌پی-ایکس‌ام‌ال را نصب کنید.",
+       "config-xml-bad": "Ù\85اÚ\98Ù\88Ù\84 Ø§Ú©Ø³â\80\8cاÙ\85â\80\8cاÙ\84 Ù¾Û\8câ\80\8cاÚ\86â\80\8cÙ¾Û\8c Ú©Ø§Ø± Ù\86Ù\85Û\8câ\80\8cÚ©Ù\86د.\nÙ\85دÛ\8cاÙ\88Û\8cÚ©Û\8c Ù\86Û\8cازÙ\85Ù\86د Ø¹Ù\85Ù\84Û\8cاتÛ\8c Ø¯Ø± Ø§Û\8cÙ\86 Ù\85اÚ\98Ù\88Ù\84 Ø§Ø³Øª Ù\88 Ø¯Ø± Ø§Û\8cÙ\86 Ù¾Û\8cکربÙ\86دÛ\8c Ú©Ø§Ø± Ù\86Ø®Ù\88اÙ\87دâ\80\8cکرد.\nشاÛ\8cد Ù\86Û\8cاز Ø¨Ø§Ø´Ø¯ Ú©Ù\87 Ø¨Ø³ØªÙ\87Ù\94 Ù\86رÙ\85 Ø§Ù\81زارÛ\8cÙ\90 Ø¢Ø±Ù¾Û\8câ\80\8cاÙ\85 پی‌اچ‌پی-ایکس‌ام‌ال را نصب کنید.",
        "config-pcre-old": "''' خطای اساسی:'' ' PCRE  $1  یا بعدا مورد نیاز است.\nکد باینری پی‌اچ‌پی‌تان با PCRE  $2 پیوند دارد.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE اطلاعات بیشتر].",
        "config-pcre-no-utf8": "'''مخرب:''' به‌ نظر می‌رسد ماژول پی‌سی‌آرایی پی‌اچ‌پی بدون پشتیبانی پی‌سی‌آرایی_یو‌تی‌اف۸ تهیه شده‌است.\nمدیاویکی برای درست عمل کردن نیازمند پشتیبانی یوتی‌اف-۸ است.",
        "config-memory-raised": "PHP's <code>memory_limit</code>, نسخهٔ $1 است، به نسخهٔ $2 ارتقاء داده شده‌است.",
        "config-admin-name-invalid": "نام کاربری تعیین شدهٔ \"<nowiki>$1</nowiki>\" نامعتبر است.\nیک نام کاربری دیگر تعیین کنید.",
        "config-admin-password-blank": "برای حساب سرپرست یک رمز عبور وارد کنید.",
        "config-admin-password-mismatch": "دو رمز عبوری که وارد کرده‌اید با هم مطابقت ندارند.",
-       "config-admin-email": "آدرس ایمیل:",
+       "config-admin-email": "نشانی ایمیل:",
        "config-admin-email-help": "یک آدرس ایمیل برای اجازهٔ دریافت ایمیل از دیگر کاربران ویکی، اینجا وارد کنید، رمز عبور خود را دوباره تنظیم کنید، و از تغییرات صفحه در فهرست پیگیری‌ها مطلع باشید. می‌توانید این بخش را خالی بگذارید.",
        "config-admin-error-user": "خطای داخلی هنگام ایجاد یک مدیر با نام \"<nowiki>$1</nowiki>\".",
        "config-admin-error-password": "خطای داخلی هنگام تنظیم یک رمز عبور برای مدیر \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
index 17f784f..87f3374 100644 (file)
@@ -80,7 +80,7 @@
        "config-magic-quotes-sybase": "'''Erreur fatale : [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybasee] est activé !'''\nCette option corrompt les données de manière imprévisible.\nVous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
        "config-mbstring": "'''Erreur fatale : [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] est activé !'''\nCette option provoque des erreurs et peut corrompre les données de manière imprévisible.\nVous ne pouvez pas installer ou utiliser MediaWiki tant que cette option est activée.",
        "config-safe-mode": "'''Attention : le « [http://www.php.net/features.safe-mode safe mode] » est activé !'''\nCeci peut causer des problèmes, en particulier si vous utilisez le téléversement de fichiers et le support de <code>math</code>.",
-       "config-xml-bad": "Le module XML de PHP est manquant.\nMediaWiki requiert des fonctions de ce module et ne fonctionnera pas avec cette configuration.\nSi vous êtes sous Mandrake, installez le paquet php-xml.",
+       "config-xml-bad": "Le module XML de PHP est manquant.\nMediaWiki requiert des fonctions de ce module et ne fonctionnera pas avec cette configuration.\nVous pourrez avoir besoin d’installer le paquet RPM php-xml.",
        "config-pcre-old": "'''Fatal :''' PCRE $1 ou ultérieur est nécessaire.\nVotre binaire PHP est lié avec PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Plus d’information sur PCRE].",
        "config-pcre-no-utf8": "'''Erreur fatale''': Le module PCRE de PHP semble être compilé sans le support PCRE_UTF8.\nMédiaWiki nécessite la gestion d’UTF-8 pour fonctionner correctement.",
        "config-memory-raised": "Le paramètre <code>memory_limit</code> de PHP était à $1, porté à $2.",
index cf5ad45..b460f60 100644 (file)
        "config-unicode-pure-php-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP alapú implementáció lesz használva.\nHa nagy látogatottságú oldalt üzemeltetsz, itt találhatsz további információkat [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations a témáról].",
        "config-unicode-update-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges burkolókönyvtár [http://site.icu-project.org/ ICU projekt] függvénykönyvtárának régebbi változatát használja.\nHa ügyelni kívánsz a Unicode használatára, fontold meg a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations frissítését].",
        "config-no-db": "Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni. Telepítened kell egyet a PHP-hez.\nA következő {{PLURAL:$2|adatbázistípus támogatott|adatbázistípusok támogatottak}}: $1.\n\nHa a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a <code>./configure --with-mysql</code> parancs használatával.\nHa a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz például a php5-mysql csomagra is.",
+       "config-outdated-sqlite": "<strong>Figyelmeztetés:</strong> SQLite $1 verziód van, ami alacsonyabb a legalább szükséges $2 verziónál. Az SQLite nem lesz elérhető.",
        "config-no-fts3": "'''Figyelmeztetés''': Az SQLite [//sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.",
        "config-magic-quotes-runtime": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-magic-quotes-sybase": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-mbstring": "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!'''\nEz a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-safe-mode": "'''Figyelmeztetés:''' A PHP [http://www.php.net/features.safe-mode safe mode]-ja be van kapcsolva.\nProblémákat okozhat, különösen a fájlfeltöltéseknél és a <code>math</code>-támogatás használatánál.",
-       "config-xml-bad": "A PHP XML-modulja hiányzik.\nEgyes MediaWiki-funkciók, melyek ezt a modult igénylik, nem fognak működni ilyen beállítások mellett.\nHa Madrake-et futtatsz, telepítsd a php-xml csomagot.",
+       "config-xml-bad": "A PHP XML-modulja hiányzik.\nEgyes MediaWiki-funkciók, melyek ezt a modult igénylik, nem fognak működni ilyen konfigurációban.\nSzükséges lehet a php-xml RPM-csomag telepítése.",
        "config-pcre-old": "<strong>Kritikus hiba:</strong> PCRE $1 vagy későbbi szükséges.\nA Te PHP binárisod PCRE $2-vel lett linkelve.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE További információ].",
        "config-pcre-no-utf8": "'''Kritikus hiba''': Úgy tűnik, hogy a PHP PRCE modulja PRCE_UTF8 támogatás nélkül lett fordítva.\nA MediaWikinek UTF-8-támogatásra van szüksége a helyes működéshez.",
        "config-memory-raised": "A PHP <code>memory_limit</code> beállításának értéke: $1. Meg lett növelve a következő értékre: $2.",
        "config-memory-bad": "'''Figyelmeztetés:''' A PHP <code>memory_limit</code> beállításának értéke $1.\nEz az érték valószínűleg túl kevés, a telepítés sikertelen lehet.",
        "config-ctype": "<strong>Kritikus hiba:</strong> A PHP-t [http://www.php.net/manual/en/ctype.installation.php Ctype kiterjesztés] támogatással kell fordítani.",
+       "config-iconv": "<strong>Kritikus hiba:</strong> a PHP-t az [http://www.php.net/manual/en/iconv.installation.php iconv kiterjesztést] támogatva kell fordítani.",
        "config-xcache": "Az [http://xcache.lighttpd.net/ XCache] telepítve van",
        "config-apc": "Az [http://www.php.net/apc APC] telepítve van",
        "config-wincache": "A [http://www.iis.net/download/WinCacheForPhp WinCache] telepítve van",
        "config-no-cache": "'''Figyelmeztetés:''' Nem található [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] és [http://www.iis.net/download/WinCacheForPhp WinCache] sem.\nObjektum-gyorsítótárazás nem lesz engedélyezve.",
        "config-diff3-bad": "GNU diff3 nem található.",
+       "config-git": "Megtaláltam a Git verziókezelő szoftvert: <code>$1</code>.",
+       "config-git-bad": "A Git verziókezelő rendszer nem található.",
        "config-imagemagick": "Az ImageMagick megtalálható a rendszeren: <code>$1</code>.\nA bélyegképek készítése engedélyezve lesz a feltöltések engedélyezése esetén.",
        "config-gd": "A GD grafikai könyvtár elérhető.\nBélyegképek készítése működni fog, miután engedélyezted a fájlfeltöltést.",
        "config-no-scaling": "Nem található a GD könyvtár és az ImageMagick.\nA bélyegképek készítése le lesz tiltva.",
        "config-no-uri": "'''Hiba:''' Nem sikerült megállapítani a jelenlegi URI-t.\nTelepítés megszakítva.",
+       "config-no-cli-uri": "<strong>Figyelmeztetés:</strong> Nincs <code>--scriptpath</code> megadva, használom az alapértelmezettet: <code>$1</code>.",
        "config-using-server": "A következő szervernév használata: „<nowiki>$1</nowiki>”.",
        "config-using-uri": "A következő szerver URL-cím használata: „<nowiki>$1$2</nowiki>”.",
        "config-uploads-not-safe": "'''Figyelmeztetés:''' a feltöltésekhez használt alapértelmezett könyvtárban (<code>$1</code>) tetszőleges külső szkript futtatható.\nHabár a MediaWiki ellenőrzi a feltöltött fájlokat az efféle biztonsági veszélyek megtalálása érdekében, a feltöltés engedélyezése előtt erősen ajánlott a [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security a sérülékenység megszüntetése].",
        "config-brokenlibxml": "A rendszereden a PHP és libxml2 verziók olyan kombinációja található meg, ami hibásan működik, és észrevehetetlen adatkárosodást okoz a MediaWikiben és más webalkalmazásokban.\nFrissíts a libxml2 2.7.3 vgy újabb verziójára ([https://bugs.php.net/bug.php?id=45996 A hiba bejelentése a PHP-nél]).\nTelepítés megszakítva.",
-       "config-suhosin-max-value-length": "A Suhosin telepítve van, és a GET paraméter hosszát $1 bájtra korlátozza. A MediaWiki erőforrásbetöltő összetevője megkerüli a problémát, de így csökkenni fog a teljesítmény. Ha lehetséges, állítsd be a <code>suhosin.get.max_value_length</code> értékét legalább 1024-re a <code>php.ini</code>ben, és állítsd be a <code>$wgResourceLoaderMaxQueryLength</code> változót ugyanerre az értékre a LocalSettings.php-ben.",
+       "config-suhosin-max-value-length": "A Suhosin telepítve van, és a GET <code>length</code> paraméterét $1 bájtra korlátozza.\nA MediaWiki ResourceLoader (erőforrásbetöltő) összetevője megkerüli a problémát, de így csökkenni fog a teljesítmény.\nHa lehetséges, állítsd be a <code>suhosin.get.max_value_length</code> értékét legalább 1024-re a <code>php.ini</code>-ben, és állítsd be a <code>$wgResourceLoaderMaxQueryLength</code> változót ugyanerre az értékre a <code>LocalSettings.php</code>-ban.",
        "config-db-type": "Adatbázis típusa:",
        "config-db-host": "Adatbázis hosztneve:",
        "config-db-host-help": "Ha az adatbázisszerver másik szerveren található, add meg a hosztnevét vagy az IP-címét.\n\nHa megosztott webtárhelyet használsz, a szolgáltató dokumentációjában megtalálható a helyes hosztnév.\n\nHa Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.\n\nHa PostgreSQL-t használsz, hagyd ezt a mezőt üresen a Unix-socketon keresztül történő csatlakozáshoz.",
        "config-db-username": "Felhasználónév:",
        "config-db-password": "Jelszó:",
        "config-db-password-empty": "Írd be az új adatbázis-felhasználó jelszavát: $1\nVan lehetőség jelszó nélküli felhasználók létrehozására, azonban ez nem ajánlott.",
+       "config-db-username-empty": "A „{{int:config-db-username}}” mező kitöltése kötelező.",
        "config-db-install-username": "Írd be az adatbázisrendszerhez való csatlakozáshoz használt felhasználónevet.\nEz nem a MediaWiki fiók felhasználóneve; ez az adatbázisrendszeren használt felhasználóneved.",
        "config-db-install-password": "Írd be az adatbázisrendszerhez való csatlakozáshoz használt jelszót.\nEz nem a MediaWiki-fiók jelszava; ez az adatbázisrendszeren használt jelszavad.",
        "config-db-install-help": "Add meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.",
        "config-dbsupport-postgres": "* A [{{int:version-db-postgres-url}} PostgreSQL] népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni. ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással])",
        "config-dbsupport-sqlite": "* Az [{{int:version-db-sqlite-url}} SQLite] egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)",
        "config-dbsupport-oracle": "* Az [{{int:version-db-oracle-url}} Oracle] kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])",
+       "config-dbsupport-mssql": "* A [{{int:version-db-mssql-url}} Microsoft SQL Server] kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/sqlsrv.installation.php Hogyan fordítható a PHP SQLSRV-támogatással])",
        "config-header-mysql": "MySQL-beállítások",
        "config-header-postgres": "PostgreSQL-beállítások",
        "config-header-sqlite": "SQLite-beállítások",
        "config-optional-continue": "További információk megadása.",
        "config-optional-skip": "Épp elég volt, települjön a wiki!",
        "config-profile": "Felhasználói jogosultságok profilja:",
-       "config-profile-wiki": "Wiki megnyitása",
+       "config-profile-wiki": "Nyílt wiki",
        "config-profile-no-anon": "Felhasználói fiók létrehozása szükséges",
        "config-profile-fishbowl": "Csak engedélyezett szerkesztők",
        "config-profile-private": "Privát wiki",
        "config-extensions": "Kiterjesztések",
        "config-extensions-help": "A fent felsorolt kiterjesztések találhatóak meg az <code>./extensions</code> könyvtárban.\n\nLehetséges, hogy további beállításra lesz szükség hozzájuk, de már most engedélyezheted őket.",
        "config-skins": "Felületek",
+       "config-skins-help": "A fent felsorolt felületek a <code>./skins</code> könyvtáradban találhatóak. Legalább egyet engedélyezned kell, és ki kell választanod az alapértelmezettet.",
        "config-skins-use-as-default": "Felület használata alapértelmezettként",
+       "config-skins-must-enable-some": "Legalább egy felületet engedélyezned kell.",
+       "config-skins-must-enable-default": "Az alapértelmezett felületnek engedélyezettnek kell lennie.",
        "config-install-alreadydone": "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.\nFolytasd a következő oldalon.",
        "config-install-begin": "A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.\nHa szeretnél módosítani a beállításokon, kattints a \"{{int:config-back}}\" gombra.",
        "config-install-step-done": "kész",
        "config-install-stats": "Statisztika inicializálása",
        "config-install-keys": "Titkos kulcsok generálása",
        "config-insecure-keys": "'''Figyelmeztetés:''' A telepítés során generált $1 {{PLURAL:$2|biztonsági kulcs|biztonsági kulcsok}} nem teljesen $1 {{PLURAL:$2|biztonságos|biztonságosak}}. Érdemes {{PLURAL:$2||őket}} manuálisan megváltoztatni.",
+       "config-install-updates": "Nem szükséges frissítések futtatásának megakadályozása",
        "config-install-sysop": "Az adminisztrátor felhasználói fiókjának létrehozása",
        "config-install-subscribe-fail": "Nem sikerült feliratkozni a mediawiki-announce levelezőlistára: $1",
        "config-install-subscribe-notpossible": "A cURL nincs telepítve és az <code>allow_url_fopen</code> nem érhető el.",
        "config-install-done": "'''Gratulálunk!'''\nA MediaWiki telepítése sikeresen befejeződött.\n\nA telepítő elkészítette a <code>LocalSettings.php</code> fájlt, amely tartalmazza az összes beállítást.\n\nEzt le kell tölteni, majd elhelyezni a wiki telepítési könyvtárába (az a könyvtár, ahol az index.php is található).\n\nA letöltés automatikusan elindul. Ha mégsem indulna el, vagy megszakítottad, az alábbi linkre kattintva újra letöltheted:\n\n$3\n\n'''Megjegyzés''': Ha ezt most nem teszed meg, és kilépsz a telepítésből, az elkészített konfigurációs fájlt nem tudod elérni a későbbiekben.\n\nHa végeztél a fájl elhelyezésével, '''[$2 beléphetsz a wikibe]'''.",
        "config-download-localsettings": "<code>LocalSettings.php</code> letöltése",
        "config-help": "segítség",
+       "config-help-tooltip": "kattints a kibontáshoz",
        "config-nofile": "\"$1\" fájl nem található. Törölve lett?",
+       "config-extension-link": "Tudtad, hogy a wikid támogat [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions kiterjesztéseket]?\n\nBöngészhetsz [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category kiterjesztéseket kategóriánként] vagy válogathatsz a [//www.mediawiki.org/wiki/Extension_Matrix kiterjesztésmátrixból] az összes kiterjesztés áttekintéséhez.",
        "mainpagetext": "'''A MediaWiki telepítése sikeresen befejeződött.'''",
        "mainpagedocfooter": "Ha segítségre van szükséged a wikiszoftver használatához, akkor keresd fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.\n\n== Alapok (angol nyelven) ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Beállítások listája]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki GyIK]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources A MediaWiki fordítása a saját nyelvedre]"
 }
index a1ca9d2..79e6a0a 100644 (file)
@@ -13,7 +13,8 @@
                        "青子守歌",
                        "아라",
                        "Shield-9",
-                       "Takot"
+                       "Takot",
+                       "Sujiniku"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
@@ -62,7 +63,7 @@
        "config-unicode-using-intl": "Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。",
        "config-unicode-pure-php-warning": "<strong>警告:</strong> Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
        "config-unicode-update-warning": "<strong>警告:</strong> インストールされているバージョンの Unicode 正規化ラッパーは、[http://site.icu-project.org/ ICU プロジェクト]のライブラリの古いバージョンを使用しています。\nUnicode を少しでも利用する可能性がある場合は、[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations アップグレード]してください。",
-       "config-no-db": "適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。\n以下の種類のデータベースに対応しています: $1\n\nPHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysqli</code> を実行して、データベース クライアントを使用できるように再設定してください。\nDebian または Ubuntu のパッケージから PHP をインストールした場合は、モジュール (例: <code>php5-mysql</code>) もインストールする必要があります。",
+       "config-no-db": "適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。\n以下の種類のデータベース{{PLURAL:$2|のタイプ}}に対応しています: $1\n\nPHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysqli</code> を実行して、データベース クライアントを使用できるように再設定してください。\nDebian または Ubuntu のパッケージから PHP をインストールした場合は、モジュール (例: <code>php5-mysql</code>) もインストールする必要があります。",
        "config-outdated-sqlite": "<strong>警告:</strong> あなたは SQLite $1 を使用していますが、最低限必要なバージョン $2 より古いバージョンです。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] をご覧ください。",
@@ -71,7 +72,7 @@
        "config-magic-quotes-sybase": "<strong>致命的エラー: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] が動作しています!</strong>\nこのオプションは、予期せずデータ入力を破壊します。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
        "config-mbstring": "<strong>致命的エラー: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] が動作しています!</strong>\nこのオプションは、エラーを引き起こし、予期せずデータを破壊するおそれがあります。\nこのオプションを無効化しない限り、MediaWiki のインストールや使用はできません。",
        "config-safe-mode": "<strong>警告:</strong> PHPの[http://www.php.net/features.safe-mode セーフモード]が有効になっています。\n特に、ファイルのアップロードや<code>math</code>機能で、問題が発生するおそれがあります。",
-       "config-xml-bad": "PHPのXMLモジュールが不足しています。\nMediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。\nMandrakeを実行している場合、php-xmlパッケージをインストールしてください。",
+       "config-xml-bad": "PHPのXMLモジュールが不足しています。\nMediaWikiは、このモジュールの関数を必要としているため、この構成では動作しません。\nphp-xml RPM パッケージをインストールする必要があります。",
        "config-pcre-old": "<strong>致命的エラー:</strong> PCRE $1 以降が必要です。\nご使用中の PHP のバイナリは PCRE $2 とリンクされています。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 詳細情報]",
        "config-pcre-no-utf8": "<strong>致命的エラー:</strong> PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。\nMediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
        "config-memory-raised": "PHPの<code>memory_limit</code>は$1で、$2に引き上げられました。",
index 2c84dc3..b7f71b1 100644 (file)
@@ -1,9 +1,11 @@
 {
        "@metadata": {
                "authors": [
-                       "VASANTH S.N."
+                       "VASANTH S.N.",
+                       "Pavanaja"
                ]
        },
+       "config-title": "ಮೀಡಿಯಾವಿಕಿ ಆವೃತ್ತಿ $1 ರ ಅನುಸ್ಥಾಪನೆ",
        "config-information": "ಮಾಹಿತಿ",
        "config-localsettings-key": "ಉನ್ನತೀಕರಣ ಕೀಲಿ",
        "config-localsettings-badkey": "ನೀವು ನೀಡಿದ ಕೀಲಿ ಸರಿಯಾಗಿಲ್ಲ",
index f7160b6..8cd8dfe 100644 (file)
@@ -6,7 +6,8 @@
                        "Hym411",
                        "Priviet",
                        "Namoroka",
-                       "Revi"
+                       "Revi",
+                       "Alex00728"
                ]
        },
        "config-desc": "미디어위키를 위한 설치 관리자",
@@ -64,7 +65,7 @@
        "config-magic-quotes-sybase": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-mbstring": "<strong>치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화되어 있습니다!</strong>\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-safe-mode": "<strong>경고:</strong> PHP의 [http://www.php.net/features.safe-mode 안전 모드]가 활성화되어 있습니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
-       "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nMandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.",
+       "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nphp-xml 패키지를 설치해야할 수도 있습니다.",
        "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(으)로 늘렸습니다.",
index fbb7fd9..8990b8a 100644 (file)
@@ -50,7 +50,7 @@
        "config-env-php": "PHP $1 es doh.",
        "config-env-hhvm": "HHVM $1 es enschtalleerd.",
        "config-unicode-using-intl": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] nämme.",
-       "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] för et <i lang=\"en\">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang=\"en\">PHP</i>-Projrammshtöck doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations <i lang=\"en\">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.",
+       "config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] för et <i lang=\"en\">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang=\"en\">PHP</i>-Projrammshtöck doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch di Sigg övver et [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations <i lang=\"en\">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.",
        "config-unicode-update-warning": "'''Opjepaß:''' Dat Projramm för der <i lang=\"en\">Unicode</i> zo normaliseere boud em Momang op en  ählter Version vun dä Bibliothek vum [http://site.icu-project.org/ ICU-Projäk] op.\nDoht di [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations op der neuste Shtand bränge], wann auf dat Wiki em Äänz <i lang=\"en\">Unicode</i> bruche sull.",
        "config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä {{PLURAL:$2|Daatebangk|Daatebangke|Daatebangk}} ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge <i lang=\"en\">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: <code  lang=\"en\">./configure --with-mysql</code>.\nWann De PHP uss enem <i lang=\"en\">Debian</i> udder <i lang=\"en\">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang=\"en\">php5-mysql</code> op Dinge Räschner bränge.",
        "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.",
@@ -73,7 +73,7 @@
        "config-apc": "Dä <code lang=\"en\">[http://www.php.net/apc APC]</code> es ennjeresht.",
        "config-wincache": "Dä <code lang=\"en\">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> es ennjeresht.",
        "config-no-cache": "'''Opjepaß:''' Mer kunnte dä <code lang=\"en\">[http://www.php.net/apc APC]</code>, dä <code lang=\"en\">[http://xcache.lighttpd.net/ XCache]</code> un dä <code lang=\"en\">[http://www.iis.net/download/WinCacheForPhp WinCache]</code> nit fenge.\nEt <i lang=\"en\">object caching</i> es nit müjjelesh un ußjeschalldt.",
-       "config-mod-security": "'''Opjepaß''': Dinge Webßööver hät <code lang=\"en\">[http://modsecurity.org/ mod_security]</code> enjeschalldt. Wann doh derbei en Enschtällong nit janz akeraat paßß, dann kann et goot sin, dat mer Probleme met MeedijaWiki un oc met ander Projramme kritt, die zohlööt, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wääde künnt.Beloor Der di Sigg <code lang=\"en\">[http://modsecurity.org/documentation/ mod_security documentation]</code> udder donn met dä Fachlück för Dinge Webßööver kalle, wann zohfälleje un koomijje Fähler bemerke deihß.",
+       "config-mod-security": "<strong>Opjepaß</strong>: Dinge Wäbßööver hät <code  lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[http://modsecurity.org/ mod_security]</code> enjeschalldt. Jenohch schtandattmähßejje Enschtällonge heh em Wikki künne Problehme met MehdijaWikki un och met ander Projramme aanschtivvelle, di zohlohße, dat vun ußerhallef öhndsene Krohm op dä Webßööver jebraat wähde künnt.\nWann müjjelesch sullt mer dat affschallde. Söns beloor Der di Sigg <code  lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[http://modsecurity.org/documentation/ mod_security documentation]</code> udder donn met dä Fachlück för Dinge Webßööver kalle, wann zohfälleje un koomijje Fähler bemärke deihß.",
        "config-diff3-bad": "Mer han <i lang=\"en\">GNU</i> <code lang=\"en\">diff3</code> nit jefonge.",
        "config-git": "Mer han de Väsjohn <code>$1</code> vun däm Väsjohnsverwalldongsprojamm <i lang=\"en\">Git</i> jefonge.",
        "config-git-bad": "Dat Väsjohnsverwalldongsprojamm <i lang=\"en\">Git</i> ham_mer nit jefonge.",
@@ -97,7 +97,7 @@
        "config-db-name": "Dä Nahme vun dä Daatebangk:",
        "config-db-name-help": "Jiff ene Name aan, dä för Ding Wiki passe deiht.\nDoh sullte kei Zweschrereum un kein Stresche dren sin.\n\nWann De nit op Dingem eije Rääschner bes, künnt et sin, dat Dinge Provaider Der extra ene beshtemmpte Name för de Daatebangk jejovve hät, uffr dat de dä drom froore moß udder dat De de Daatebangke övver e Fommulaa selver enreeschte moß.",
        "config-db-name-oracle": "Schema för de Daatebangk:",
-       "config-db-account-oracle-warn": "Mer han drei Aate, wi mer <i lang=\"en\">Oracle</i> als Dahtebangk aanbenge künne.\n\nWann De ene neue Zohjang op de Dahtenbangk met Nahme un Paßwoot mem Projramm för et Opsäze aanlääje wells, dann jif ene Zohjang met däm Rääsch „<i lang=\"en\">SYSDBA</i>“ aan, dä et alld jitt, un jif däm di Daate aan för dä neue Zohjang aanzelääje.\nDo kanns och dä neue Zohjang vun Hand aanlääje un heh beim Opsäze nur dää aanjävve — wann dä dat Rääsch hät, en de Daatebangk Schema_Objäkte aanzelääje.\nUdder De jiß zwei ongerscheidlijje Zohjäng op de Daatenbangk aan, woh eine vun dat Rääsch zom Aanlääje hät un dä andere moß dat nit un es för der nomaale Bedrief zohshtändesch.\n\nEn Skrep, wat ene Zohjang op de Dahtenbangk aanlääsch met all dä nüüdejje Rääschde, fengks De em Verzeishneß <code lang=\"en\">maintenance/oracle/</code> vun Dingem MediaWiki. Donn draan dengke, dat ene Zohjang met beschrängkte Rääschde all di Müjjeleschkeite för et Waade un Repareere nit hät, di de jewöhnlejje Zoot Zohjang met sesh brängk.",
+       "config-db-account-oracle-warn": "Mer han drei Aate, wi mer <i lang=\"en\">Oracle</i> als Dahtebangk aanbenge künne.\n\nWann De ene neue Zohjang op de Dahtenbangk met Nahme un Paßwoot mem Projramm för et Opsäze aanlääje wells, dann jif ene Zohjang met däm Rääsch „<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"SYS - Database Administrator Authentication\">SYSDBA</i>“ aan, dä et alld jitt, un jif däm di Daate aan för dä neue Zohjang aanzelääje.\nDo kanns och dä neue Zohjang vun Hand aanlääje un heh beim Opsäze nur dää aanjävve — wann dä dat Rääsch hät, en de Daatebangk Schema_Objäkte aanzelääje.\nUdder De jiß zwei ongerscheidlijje Zohjäng op de Daatenbangk aan, woh eine vun dat Rääsch zom Aanlääje hät un dä andere moß dat nit un es för der nomaale Bedrief zohshtändesch.\n\nEn Skrep, wat ene Zohjang op de Dahtenbangk aanlääsch met all dä nüüdejje Rääschde, fengks De em Verzeishneß <code lang=\"en\">maintenance/oracle/</code> vun Dingem MediaWiki. Donn draan dengke, dat ene Zohjang met beschrängkte Rääschde all di Müjjeleschkeite för et Waade un Repareere nit hät, di de jewöhnlejje Zoot Zohjang met sesh brängk.",
        "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-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 Name un e Paßwoot aan, för dä Aanwender för dä Zohjref op de Daatebangk, wann et wiki nommaal aam Loufe es.\nWan et dä Name en der Daatebangk noch it jit, un dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere\njenooch Beräschtijunge hät, läät dä heh dä Aanwender en der Daatebangk aan un jidd_em di Rääschde, di dä nüüdesch hät, ävver nit mieh.",
+       "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-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-charset-mysql4": "MySQL 4.0 röckwääts kompatibel UTF-8",
-       "config-charset-help": "<strong>Opjepaß:</strong>\nWann De et <strong>röckwääts kompatibel UTF-8 Fommaht</strong> nemmps, met dem <i lang=\"en\">MySQL</i> singe Väsjohn 4.1 udder hüüter, dann künnt dat all di Zeische kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all Ding Sescherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Schpeischere em <strong>binäre Fomaat</strong> deiht MediaWiki de Täx, dä em UTF-8 Fommaht küt, en dä Dahtebangk en binähr kodehrte Dahtefälder faßhallde.\nDat es flöcker un spaasahmer wi et UTF-8 Fommaht vum <i lang=\"en\">MySQL</i> un määd_et müjjelesch, jehdes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaht</strong> deihd_et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodehrung vun dä Dahte känne, un kann se akeraht aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrondlähje Knubbel för vill Schprohche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wähde.",
+       "config-charset-help": "<strong>Opjepaß:</strong>\nWann De et <strong>röckwääts kompatibel UTF-8 Fommaht</strong> nemmps, met dem <i lang=\"en\">MySQL</i> singe Väsjohn 4.1 udder hüüter, dann künnt dat all di Zeische kappott maache, di nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all Ding Sescherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Schpeischere em <strong>binäre Fomaat</strong> deiht MediaWiki de Täx, dä em UTF-8 Fommaht küt, en dä Dahtebangk en binähr kodehrte Dahtefälder faßhallde.\nDat es flöcker un spaasahmer wi et UTF-8 Fommaht vum <i lang=\"en\">MySQL</i> un määd_et müjjelesch, jehdes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaht</strong> deihd_et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodehrung vun dä Dahte känne, un kann se akeraht aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrondlähje Knubbel för vill Schprohche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wähde.",
        "config-mysql-old": "Mer bruche <i lang=\"en\">MySQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">MySQL</i> $2 aam Loufe.",
        "config-db-port": "De Pooz-Nommer (<i lang=\"en\">port</i>) för de Daatebangk:",
        "config-db-schema": "Et Schehma en de Datebangk för MehdijaWikki:",
        "config-invalid-db-prefix": "Dä Vörsaz för de Name vun de Tabälle en de Daatebangk kann nit „$1“ sin, dä es esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Bendeshtreshe (-) dren vörkumme.",
        "config-connection-error": "$1.\n\nDonn de Name för dä Rääschner, vun däm Aanwender för dä Zohjref op de Daatebangk, un et Paßwoot prööfe, repareere, un dann versöhg et norr_ens.",
        "config-invalid-schema": "Dat Schema för MediaWiki kann nit „$1“ sin, dä Name wöhr esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), un Ongerstreshe (_) dren vörkumme.",
-       "config-db-sys-create-oracle": "Dat Projramm för MehdijaWikki opzesäze kann blohß ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">SYSDBA</i>-Zohjang bruche för ene neuje Zohjang zor Dahtebangk ennzereeschte.",
-       "config-db-sys-user-exists-oracle": "Dä Aanwender „$1“ för dä Zohjref op de Daatebangk jidd_et ald. <i lang=\"en\">SYSDBA</i> kam_mer bloß bruche, för ene neue Zohjang enzereeschte!",
+       "config-db-sys-create-oracle": "Dat Projramm för MehdijaWikki opzesäze kann blohß ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"SYS - Database Administrator Authentication\">SYSDBA</i>-Zohjang bruche för ene neuje Zohjang zor Dahtebangk ennzereeschte.",
+       "config-db-sys-user-exists-oracle": "Dä Aanwender „$1“ för dä Zohjref op de Daatebangk jidd_et ald. <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"SYS - Database Administrator Authentication\">SYSDBA</i> kam_mer bloß bruche, för ene neue Zohjang enzereeschte!",
        "config-postgres-old": "Mer bruche <i lang=\"en\">PostgreSQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">PostgreSQL</i> $2 aam Loufe.",
        "config-mssql-old": "Dä <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>   aff de Väsjohn $1 es nüüdesch. Heh es bloß d Väsjohn $2 ze fenge.",
        "config-sqlite-name-help": "Söhk ene Nahme uß, dä Ding Wikki beschrief.\nDonn kein Bendeschresch un Zweschräum en däm Name bruche.\nDä Name weed för der Datteinahme för de <i lang=\"en\">SQLite</i> Dahtebangk jenumme.",
        "config-mssql-sqlauth": "De Aanmäldong bemm <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>",
        "config-mssql-windowsauth": "De Annmäldong bemm <i lang=\"en\" xml:lang=\"en\">Windows</i>",
        "config-site-name": "Däm Wikki singe Nahme:",
-       "config-site-name-help": "Dä douch em Tettel vun de Brauserfinstere un aan ätlije andere Schtälle op.",
+       "config-site-name-help": "Dä douch en dä Övverschreff vun de Brauserfinstere un aan ätlije andere Schtälle op.",
        "config-site-name-blank": "Donn ene Name för di Sait aanjävve.",
        "config-project-namespace": "Dä Name för et Appachtemang övver et Projäk:",
        "config-ns-generic": "Projäk",
        "config-logo": "Dem Wiki singem Logo sing <i lang=\"en\">URL</i>:",
        "config-logo-help": "De Schtandart_Bedeen_Bovverfläsch vum MediaWiki hät e Logo bovve en der Eck met 135x160 Pixele.\nDonn e zopaß Logo huh laade, un donn däm sing URL heh endraare.\n\nDo kanns <code lang=\"en\">$wgStylePath</code> udder <code lang=\"en\">$wgScriptPath</code> nämme, wann Ding Logo en einem vun dänne Pahde litt.\n\nWells De kei Logo han, draach heh nix en.",
        "config-instantcommons": "Donn <i lang=\"en\">InstantCommons</i> zohlohße.",
-       "config-instantcommons-help": "<i lang=\"en\">[//www.mediawiki.org/wiki/InstantCommons InstantCommons]</i> es en Eijeschaff, di et för Wikis müjjelesch määt, Belder, Tondatteie un ander Meedijedatteie enzebenge, di op dä Webßait vun de <i lang=\"en\">[//commons.wikimedia.org/ Wikimedia Commons]</i> ongerjebraat sin. Öm dat noze ze künne, moß dä ẞööver vum MediaWiki en Verbendung nohm Internet opnämme künne.\n\nMieh Aanjaabe doh drövver un en Aanleidung, wi mer och ander Wikis ußer de <i lang=\"en\">Wikimedia Commons</i> doför enreeschte kann, fengk mer em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Handbooch].",
+       "config-instantcommons-help": "<i lang=\"en\">[//www.mediawiki.org/wiki/InstantCommons InstantCommons]</i> es en Eijeschaff, di et för Wikis müjjelesch määt, Belder, Tondatteie un ander Meedijedatteie enzebenge, di op dä Webßait vun de <i lang=\"en\">[//commons.wikimedia.org/ Wikimedia Commons]</i> ongerjebraat sin. Öm dat noze ze künne, moß dä ẞööver vum MediaWiki en Verbendung nohm Internet opnämme künne.\n\nMih Aanjahbe doh drövver un en Aanleidong, wi mer och ander Wikis ußer de <i lang=\"en\">Wikimedia Commons</i> doför enreeschte kann, fengk mer em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Handbooch].",
        "config-cc-error": "Et Ußsöhke övver de <i lang=\"en\">Creative Commons</i> iehr Projramm zum Lizänzbeshtemme hät nix jebraat.\nDonn de Lizänz sellver beshtemme.",
        "config-cc-again": "Noch ens neu ußsöhke&nbsp;…",
        "config-cc-not-chosen": "Söhk uß, wat för en Lizänz vun de <i lang=\"en\">Creative Commons</i> De han wells, un donn dann op „<i lang=\"en\">proceed</i>“ klecke.",
index 47dab58..9bbb635 100644 (file)
@@ -23,6 +23,7 @@
        "config-page-restart": "Barkirinê jinûve dest pê bide kirin",
        "config-page-readme": "Min bixwîne",
        "config-page-copying": "Kopîkirin",
+       "config-page-upgradedoc": "Bilindkirin",
        "config-page-existingwiki": "Wîkiya heye",
        "config-restart": "Erê, jinûve bide destpêkirin",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] hate avakirin",
@@ -39,6 +40,7 @@
        "config-mysql-myisam": "MyISAM",
        "config-mysql-utf8": "UTF-8",
        "config-site-name": "Navê wîkiyê:",
+       "config-site-name-blank": "Navê malperek têkeve.",
        "config-ns-generic": "Proje",
        "config-ns-other-default": "MyWiki",
        "config-admin-box": "Hesabê rêveberiyê",
@@ -53,6 +55,8 @@
        "config-email-usertalk": "Agahdariyên rûpela gotûbêjê ya bikarhêner gengaz bike",
        "config-upload-settings": "Barkirina wêne û dosyeyan",
        "config-upload-enable": "Barkirina dosyeyan gengaz bike",
+       "config-logo": "URL'ya logoyêː",
+       "config-cc-again": "Dîsa hilbijêre...",
        "config-install-step-done": "çêbû",
        "config-help": "alîkarî",
        "mainpagetext": "'''MediaWiki serketî hate çêkirin.'''",
index 607fc40..6d93a5c 100644 (file)
@@ -8,8 +8,12 @@
        "config-information": "دونسمنيا",
        "config-your-language": "زون شما:",
        "config-wiki-language": "زون ویکی:",
+       "config-back": "← ڤادئما",
+       "config-continue": "نئها گئرئتئن →",
        "config-page-language": "زون",
        "config-page-welcome": "د ویکی رسانه خوش اومایت!",
+       "config-page-dbconnect": "ڤأصل بییئن د رئسینە جا",
+       "config-page-dbsettings": "میزوٙنکاری رئسینە جا",
        "config-page-name": "نوم",
        "config-page-options": "گزينه يا هنی:",
        "config-page-install": "پورنیئن",
index 53324c6..e9deb7b 100644 (file)
@@ -19,6 +19,7 @@
        "config-page-language": "Fiteny",
        "config-page-welcome": "Tonga soa eto amin'i MediaWiki !",
        "config-page-dbconnect": "Hiditra eo amin'i banky angona",
+       "config-page-dbsettings": "Parametatry ny banky angona",
        "config-page-name": "Anarana",
        "config-page-options": "Safidy",
        "config-page-install": "Apetraka",
        "config-page-existingwiki": "Wiki efa misy",
        "config-help-restart": "Tianao hofafana avokoa ve ny data voaangona natsofokao ary hamerina ny fizotran'ny fametrahana ?",
        "config-restart": "Eny, avereno atao",
+       "config-welcome": "=== Fanamarinana mikasika ny tontolo ===\nNy fanamarihana tsotsotra dia atao hijerena raha mety ho ana rindrankajy Mediawiki ny tontolo.\nTadidio ny mametraka ireto torohay ireo raha mitady fanohanana mikasika ny fomba famaranana ny fametrahana ianao.",
+       "config-env-good": "Voamarina ny tontolo.\nAfaka apetrakao i MediaWiki.",
+       "config-env-bad": "Voamarina ny tontolo.\nTsy afaka mametraka an'i MediaWiki ianao.",
+       "config-env-php": "Misy ato PHP $1.",
+       "config-env-hhvm": "Misy ato HHVM $1.",
+       "config-unicode-using-intl": "Mampiasa ny [http://pecl.php.net/intl itatra PECL intl] ho an'ny fampifenerana Unicode.",
+       "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-header-mysql": "Parametatr'i MySQL",
index 8649484..582919d 100644 (file)
@@ -60,7 +60,7 @@
        "config-magic-quotes-sybase": "'''Кобно: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активно!'''\nОваа можност непредвидливо го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го воспоставите и користите МедијаВики.",
        "config-mbstring": "'''Кобно: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активно!'''\nОваа можност предизвикува грешки и може непредвидиво да го расипува вносот на податоци.\nОваа можност мора да е исклучена. Во спротивно нема да можете да го воспоставите и користите МедијаВики.",
        "config-safe-mode": "'''Предупредување:''' [http://www.php.net/features.safe-mode безбедниот режим] на PHP е активен.\nОва може да предизвика проблеми, особено ако користите подигања и поддршка за <code>math</code>.",
-       "config-xml-bad": "XML-модÑ\83лоÑ\82 Ð·Ð° PHP Ð½ÐµÐ´Ð¾Ñ\81Ñ\82аÑ\81Ñ\83ва.\nÐ\9cедиÑ\98аÐ\92ики Ð¸Ð¼Ð° Ð¿Ð¾Ñ\82Ñ\80еба Ð¾Ð´ Ñ\84Ñ\83нкÑ\86ии Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¼Ð¾Ð´Ñ\83л Ð¸ Ð½ÐµÐ¼Ð° Ð´Ð° Ñ\80абоÑ\82и Ñ\81о Ð¾Ð²Ð¸Ðµ Ð¿Ð¾Ñ\81Ñ\82авки.\nÐ\90ко Ñ\80абоÑ\82иÑ\82е Ñ\81о Mandrake, Ð²Ð¾Ñ\81поÑ\81Ñ\82авеÑ\82е Ð³Ð¾ Ð¿Ð°ÐºÐµÑ\82оÑ\82 php-xml.",
+       "config-xml-bad": "XML-модÑ\83лоÑ\82 Ð·Ð° PHP Ð½ÐµÐ´Ð¾Ñ\81Ñ\82аÑ\81Ñ\83ва.\nÐ\9cедиÑ\98аÐ\92ики Ð¸Ð¼Ð° Ð¿Ð¾Ñ\82Ñ\80еба Ð¾Ð´ Ñ\84Ñ\83нкÑ\86ии Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¼Ð¾Ð´Ñ\83л Ð¸ Ð½ÐµÐ¼Ð° Ð´Ð° Ñ\80абоÑ\82и Ñ\81о Ð¾Ð²Ð¸Ðµ Ð¿Ð¾Ñ\81Ñ\82авки.\nÐ\9cоже Ð´Ð° Ñ\82Ñ\80еба Ð´Ð° Ð³Ð¾ Ð²Ð¾Ñ\81поÑ\81Ñ\82авиÑ\82е RPM-пакеÑ\82оÑ\82 â\80\9ephp-xmlâ\80\9c.",
        "config-pcre-old": "'''Кобно:''' Се бара PCRE $1 или понова верзија.\nВашиот PHP-бинарен е сврзан со PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Повеќе информации].",
        "config-pcre-no-utf8": "'''Фатално''': PCRE-модулот на PHP е составен без поддршка за PCRE_UTF8.\nМедијаВики бара поддршка за UTF-8 за да може да работи правилно.",
        "config-memory-raised": "<code>memory_limit</code> за PHP изнесува $1, зголемен на $2.",
index 632951b..78683ad 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "V.narsikar"
+                       "V.narsikar",
+                       "Suyog"
                ]
        },
        "config-information": "माहिती",
@@ -11,6 +12,7 @@
        "config-your-language": "आपली भाषा:",
        "config-your-language-help": "उभारणी प्रक्रियेत वापरावयाची भाषा निवडा.",
        "config-wiki-language": "विकी भाषा:",
+       "config-wiki-language-help": "तुमची लेखन भाषा निवडा",
        "config-back": "← परत",
        "config-continue": "चालू ठेवा →",
        "config-page-language": "भाषा",
@@ -23,6 +25,7 @@
        "config-page-readme": "हे वाचा",
        "config-page-releasenotes": "विमोचन टिप्पण्या",
        "config-page-existingwiki": "साध्याचा विकि",
+       "config-restart": "हो, परत चालू करा",
        "config-pg-test-error": "विदागाराशी अनुबंधन करता येत नाही <strong>$1</strong>: $2",
        "config-type-mssql": "मायक्रोसॉफ्ट एसक्युएल सर्व्हर",
        "config-header-mssql": "मायक्रोसॉफ्ट एसक्युएल सर्व्हर मांडणावळ",
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 2f2707e..741c198 100644 (file)
        "config-mssql-old": "Microsoft SQL Server $1 o cchiù muderno è necessario. Vuje tenite $2.",
        "config-sqlite-name-help": "Sciglite nu nomme ca identificasse 'o wiki vuosto.\nNun ausà spazie o trattine.\nChesto serverrà pe' putè miettere 'o nomme ro file 'e date SQLite.",
        "config-sqlite-parent-unwritable-group": "Nun se pò crià 'a cartella 'e date <code><nowiki>$1</nowiki></code>, pecché 'a cartella supiriore <code><nowiki>$2</nowiki></code> nun se pò scrivere 'a 'o webserver.\n\n'O prugramma d'installazione ha determinato l'utente c' 'o quale 'o server web se stà a esecutà.\nDàte 'a pussibbelità 'e scrivere dint' 'a cartella <code><nowiki>$3</nowiki></code> pe' cuntinuà\nNcopp'a nu sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "Nun se può crià na cartella 'e date <code><nowiki>$1</nowiki></code>, pecché 'a cartella patre <code><nowiki>$2</nowiki></code> nun è scrivibbele p' 'o server web.\n\n'O prugramma 'e installazione nun ave pututo determinà l'utente c' 'o quale se stà ausanno 'o server web.\nFacite 'a cartella <code><nowiki>$3</nowiki></code> screvibbele globbalmente pe chisto (e ll'ati!) pe' putè cuntinuà:\nDint'a nu sistema Unix/Linux facite:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-sqlite-mkdir-error": "Errore pe' tramente ca se faceva 'a criazione d' 'o directory date \"$1\".\nCuntrullate 'a posizione e pruvate n'ata vota.",
        "config-sqlite-dir-unwritable": "Nun se pò scrivere dint' 'a directory \"$1\".\nCagnate ll'autorizzaziune 'n modo ca 'o webserver pozza scrivere ncoppa e pruvate n'ata vota.",
        "config-sqlite-connection-error": "$1.\n\nCuntrullate 'a cartella 'e date e 'o nomme d' 'o database ccà abbascio e pruvate n'ata vota.",
        "config-mysql-engine": "Mutore d'astipo:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> è quase sempe 'a meglia opzione, pecché ave nu buono suppuorto concorrente.\n\n<strong>MyISAM</strong> putesse ghì cchiù ampressa int'a na installazione mono-utente e liegge-surtanto.\n'E database MyISAM se scassano cchiù spisso d' 'e database InnoDB.",
        "config-mysql-charset": "Nzieme 'e carattere d' 'o database:",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
        "config-admin-name-blank": "Mettite nu nomme utente p' 'ammenistratore.",
        "config-admin-name-invalid": "'O namespace specificato \"<nowiki>$1</nowiki>\" nun è buono.\nSpecificate nu namespace differente.",
        "config-admin-password-blank": "Miette na password p' 'o cunto d'ammenistratore.",
+       "config-admin-password-mismatch": "'E dduje password c'avite miso nun songhe eguale.",
        "config-admin-email": "Indirizzo e-mail:",
+       "config-admin-email-help": "Azzecate ccà nu nderizzo e-mail pe' pute ricevere 'e mmasciate mail 'a ll'at'utente d' 'o wiki, mpustà n'ata vota 'a password vuosta, e ve nfurmà d' 'e cagnamiente fatte a 'e paggene dint'a ll'elenco 'e paggene cuntrullate. Putite lassà stu campo abbacante.",
+       "config-admin-error-user": "Errore interno quanno se steva a crià n'ammenistratore c' 'o nomme \"<nowiki>$1</nowiki>\".",
+       "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-optional-continue": "Spiate cchiù dimanne.",
        "config-optional-skip": "Me so' scucciato già, installa surtanto 'o wiki.",
        "config-profile": "Profilo 'e deritte utente:",
index 83fb3d8..fecf474 100644 (file)
@@ -5,6 +5,7 @@
                        "Psubhashish"
                ]
        },
+       "config-information": "ସୂଚନା",
        "config-session-error": "ଅଧିବେଶନ ଆରମ୍ଭରେ ଅସୁବିଧା: $1",
        "config-your-language": "ଆପଣଙ୍କ ଭାଷା:",
        "config-your-language-help": "ଇନଷ୍ଟଲ କରିବା ବେଳେ ବ୍ୟବହାର ପାଇଁ ଏକ ଭାଷା ବାଛନ୍ତୁ ।",
        "config-page-existingwiki": "ଏବେକାର ଉଇକି",
        "config-restart": "ହଁ, ଏହାକୁ ପୁନରାରମ୍ଭ କରନ୍ତୁ",
        "config-env-php": "PHP $1 ଇନଷ୍ଟଲ ହେଲା ।",
+       "config-db-type": "ଡାଟାବେସ ପ୍ରକାର:",
+       "config-db-host": "ଡାଟାବେସ ହୋଷ୍ଟ:",
+       "config-db-name": "ଡାଟାବେସ ନାମ:",
+       "config-site-name": "ଉଇକିର ନାମ:",
+       "config-site-name-blank": "ସାଇଟ ନାମ ଦିଅନ୍ତୁ ।",
+       "config-project-namespace": "ପ୍ରକଳ୍ପ ନେମସ୍ପେସ:",
+       "config-ns-generic": "ପ୍ରକଳ୍ପ",
+       "config-ns-other": "ଅନ୍ୟ (ଦର୍ଶାଇବେ)",
+       "config-ns-other-default": "ମୋଉଇକି",
+       "config-admin-box": "ପରିଚାଳକ ଆକାଉଣ୍ଟ",
+       "config-admin-name": "ଆପଣଙ୍କର ବ୍ୟବହାରକାରୀ ନାମ:",
+       "config-admin-password": "ପାସୱାର୍ଡ",
+       "config-admin-password-confirm": "ଆଉଥରେ ପାସୱାର୍ଡ",
        "config-license-cc-by-sa": "କ୍ରିଏଟିଭ କମନ୍ସ ଆଟ୍ରିବ୍ୟୁସନ-ସେଆର ଏଲାଇକ",
-       "config-license-cc-by-nc-sa": "କ୍ରିଏଟିଭ କମନ୍ସ ଆଟ୍ରିବ୍ୟୁସନ-ନନକମର୍ସିଆଲ ସେଆର ଏଲାଇକ"
+       "config-license-cc-by-nc-sa": "କ୍ରିଏଟିଭ କମନ୍ସ ଆଟ୍ରିବ୍ୟୁସନ-ନନକମର୍ସିଆଲ ସେଆର ଏଲାଇକ",
+       "config-install-step-done": "ହୋଇଗଲା"
 }
index 5ec110d..e7d2388 100644 (file)
@@ -97,7 +97,7 @@
        "config-no-scaling": "Nie odnaleziono biblioteki GD lub ImageMagick. Możliwość zmniejszania załadowywanych grafik zostanie wyłączona.",
        "config-no-uri": "'''Błąd:''' Nie można określić aktualnego URI.\nInstalacja została przerwana.",
        "config-no-cli-uri": "<strong>Ostrzeżenie:</strong> Nie wskazano <code>--scriptpath</code>, użycie wartości domyślnej: <code>$1</code>.",
-       "config-using-server": "â\80\9e<nowiki>$1</nowiki>â\80\9c jest adresem serwera, na którym instalowana jest wiki.",
+       "config-using-server": "â\80\9e<nowiki>$1</nowiki>â\80\9d jest adresem serwera, na którym instalowana jest wiki.",
        "config-using-uri": "Wiki będzie zainstalowana pod adresem \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Uwaga''' – domyślny katalog do którego zapisywane są przesyłane pliki <code>$1</code> jest podatny na wykonanie dowolnego skryptu.\nChociaż MediaWiki sprawdza wszystkie przesłane pliki pod kątem bezpieczeństwa, zaleca się jednak, aby [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security zamknąć tę lukę w zabezpieczeniach] przed włączeniem przesyłania plików.",
        "config-no-cli-uploads-check": "'''Ostrzeżenie:''' Katalog domyślny przesyłanych plików ( <code>$1</code> ) nie jest sprawdzona względem luki\n wykonania dowolnego skryptu podczas instalacji CLI w zabezpieczeniach.",
        "config-connection-error": "$1.\n\nSprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie.",
        "config-invalid-schema": "Nieprawidłowa nazwa schematu dla MediaWiki „$1”.\nNazwa może zawierać wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).",
        "config-db-sys-create-oracle": "Instalator może wykorzystać wyłącznie konto SYSDBA do tworzenia nowych kont użytkowników.",
-       "config-db-sys-user-exists-oracle": "Konto użytkownika â\80\9e$1â\80\9c już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!",
+       "config-db-sys-user-exists-oracle": "Konto użytkownika â\80\9e$1â\80\9d już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!",
        "config-postgres-old": "Korzystasz z wersji $2 oprogramowania PostgreSQL, a potrzebna jest wersja co najmniej $1.",
        "config-mssql-old": "Wymagany jest Microsoft SQL Server w wersji $1 lub nowszej. Masz zainstalowaną wersję $2.",
        "config-sqlite-name-help": "Wybierz nazwę, która będzie identyfikować Twoją wiki.\nNie wolno używać spacji ani myślników.\nZostanie ona użyta jako nazwa pliku danych SQLite.",
        "config-pg-no-create-privs": "Konto, które zostało określone dla instalacji nie ma wystarczających uprawnień, aby utworzyć konto.",
        "config-pg-not-in-role": "Konto określone dla użytkownika sieci już istnieje.\nKonto określone dla instalacji nie ma uprawnień administratora ani nie jest przynależy do roli użytkownika sieci web, więc nie można utworzyć obiektów stanowiących własność użytkownika sieci.\n\nMediaWiki wymaga obecnie, by tabele były własnością konta zwykłego użytkownika. Podaj inną nazwę konta użytkownika, lub kliknij przycisk \"Wstecz\" i podaj nazwę konta użytkownika instalatora, które posiada odpowiednie uprawnienia.",
        "config-install-user": "Tworzenie użytkownika bazy danych",
-       "config-install-user-alreadyexists": "Konto użytkownika â\80\9e$1â\80\9c już istnieje",
+       "config-install-user-alreadyexists": "Konto użytkownika â\80\9e$1â\80\9d już istnieje",
        "config-install-user-create-failed": "Tworzenie użytkownika \"$1\" nie powiodło się: $2",
        "config-install-user-grant-failed": "Przyznanie uprawnień użytkownikowi „$1” nie powiodło się – $2",
-       "config-install-user-missing": "Nie istnieje konto użytkownika â\80\9e$1â\80\9c.",
+       "config-install-user-missing": "Nie istnieje konto użytkownika â\80\9e$1â\80\9d.",
        "config-install-user-missing-create": "Określony użytkownik \"$1\" nie istnieje.\nKliknij poniższe pole wyboru „utwórz konto\" jeśli chcesz go utworzyć.",
        "config-install-tables": "Tworzenie tabel",
        "config-install-tables-exist": "'''Uwaga''' – wygląda na to, że tabele MediaWiki już istnieją.\nPomijam tworzenie tabel.",
        "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-sysop": "Tworzenie konta administratora",
-       "config-install-subscribe-fail": "Nie można zapisaÄ\87 na listÄ\99 â\80\9emediawiki-announceâ\80\9c – $1",
+       "config-install-subscribe-fail": "Nie można zapisaÄ\87 na listÄ\99 â\80\9emediawiki-announceâ\80\9d – $1",
        "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc <code>allow_url_fopen</code> nie jest dostępne.",
        "config-install-mainpage": "Tworzenie strony głównej z domyślną zawartością",
        "config-install-extension-tables": "Tworzenie tabel dla aktywnych rozszerzeń",
index 386215a..fa3512e 100644 (file)
@@ -64,7 +64,6 @@
        "config-env-bad": "Была проведена проверка внешней среды.\nВы не можете установить MediaWiki.",
        "config-env-php": "Установленная версия PHP: $1.",
        "config-env-hhvm": "HHVM $1 установлена.",
-       "config-unicode-using-utf8": "Использовать Brion Vibber utf8_normalize.so для нормализации Юникода.",
        "config-unicode-using-intl": "Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
        "config-unicode-pure-php-warning": "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникода].",
        "config-unicode-update-warning": "'''Предупреждение''': установленная версия обёртки нормализации Юникода использует старую версию библиотеки [http://site.icu-project.org/ проекта ICU].\nВы должны [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations обновить версию], если хотите полноценно использовать Юникод.",
@@ -77,7 +76,7 @@
        "config-magic-quotes-sybase": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nЭто приводит к непредсказуемой порче вводимых данных.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
        "config-mbstring": "'''Проблема: включена опция PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nЭто приводит к ошибкам и непредсказуемой порче вводимых данных.\nУстановка и использование MediaWiki без выключения этой опции невозможно.",
        "config-safe-mode": "'''Предупреждение:''' PHP работает в [http://www.php.net/features.safe-mode «безопасном режиме»].\nЭто может привести к проблемам, особенно с загрузкой файлов и вставкой математических формул.",
-       "config-xml-bad": "XML-модуль РНР отсутствует.\nMediaWiki не будет работать в этой конфигурации, так как требуется функционал этого модуля.\nЕсли вы работаете в Mandrake, установите PHP XML-пакет.",
+       "config-xml-bad": "Для РНР отсутствует XML-модуль.\nMediaWiki не будет работать в этой конфигурации, так как требуется функционал этого модуля.\nВозможно, вам понадобится установить RPM-пакет php-xml.",
        "config-pcre-old": "'''Фатальная ошибка:''' требуется PCRE версии $1 или более поздняя.\nВаш исполняемый файл PHP связан с PCRE версии $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Подробнее].",
        "config-pcre-no-utf8": "'''Фатальная ошибка'''. Модуль PCRE для PHP, похоже, собран без поддержки PCRE_UTF8.\nMediaWiki требует поддержки UTF-8 для корректной работы.",
        "config-memory-raised": "Ограничение на доступную PHP память (<code>memory_limit</code>) поднято с $1 до $2.",
index a22f94d..aac1615 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Kusavica",
                        "KuboF",
-                       "Sudo77(new)"
+                       "Sudo77(new)",
+                       "Hromoslav"
                ]
        },
        "config-desc": "Inštalátor pre MediaWiki",
@@ -50,6 +51,7 @@
        "config-missing-db-name": "Musíte zadať hodnotu pre \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Musíte zadať hodnotu pre \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "Musíte zadať hodnotu pre \"{{int:config-db-host-oracle}}\".",
+       "config-ns-generic": "Projekt",
        "config-admin-box": "Účet správcu",
        "config-admin-name": "Vaše používateľské meno:",
        "config-admin-password": "Heslo:",
@@ -64,6 +66,7 @@
        "config-optional-skip": "Už ma to nudí, proste nainštaluj wiki.",
        "config-profile-wiki": "Otvorená wiki",
        "config-profile-private": "Súkromná wiki",
+       "config-license-pd": "Voľné dielo",
        "config-email-settings": "Nastavenia e-mailu",
        "config-install-step-done": "hotovo",
        "config-install-step-failed": "zlyhalo",
index 8a46212..1d4867d 100644 (file)
@@ -1,8 +1,18 @@
 {
        "@metadata": {
                "authors": [
-                       "Andrewboltachev"
+                       "Andrewboltachev",
+                       "AlnashPiyash2"
                ]
        },
+       "config-title": "MediaWiki $1 пуктон",
+       "config-your-language": "Тӥляд кылды:",
+       "config-back": "← Берлань",
+       "config-continue": "Азьлань →",
+       "config-page-language": "Кыл",
+       "config-page-options": "Настройкаос",
+       "config-page-complete": "Быдэстэмын!",
+       "config-page-readme": "Лыдӟы монэ",
+       "config-page-copying": "Лицензия",
        "mainpagetext": "'''MediaWiki движок азинлыко пуктэмын.'''"
 }
index 345b475..73e1764 100644 (file)
@@ -68,7 +68,7 @@
        "config-magic-quotes-sybase": "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
        "config-mbstring": "'''Проблема: Опція PHP [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] увімкнена!'''\nЦя опція призводить до непередбачуваного пошкодження даних.\nВи не можете встановити і використовувати MediaWiki, поки не буде вимкнено цю опцію.",
        "config-safe-mode": "'''Увага:''' Опція PHP [http://www.php.net/features.safe-mode «безпечний режим»] увімкнена.\nЦе може спричинити проблеми, зокрема із завантаженням файлів та вставкою математичних формул.",
-       "config-xml-bad": "XML-модÑ\83Ñ\82Ñ\8c PHP Ð²Ñ\96дÑ\81Ñ\83Ñ\82нÑ\96й.\nMediaWiki Ð½ÐµÐ¾Ð±Ñ\85Ñ\96днÑ\96 Ð¹Ð¾Ð³Ð¾ Ñ\84Ñ\83нкÑ\86Ñ\96Ñ\97, Ð±ÐµÐ· Ñ\86Ñ\8cого Ð¼Ð¾Ð´Ñ\83лÑ\8f Ð²Ð¾Ð½Ð° Ð¿Ñ\80аÑ\86Ñ\8eваÑ\82и Ð½Ðµ Ð±Ñ\83де.\nЯкÑ\89о Ð\92и Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83Ñ\94Ñ\82е Mandrake, Ð²Ñ\81Ñ\82ановÑ\96Ñ\82Ñ\8c php-xml пакет.",
+       "config-xml-bad": "XML-модÑ\83Ñ\82Ñ\8c PHP Ð²Ñ\96дÑ\81Ñ\83Ñ\82нÑ\96й.\nMediaWiki Ð½ÐµÐ¾Ð±Ñ\85Ñ\96днÑ\96 Ð¹Ð¾Ð³Ð¾ Ñ\84Ñ\83нкÑ\86Ñ\96Ñ\97, Ð±ÐµÐ· Ñ\86Ñ\8cого Ð¼Ð¾Ð´Ñ\83лÑ\8f Ð²Ð¾Ð½Ð° Ð¿Ñ\80аÑ\86Ñ\8eваÑ\82и Ð½Ðµ Ð±Ñ\83де.\nÐ\92ам Ð¼Ð¾Ð¶Ðµ Ð·Ð½Ð°Ð´Ð¾Ð±Ð¸Ñ\82иÑ\81Ñ\8f Ð²Ñ\81Ñ\82ановиÑ\82и php-xml RPM пакет.",
        "config-pcre-old": "'''Фатальна помилка:''' потрібно PCRE версії $1 або пізнішої.\nВаш виконуваний файл PHP пов'язаний з PCRE версії $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Подробиці].",
        "config-pcre-no-utf8": "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.\nMediaWiki вимагає підтримку UTF-8 для коректної роботи.",
        "config-memory-raised": "Обмеження пам'яті PHP (<code>memory_limit</code>) $1, піднято до $2.",
index 300540f..92b2d3b 100644 (file)
@@ -9,6 +9,7 @@
        "config-desc": "דער אינסטאלירער פאר מעדיעוויקי",
        "config-title": "מעדיעוויקי $1 אינסטאלירונג",
        "config-information": "אינפֿארמאציע",
+       "config-localsettings-key": "אקטואליזירונג־שליסל:",
        "config-localsettings-badkey": "דעם שליסל וואס איר האט אײַנגעגעבן איז פאלש.",
        "config-session-error": "פֿעלער ביים אָנהייבן סעסיע: $1",
        "config-your-language": "אײַער שפראך:",
@@ -42,6 +43,8 @@
        "config-apc": "[http://www.php.net/apc APC] איז אינסטאלירט",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] איז אינסטאלירט",
        "config-diff3-bad": "GNU diff3 נישט געטראפן.",
+       "config-using-server": "באניצן סארווער־נאמען \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "באניצן סארווער־אדרעס \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "דאטנבאזע טיפ:",
        "config-db-host-oracle": "דאטנבאזע־TNS:",
        "config-db-wiki-settings": "אידענטיפיצירן די דאזיקע וויקי",
index b971bd5..3e23391 100644 (file)
@@ -144,6 +144,14 @@ abstract class Job implements IJobSpecification {
                        : null;
        }
 
+       /**
+        * @return int|null UNIX timestamp of when the job was runnable, or null
+        * @since 1.26
+        */
+       public function getReadyTimestamp() {
+               return $this->getReleaseTimestamp() ?: $this->getQueuedTimestamp();
+       }
+
        /**
         * Whether the queue should reject insertion of this job if a duplicate exists
         *
@@ -206,15 +214,27 @@ abstract class Job implements IJobSpecification {
        }
 
        /**
+        * Get "root job" parameters for a task
+        *
+        * This is used to no-op redundant jobs, including child jobs of jobs,
+        * as long as the children inherit the root job parameters. When a job
+        * with root job parameters and "rootJobIsSelf" set is pushed, the
+        * deduplicateRootJob() method is automatically called on it. If the
+        * root job is only virtual and not actually pushed (e.g. the sub-jobs
+        * are inserted directly), then call deduplicateRootJob() directly.
+        *
         * @see JobQueue::deduplicateRootJob()
+        *
         * @param string $key A key that identifies the task
         * @return array Map of:
+        *   - rootJobIsSelf    : true
         *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
         *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
         * @since 1.21
         */
        public static function newRootJobParams( $key ) {
                return array(
+                       'rootJobIsSelf'    => true,
                        'rootJobSignature' => sha1( $key ),
                        'rootJobTimestamp' => wfTimestampNow()
                );
@@ -246,6 +266,14 @@ abstract class Job implements IJobSpecification {
                        && isset( $this->params['rootJobTimestamp'] );
        }
 
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @return bool Whether this is job is a root job
+        */
+       public function isRootJob() {
+               return $this->hasRootJobParams() && !empty( $this->params['rootJobIsSelf'] );
+       }
+
        /**
         * Insert a single job into the queue.
         * @return bool True on success
index 1a68489..913aea0 100644 (file)
@@ -323,6 +323,12 @@ abstract class JobQueue {
 
                $this->doBatchPush( $jobs, $flags );
                $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
+
+               foreach ( $jobs as $job ) {
+                       if ( $job->isRootJob() ) {
+                               $this->deduplicateRootJob( $job );
+                       }
+               }
        }
 
        /**
@@ -359,7 +365,7 @@ abstract class JobQueue {
                // Flag this job as an old duplicate based on its "root" job...
                try {
                        if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
-                               JobQueue::incrStats( 'job-pop-duplicate', $this->type );
+                               JobQueue::incrStats( 'dupe_pops', $this->type );
                                $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
                        }
                } catch ( Exception $e ) {
@@ -631,7 +637,6 @@ abstract class JobQueue {
         * @since 1.22
         */
        final public function getSiblingQueuesWithJobs( array $types ) {
-
                return $this->doGetSiblingQueuesWithJobs( $types );
        }
 
@@ -655,7 +660,6 @@ abstract class JobQueue {
         * @since 1.22
         */
        final public function getSiblingQueueSizes( array $types ) {
-
                return $this->doGetSiblingQueueSizes( $types );
        }
 
@@ -677,8 +681,12 @@ abstract class JobQueue {
         * @since 1.22
         */
        public static function incrStats( $key, $type, $delta = 1 ) {
-               wfIncrStats( $key, $delta );
-               wfIncrStats( "{$key}-{$type}", $delta );
+               static $stats;
+               if ( !$stats ) {
+                       $stats = RequestContext::getMain()->getStats();
+               }
+               $stats->updateCount( "jobqueue.{$key}.all", $delta );
+               $stats->updateCount( "jobqueue.{$key}.{$type}", $delta );
        }
 
        /**
index 3dc36bd..d1e4a13 100644 (file)
@@ -245,10 +245,8 @@ class JobQueueDB extends JobQueue {
                        foreach ( array_chunk( $rows, 50 ) as $rowBatch ) {
                                $dbw->insert( 'job', $rowBatch, $method );
                        }
-                       JobQueue::incrStats( 'job-insert', $this->type, count( $rows ) );
-                       JobQueue::incrStats(
-                               'job-insert-duplicate',
-                               $this->type,
+                       JobQueue::incrStats( 'inserts', $this->type, count( $rows ) );
+                       JobQueue::incrStats( 'dupe_inserts', $this->type,
                                count( $rowSet ) + count( $rowList ) - count( $rows )
                        );
                } catch ( DBError $e ) {
@@ -293,7 +291,7 @@ class JobQueueDB extends JobQueue {
                                if ( !$row ) {
                                        break; // nothing to do
                                }
-                               JobQueue::incrStats( 'job-pop', $this->type );
+                               JobQueue::incrStats( 'pops', $this->type );
                                // Get the job object from the row...
                                $title = Title::makeTitle( $row->job_namespace, $row->job_title );
                                $job = Job::factory( $row->job_cmd, $title,
@@ -479,7 +477,7 @@ class JobQueueDB extends JobQueue {
                        $dbw->delete( 'job',
                                array( 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ), __METHOD__ );
 
-                       JobQueue::incrStats( 'job-ack', $this->type );
+                       JobQueue::incrStats( 'acks', $this->type );
                } catch ( DBError $e ) {
                        $this->throwDBException( $e );
                }
@@ -679,7 +677,7 @@ class JobQueueDB extends JobQueue {
                                        );
                                        $affected = $dbw->affectedRows();
                                        $count += $affected;
-                                       JobQueue::incrStats( 'job-recycle', $this->type, $affected );
+                                       JobQueue::incrStats( 'recycles', $this->type, $affected );
                                        $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
                                }
                        }
@@ -706,7 +704,7 @@ class JobQueueDB extends JobQueue {
                                $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ );
                                $affected = $dbw->affectedRows();
                                $count += $affected;
-                               JobQueue::incrStats( 'job-abandon', $this->type, $affected );
+                               JobQueue::incrStats( 'abandons', $this->type, $affected );
                        }
 
                        $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ );
index ecbb031..109ca01 100644 (file)
@@ -93,6 +93,8 @@ class JobQueueFederated extends JobQueue {
                ) {
                        unset( $baseConfig[$o] ); // partition queue doesn't care about this
                }
+               // The class handles all aggregator calls already
+               unset( $baseConfig['aggregator'] );
                // Get the partition queue objects
                foreach ( $partitionMap as $partition => $w ) {
                        if ( !isset( $params['configByPartition'][$partition] ) ) {
index 0f7ab19..e021d99 100644 (file)
@@ -223,8 +223,8 @@ class JobQueueRedis extends JobQueue {
 
                                throw new RedisException( "Could not insert {$failed} {$this->type} job(s)." );
                        }
-                       JobQueue::incrStats( 'job-insert', $this->type, count( $items ) );
-                       JobQueue::incrStats( 'job-insert-duplicate', $this->type,
+                       JobQueue::incrStats( 'inserts', $this->type, count( $items ) );
+                       JobQueue::incrStats( 'dupe_inserts', $this->type,
                                count( $items ) - $failed - $pushed );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $conn, $e );
index f4cff3c..3982134 100644 (file)
@@ -126,7 +126,7 @@ class JobRunner implements LoggerAwareInterface {
                }
 
                $group = JobQueueGroup::singleton();
-               
+
                // Flush any pending DB writes for sanity
                wfGetLBFactory()->commitAll();
 
@@ -136,7 +136,7 @@ class JobRunner implements LoggerAwareInterface {
                $wait = 'wait'; // block to read backoffs the first time
 
                $stats = RequestContext::getMain()->getStats();
-               $jobsRun = 0;
+               $jobsPopped = 0;
                $timeMsTotal = 0;
                $flags = JobQueueGroup::USE_CACHE;
                $startTime = microtime( true ); // time since jobs started running
@@ -157,6 +157,7 @@ class JobRunner implements LoggerAwareInterface {
                        }
 
                        if ( $job ) { // found a job
+                               $popTime = time();
                                $jType = $job->getType();
 
                                // Back off of certain jobs for a while (for throttling and for errors)
@@ -173,17 +174,12 @@ class JobRunner implements LoggerAwareInterface {
                                $msg = $job->toString() . " STARTING";
                                $this->logger->debug( $msg );
                                $this->debugCallback( $msg );
-                               $timeToRun = false;
 
                                // Run the job...
                                $psection = $profiler->scopedProfileIn( __METHOD__ . '-' . $jType );
                                $jobStartTime = microtime( true );
                                try {
-                                       ++$jobsRun;
-                                       $queuedTime = $job->getQueuedTimestamp();
-                                       if ( $queuedTime !== null ) {
-                                               $timeToRun = time() - $queuedTime;
-                                       }
+                                       ++$jobsPopped;
                                        $status = $job->run();
                                        $error = $job->getLastError();
                                        $this->commitMasterChanges( $job );
@@ -198,18 +194,17 @@ class JobRunner implements LoggerAwareInterface {
                                }
                                // Commit all outstanding connections that are in a transaction
                                // to get a fresh repeatable read snapshot on every connection.
-                               // This is important because if you have an old snapshot on the
-                               // database you could run the job incorrectly. Its possible, for
-                               // example, to pick up a RefreshLinksJob for a new page that isn't
-                               // even visible to the snapshot. The snapshot could have been
-                               // created before the page. Fresh snapshots will see the page.
                                wfGetLBFactory()->commitAll();
                                $timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
                                $timeMsTotal += $timeMs;
                                $profiler->scopedProfileOut( $psection );
-                               if ( $timeToRun !== false ) {
+
+                               $readyTs = $job->getReadyTimestamp();
+                               if ( $readyTs ) {
                                        // Record time to run for the job type
-                                       $stats->timing( "jobqueue.pickup_time.$jType", $timeToRun );
+                                       $pickupDelay = $popTime - $readyTs;
+                                       $stats->timing( 'jobqueue.pickup_delay.all', $pickupDelay );
+                                       $stats->timing( "jobqueue.pickup_delay.$jType", $pickupDelay );
                                }
 
                                // Mark the job as done on success or when the job cannot be retried
@@ -243,7 +238,7 @@ class JobRunner implements LoggerAwareInterface {
                                );
 
                                // Break out if we hit the job count or wall time limits...
-                               if ( $maxJobs && $jobsRun >= $maxJobs ) {
+                               if ( $maxJobs && $jobsPopped >= $maxJobs ) {
                                        $response['reached'] = 'job-limit';
                                        break;
                                } elseif ( $maxTime && ( microtime( true ) - $startTime ) > $maxTime ) {
@@ -263,7 +258,7 @@ class JobRunner implements LoggerAwareInterface {
                                        $lastCheckTime = microtime( true );
                                }
                                // Don't let any queue slaves/backups fall behind
-                               if ( $jobsRun > 0 && ( $jobsRun % 100 ) == 0 ) {
+                               if ( $jobsPopped > 0 && ( $jobsPopped % 100 ) == 0 ) {
                                        $group->waitForBackups();
                                }
 
index ecace3a..d59c09b 100644 (file)
@@ -72,6 +72,12 @@ interface IJobSpecification {
         */
        public function hasRootJobParams();
 
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @return bool Whether this is job is a root job
+        */
+       public function isRootJob();
+
        /**
         * @return Title Descriptive title (this can simply be informative)
         */
@@ -195,6 +201,10 @@ class JobSpecification implements IJobSpecification {
                        && isset( $this->params['rootJobTimestamp'] );
        }
 
+       public function isRootJob() {
+               return $this->hasRootJobParams() && !empty( $this->params['rootJobIsSelf'] );
+       }
+
        /**
         * @return array Field/value map that can immediately be serialized
         * @since 1.25
index febc277..aa02d1f 100644 (file)
@@ -169,4 +169,4 @@ class JobQueueAggregatorNull extends JobQueueAggregator {
        protected function doPurge() {
                return true;
        }
-}
\ No newline at end of file
+}
old mode 100755 (executable)
new mode 100644 (file)
index f706455..dec944a 100644 (file)
@@ -180,12 +180,12 @@ class RefreshLinksJob extends Job {
                        // Revision ID must be passed to the parser output to get revision variables correct
                        $parserOutput = $content->getParserOutput(
                                $title, $revision->getId(), $parserOptions, false );
-                       $ellapsed = microtime( true ) - $start;
+                       $elapsed = microtime( true ) - $start;
                        // If it took a long time to render, then save this back to the cache to avoid
                        // wasted CPU by other apaches or job runners. We don't want to always save to
                        // cache as this can cause high cache I/O and LRU churn when a template changes.
-                       if ( $ellapsed >= self::PARSE_THRESHOLD_SEC
-                               && $page->isParserCacheUsed( $parserOptions, $revision->getId() )
+                       if ( $elapsed >= self::PARSE_THRESHOLD_SEC
+                               && $page->shouldCheckParserCache( $parserOptions, $revision->getId() )
                                && $parserOutput->isCacheable()
                        ) {
                                $ctime = wfTimestamp( TS_MW, (int)$start ); // cache time
index 095811f..f85ee92 100644 (file)
@@ -380,7 +380,7 @@ class FormatJson {
                $inComment = false;
                $multiline = false;
 
-               for ($idx = 0; $idx < $maxLen; $idx++) {
+               for ( $idx = 0; $idx < $maxLen; $idx++ ) {
                        switch ( $str[$idx] ) {
                                case '"':
                                        $lookBehind = ( $idx - 1 >= 0 ) ? $str[$idx - 1] : '';
index 457237a..0caf90b 100644 (file)
@@ -23,7 +23,6 @@
 use Liuggio\StatsdClient\Entity\StatsdDataInterface;
 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 
-
 /**
  * A factory for application metric data.
  *
index 16e0d4f..f5d5229 100644 (file)
@@ -84,12 +84,12 @@ class MultiHttpClient {
         * Execute an HTTP(S) request
         *
         * This method returns a response map of:
-        *   - code    : HTTP response code or 0 if there was a serious cURL error
-        *   - reason  : HTTP response reason (empty if there was a serious cURL error)
-        *   - headers : <header name/value associative array>
-        *   - body    : HTTP response body or resource (if "stream" was set)
+        *   - code    : HTTP response code or 0 if there was a serious cURL error
+        *   - reason  : HTTP response reason (empty if there was a serious cURL error)
+        *   - headers : <header name/value associative array>
+        *   - body    : HTTP response body or resource (if "stream" was set)
         *   - error     : Any cURL error string
-        * The map also stores integer-indexed copies of these values. This lets callers do:
+        * The map also stores integer-indexed copies of these values. This lets callers do:
         * @code
         *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $http->run( $req );
         * @endcode
index 7fdb309..185914c 100644 (file)
@@ -76,7 +76,7 @@ class ReplacementArray {
         * @param array $data
         */
        public function mergeArray( $data ) {
-               $this->data = array_merge( $this->data, $data );
+               $this->data = $data + $this->data;
                $this->fss = false;
        }
 
@@ -84,7 +84,7 @@ class ReplacementArray {
         * @param ReplacementArray $other
         */
        public function merge( ReplacementArray $other ) {
-               $this->data = array_merge( $this->data, $other->data );
+               $this->data = $other->data + $this->data;
                $this->fss = false;
        }
 
diff --git a/includes/libs/RiffExtractor.php b/includes/libs/RiffExtractor.php
new file mode 100644 (file)
index 0000000..f987c59
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Extractor for the Resource Interchange File Format
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Bryan Tong Minh
+ * @ingroup Media
+ */
+
+class RiffExtractor {
+       public static function findChunksFromFile( $filename, $maxChunks = -1 ) {
+               $file = fopen( $filename, 'rb' );
+               $info = self::findChunks( $file, $maxChunks );
+               fclose( $file );
+               return $info;
+       }
+
+       public static function findChunks( $file, $maxChunks = -1 ) {
+               $riff = fread( $file, 4 );
+               if ( $riff !== 'RIFF' ) {
+                       return false;
+               }
+
+               // Next four bytes are fileSize
+               $fileSize = fread( $file, 4 );
+               if ( !$fileSize || strlen( $fileSize ) != 4 ) {
+                       return false;
+               }
+
+               // Next four bytes are the FourCC
+               $fourCC = fread( $file, 4 );
+               if ( !$fourCC || strlen( $fourCC ) != 4 ) {
+                       return false;
+               }
+
+               // Create basic info structure
+               $info = array(
+                       'fileSize' => self::extractUInt32( $fileSize ),
+                       'fourCC' => $fourCC,
+                       'chunks' => array(),
+               );
+               $numberOfChunks = 0;
+
+               // Find out the chunks
+               while ( !feof( $file ) && !( $numberOfChunks >= $maxChunks && $maxChunks >= 0 ) ) {
+                       $chunkStart = ftell( $file );
+
+                       $chunkFourCC = fread( $file, 4 );
+                       if ( !$chunkFourCC || strlen( $chunkFourCC ) != 4 ) {
+                               return $info;
+                       }
+
+                       $chunkSize = fread( $file, 4 );
+                       if ( !$chunkSize || strlen( $chunkSize ) != 4 ) {
+                               return $info;
+                       }
+                       $intChunkSize = self::extractUInt32( $chunkSize );
+
+                       // Add chunk info to the info structure
+                       $info['chunks'][] = array(
+                               'fourCC' => $chunkFourCC,
+                               'start' => $chunkStart,
+                               'size' => $intChunkSize
+                       );
+
+                       // Uneven chunks have padding bytes
+                       $padding = $intChunkSize % 2;
+                       // Seek to the next chunk
+                       fseek( $file, $intChunkSize + $padding, SEEK_CUR );
+
+               }
+
+               return $info;
+       }
+
+       /**
+        * Extract a little-endian uint32 from a 4 byte string
+        * @param string $string 4-byte string
+        * @return int
+        */
+       public static function extractUInt32( $string ) {
+               $unpacked = unpack( 'V', $string );
+               return $unpacked[1];
+       }
+};
index 9c7bf2f..22c3319 100644 (file)
@@ -30,6 +30,9 @@ class ComposerLock {
                        $deps[$installed['name']] = array(
                                'version' => ComposerJson::normalizeVersion( $installed['version'] ),
                                'type' => $installed['type'],
+                               'licenses' => isset( $installed['license'] ) ? $installed['license'] : array(),
+                               'authors' => isset( $installed['authors'] ) ? $installed['authors'] : array(),
+                               'description' => isset( $installed['description'] ) ? $installed['description']: '',
                        );
                }
 
old mode 100755 (executable)
new mode 100644 (file)
index a3d214f..f95ba3f
@@ -26,7 +26,8 @@ abstract class EventRelayer {
        /**
         * @param array $params
         */
-       public function __construct( array $params ) {}
+       public function __construct( array $params ) {
+       }
 
        /**
         * @param string $channel
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/includes/libs/normal/.gitignore b/includes/libs/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
diff --git a/includes/libs/normal/UtfNormal.php b/includes/libs/normal/UtfNormal.php
deleted file mode 100644 (file)
index c9c05a0..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
- * Unicode normalization routines
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-/**
- * @defgroup UtfNormal UtfNormal
- */
-
-use UtfNormal\Validator;
-
-/**
- * Unicode normalization routines for working with UTF-8 strings.
- * Currently assumes that input strings are valid UTF-8!
- *
- * Not as fast as I'd like, but should be usable for most purposes.
- * UtfNormal::toNFC() will bail early if given ASCII text or text
- * it can quickly determine is already normalized.
- *
- * All functions can be called static.
- *
- * See description of forms at http://www.unicode.org/reports/tr15/
- *
- * @deprecated since 1.25, use UtfNormal\Validator directly
- * @ingroup UtfNormal
- */
-class UtfNormal {
-       /**
-        * The ultimate convenience function! Clean up invalid UTF-8 sequences,
-        * and convert to normal form C, canonical composition.
-        *
-        * Fast return for pure ASCII strings; some lesser optimizations for
-        * strings containing only known-good characters. Not as fast as toNFC().
-        *
-        * @param string $string a UTF-8 string
-        * @return string a clean, shiny, normalized UTF-8 string
-        */
-       static function cleanUp( $string ) {
-               return Validator::cleanUp( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form C, canonical composition.
-        * Fast return for pure ASCII strings; some lesser optimizations for
-        * strings containing only known-good characters.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form C
-        */
-       static function toNFC( $string ) {
-               return Validator::toNFC( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form D, canonical decomposition.
-        * Fast return for pure ASCII strings.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form D
-        */
-       static function toNFD( $string ) {
-               return Validator::toNFD( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form KC, compatibility composition.
-        * This may cause irreversible information loss, use judiciously.
-        * Fast return for pure ASCII strings.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form KC
-        */
-       static function toNFKC( $string ) {
-               return Validator::toNFKC( $string );
-       }
-
-       /**
-        * Convert a UTF-8 string to normal form KD, compatibility decomposition.
-        * This may cause irreversible information loss, use judiciously.
-        * Fast return for pure ASCII strings.
-        *
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return string a UTF-8 string in normal form KD
-        */
-       static function toNFKD( $string ) {
-               return Validator::toNFKD( $string );
-       }
-
-       /**
-        * Returns true if the string is _definitely_ in NFC.
-        * Returns false if not or uncertain.
-        * @param string $string a valid UTF-8 string. Input is not validated.
-        * @return bool
-        */
-       static function quickIsNFC( $string ) {
-               return Validator::quickIsNFC( $string );
-       }
-
-       /**
-        * Returns true if the string is _definitely_ in NFC.
-        * Returns false if not or uncertain.
-        * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
-        * @return bool
-        */
-       static function quickIsNFCVerify( &$string ) {
-               return Validator::quickIsNFCVerify( $string );
-       }
-}
diff --git a/includes/libs/normal/UtfNormalDefines.php b/includes/libs/normal/UtfNormalDefines.php
deleted file mode 100644 (file)
index b8e44c7..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-/**
- * Backwards-compatability constants which are now provided by the
- * UtfNormal library. They are hardcoded here since they are needed
- * before the composer autoloader is initialized.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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 UtfNormal
- */
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_FIRST', 0xac00 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_LAST', 0xd7a3 );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_LBASE', 0x1100 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_VBASE', 0x1161 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_TBASE', 0x11a7 );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_LCOUNT', 19 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_VCOUNT', 21 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_TCOUNT', 28 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_NCOUNT', UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_LEND', UNICODE_HANGUL_LBASE + UNICODE_HANGUL_LCOUNT - 1 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_VEND', UNICODE_HANGUL_VBASE + UNICODE_HANGUL_VCOUNT - 1 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_HANGUL_TEND', UNICODE_HANGUL_TBASE + UNICODE_HANGUL_TCOUNT - 1 );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_SURROGATE_FIRST', 0xd800 );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_SURROGATE_LAST', 0xdfff );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_MAX', 0x10ffff );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UNICODE_REPLACEMENT', 0xfffd );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_FIRST', "\xea\xb0\x80" /*codepointToUtf8( UNICODE_HANGUL_FIRST )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_LAST', "\xed\x9e\xa3" /*codepointToUtf8( UNICODE_HANGUL_LAST )*/ );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_LBASE', "\xe1\x84\x80" /*codepointToUtf8( UNICODE_HANGUL_LBASE )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_VBASE', "\xe1\x85\xa1" /*codepointToUtf8( UNICODE_HANGUL_VBASE )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_TBASE', "\xe1\x86\xa7" /*codepointToUtf8( UNICODE_HANGUL_TBASE )*/ );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_LEND', "\xe1\x84\x92" /*codepointToUtf8( UNICODE_HANGUL_LEND )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_VEND', "\xe1\x85\xb5" /*codepointToUtf8( UNICODE_HANGUL_VEND )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HANGUL_TEND', "\xe1\x87\x82" /*codepointToUtf8( UNICODE_HANGUL_TEND )*/ );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_SURROGATE_FIRST', "\xed\xa0\x80" /*codepointToUtf8( UNICODE_SURROGATE_FIRST )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_SURROGATE_LAST', "\xed\xbf\xbf" /*codepointToUtf8( UNICODE_SURROGATE_LAST )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_MAX', "\xf4\x8f\xbf\xbf" /*codepointToUtf8( UNICODE_MAX )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_REPLACEMENT', "\xef\xbf\xbd" /*codepointToUtf8( UNICODE_REPLACEMENT )*/ );
-#define( 'UTF8_REPLACEMENT', '!' );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_OVERLONG_A', "\xc1\xbf" );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_OVERLONG_B', "\xe0\x9f\xbf" );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_OVERLONG_C', "\xf0\x8f\xbf\xbf" );
-
-# These two ranges are illegal
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_FDD0', "\xef\xb7\x90" /*codepointToUtf8( 0xfdd0 )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_FDEF', "\xef\xb7\xaf" /*codepointToUtf8( 0xfdef )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_FFFE', "\xef\xbf\xbe" /*codepointToUtf8( 0xfffe )*/ );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_FFFF', "\xef\xbf\xbf" /*codepointToUtf8( 0xffff )*/ );
-
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_HEAD', false );
-/**
- * @deprecated since 1.25, use UtfNormal\Constants instead
- */
-define( 'UTF8_TAIL', true );
diff --git a/includes/libs/normal/UtfNormalUtil.php b/includes/libs/normal/UtfNormalUtil.php
deleted file mode 100644 (file)
index ad9a2b9..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-/**
- * Some of these functions are adapted from places in MediaWiki.
- * Should probably merge them for consistency.
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-
-use UtfNormal\Utils;
-/**
- * Return UTF-8 sequence for a given Unicode code point.
- *
- * @param $codepoint Integer:
- * @return String
- * @throws InvalidArgumentException if fed out of range data.
- * @public
- * @deprecated since 1.25, use UtfNormal\Utils directly
- */
-function codepointToUtf8( $codepoint ) {
-       return Utils::codepointToUtf8( $codepoint );
-}
-
-/**
- * Take a series of space-separated hexadecimal numbers representing
- * Unicode code points and return a UTF-8 string composed of those
- * characters. Used by UTF-8 data generation and testing routines.
- *
- * @param $sequence String
- * @return String
- * @throws InvalidArgumentException if fed out of range data.
- * @private
- * @deprecated since 1.25, use UtfNormal\Utils directly
- */
-function hexSequenceToUtf8( $sequence ) {
-       return Utils::hexSequenceToUtf8( $sequence );
-}
-
-/**
- * Take a UTF-8 string and return a space-separated series of hex
- * numbers representing Unicode code points. For debugging.
- *
- * @fixme this is private but extensions + maint scripts are using it
- * @param string $str UTF-8 string.
- * @return string
- * @private
- */
-function utf8ToHexSequence( $str ) {
-       $buf = '';
-       foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
-               $buf .= sprintf( '%04x ', UtfNormal\Utils::utf8ToCodepoint( $cp ) );
-       }
-
-       return rtrim( $buf );
-}
-
-/**
- * Determine the Unicode codepoint of a single-character UTF-8 sequence.
- * Does not check for invalid input data.
- *
- * @param $char String
- * @return Integer
- * @public
- * @deprecated since 1.25, use UtfNormal\Utils directly
- */
-function utf8ToCodepoint( $char ) {
-       return Utils::utf8ToCodepoint( $char );
-}
-
-/**
- * Escape a string for inclusion in a PHP single-quoted string literal.
- *
- * @param string $string string to be escaped.
- * @return String: escaped string.
- * @public
- * @deprecated since 1.25, use UtfNormal\Utils directly
- */
-function escapeSingleString( $string ) {
-       return Utils::escapeSingleString( $string );
-}
index a263a3d..1b24616 100644 (file)
@@ -53,7 +53,8 @@ class ReplicatedBagOStuff extends BagOStuff {
                if ( !isset( $params['writeFactory'] ) ) {
                        throw new InvalidArgumentException(
                                __METHOD__ . ': the "writeFactory" parameter is required' );
-               } elseif ( !isset( $params['readFactory'] ) ) {
+               }
+               if ( !isset( $params['readFactory'] ) ) {
                        throw new InvalidArgumentException(
                                __METHOD__ . ': the "readFactory" parameter is required' );
                }
@@ -75,7 +76,7 @@ class ReplicatedBagOStuff extends BagOStuff {
                return $this->readStore->get( $key, $casToken );
        }
 
-       public function getMulti( $keys ) {
+       public function getMulti( array $keys ) {
                return $this->readStore->getMulti( $keys );
        }
 
@@ -95,8 +96,8 @@ class ReplicatedBagOStuff extends BagOStuff {
                return $this->writeStore->incr( $key, $value );
        }
 
-       public function decr( $key ) {
-               return $this->writeStore->decr( $key );
+       public function decr( $key, $value = 1 ) {
+               return $this->writeStore->decr( $key, $value );
        }
 
        public function lock( $key, $timeout = 6, $expiry = 6 ) {
old mode 100755 (executable)
new mode 100644 (file)
index 5d9557a..c32efb9
@@ -279,13 +279,32 @@ class WANObjectCache {
        /**
         * Fetch the value of a timestamp "check" key
         *
+        * The key will be *initialized* to the current time if not set,
+        * so only call this method if this behavior is actually desired
+        *
+        * The timestamp can be used to check whether a cached value is valid.
+        * Callers should not assume that this returns the same timestamp in
+        * all datacenters due to relay delays.
+        *
+        * The level of staleness can roughly be estimated from this key, but
+        * if the key was evicted from cache, such calculations may show the
+        * time since expiry as ~0 seconds.
+        *
         * Note that "check" keys won't collide with other regular keys
         *
         * @param string $key
-        * @return float|bool TS_UNIX timestamp of the key; false if not present
+        * @return float UNIX timestamp of the key
         */
        final public function getCheckKeyTime( $key ) {
-               return self::parsePurgeValue( $this->cache->get( self::TIME_KEY_PREFIX . $key ) );
+               $key = self::TIME_KEY_PREFIX . $key;
+
+               $time = self::parsePurgeValue( $this->cache->get( $key ) );
+               if ( $time === false ) {
+                       $time = microtime( true );
+                       $this->cache->add( $key, self::PURGE_VAL_PREFIX . $time, self::CHECK_KEY_TTL );
+               }
+
+               return $time;
        }
 
        /**
index 05c2afc..2a0b3f0 100644 (file)
@@ -84,8 +84,8 @@ abstract class VirtualRESTService {
         *
         * This method may mangle any of the $reqs entry 'response' fields as needed:
         *   - code    : perform any code normalization [as needed]
-        *   - reason  : perform any reason normalization [as needed]
-        *   - headers : perform any header normalization [as needed]
+        *   - reason  : perform any reason normalization [as needed]
+        *   - headers : perform any header normalization [as needed]
         *
         * This method can also remove some of the requests as well as add new ones
         * (using $idGenerator to set each of the entries' array keys). For any existing
diff --git a/includes/logging/ContentModelLogFormatter.php b/includes/logging/ContentModelLogFormatter.php
new file mode 100644 (file)
index 0000000..982fcc3
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+class ContentModelLogFormatter extends LogFormatter {
+       protected function getMessageParameters() {
+               $lang = $this->context->getLanguage();
+               $params = parent::getMessageParameters();
+               $params[3] = ContentHandler::getLocalizedName( $params[3], $lang );
+               $params[4] = ContentHandler::getLocalizedName( $params[4], $lang );
+               return $params;
+       }
+
+       public function getActionLinks() {
+               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+                       || $this->entry->getSubtype() !== 'change'
+                       || !$this->context->getUser()->isAllowed( 'editcontentmodel' )
+               ) {
+                       return '';
+               }
+
+               $params = $this->extractParameters();
+               $revert = Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'ChangeContentModel' ),
+                       $this->msg( 'logentry-contentmodel-change-revertlink' )->escaped(),
+                       array(),
+                       array(
+                               'pagetitle' => $this->entry->getTarget()->getPrefixedText(),
+                               'model' => $params[3],
+                               'reason' => $this->msg( 'logentry-contentmodel-change-revert' )->inContentLanguage()->text(),
+                       )
+               );
+
+               return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+       }
+}
index b391be3..8427adb 100644 (file)
@@ -246,9 +246,9 @@ class DatabaseLogEntry extends LogEntryBase {
        public function getParameters() {
                if ( !isset( $this->params ) ) {
                        $blob = $this->getRawParameters();
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $params = LogEntryBase::extractParams( $blob );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $params !== false ) {
                                $this->params = $params;
                                $this->legacy = false;
index dfe3136..1b56584 100644 (file)
@@ -35,6 +35,11 @@ class LogEventsList extends ContextSource {
         */
        protected $mDefaultQuery;
 
+       /**
+        * @var bool
+        */
+       protected $showTagEditUI;
+
        /**
         * Constructor.
         * The first two parameters used to be $skin and $out, but now only a context
@@ -55,6 +60,7 @@ class LogEventsList extends ContextSource {
                }
 
                $this->flags = $flags;
+               $this->showTagEditUI = ChangeTags::showTagEditingUI( $this->getUser() );
        }
 
        /**
@@ -348,7 +354,7 @@ class LogEventsList extends ContextSource {
                $user = $this->getUser();
 
                // If change tag editing is available to this user, return the checkbox
-               if ( $this->flags & self::USE_CHECKBOXES && ChangeTags::showTagEditingUI( $user ) ) {
+               if ( $this->flags & self::USE_CHECKBOXES && $this->showTagEditUI ) {
                        return Xml::check(
                                'showhiderevisions',
                                false,
index 119492b..0145b02 100644 (file)
@@ -790,7 +790,7 @@ class LogFormatter {
                                break;
 
                        case 'number':
-                               if ( ctype_digit( $value ) ) {
+                               if ( ctype_digit( $value ) || is_int( $value ) ) {
                                        $value = (int)$value;
                                } else {
                                        $value = (float)$value;
index c4ce7b3..598a45f 100644 (file)
@@ -248,7 +248,7 @@ class LogPager extends ReverseChronologicalPager {
                $user = $this->getUser();
                if ( !$user->isAllowed( 'deletedhistory' ) ) {
                        $this->mConds[] = $db->bitAnd( 'log_deleted', LogPage::DELETED_ACTION ) . ' = 0';
-               } elseif ( !$user->isAllowed( 'suppressrevision' ) ) {
+               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
                        $this->mConds[] = $db->bitAnd( 'log_deleted', LogPage::SUPPRESSED_ACTION ) .
                                ' != ' . LogPage::SUPPRESSED_ACTION;
                }
index 0033743..7fe0143 100644 (file)
@@ -68,9 +68,11 @@ class PatrolLogFormatter extends LogFormatter {
                $params = $entry->getParameters();
 
                static $map = array(
-                       '4::curid',
-                       '5::previd',
+                       '4:number:curid',
+                       '5:number:previd',
                        '6:bool:auto',
+                       '4::curid' => '4:number:curid',
+                       '5::previd' => '5:number:previd',
                        '6::auto' => '6:bool:auto',
                );
                foreach ( $map as $index => $key ) {
index c359659..1027732 100644 (file)
@@ -135,7 +135,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;
index 8264673..546cc8c 100644 (file)
@@ -271,13 +271,13 @@ class UserMailer {
                        }
                        require_once 'Mail.php';
 
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
 
                        // Create the mail object using the Mail::factory method
                        $mail_object =& Mail::factory( 'smtp', $wgSMTP );
                        if ( PEAR::isError( $mail_object ) ) {
                                wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                                return Status::newFatal( 'pear-mail-error', $mail_object->getMessage() );
                        }
 
@@ -297,11 +297,11 @@ class UserMailer {
                                $status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
                                # FIXME : some chunks might be sent while others are not!
                                if ( !$status->isOK() ) {
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
                                        return $status;
                                }
                        }
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        return Status::newGood();
                } else {
                        #
index eadcf94..4be20b2 100644 (file)
@@ -70,7 +70,8 @@ class BitmapHandler extends TransformationalImageHandler {
        protected function transformImageMagick( $image, $params ) {
                # use ImageMagick
                global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
-                       $wgImageMagickTempDir, $wgImageMagickConvertCommand;
+                       $wgImageMagickTempDir, $wgImageMagickConvertCommand, $wgResourceBasePath,
+                       $wgUseTinyRGBForJPGThumbnails;
 
                $quality = array();
                $sharpen = array();
@@ -92,9 +93,8 @@ class BitmapHandler extends TransformationalImageHandler {
                                // JPEG decoder hint to reduce memory, available since IM 6.5.6-2
                                $decoderHint = array( '-define', "jpeg:size={$params['physicalDimensions']}" );
                        }
-               } elseif ( $params['mimeType'] == 'image/png' ) {
+               } elseif ( $params['mimeType'] == 'image/png' || $params['mimeType'] == 'image/webp' ) {
                        $quality = array( '-quality', '95' ); // zlib 9, adaptive filtering
-
                } elseif ( $params['mimeType'] == 'image/gif' ) {
                        if ( $this->getImageArea( $image ) > $wgMaxAnimatedGifArea ) {
                                // Extract initial frame only; we're so big it'll
@@ -121,9 +121,9 @@ class BitmapHandler extends TransformationalImageHandler {
                                '-layers', 'merge',
                                '-background', 'white',
                        );
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $xcfMeta = unserialize( $image->getMetadata() );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $xcfMeta
                                && isset( $xcfMeta['colorType'] )
                                && $xcfMeta['colorType'] === 'greyscale-alpha'
index 749ef23..b422bfa 100644 (file)
@@ -265,9 +265,9 @@ class DjVuHandler extends ImageHandler {
                        return $metadata;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $unser = unserialize( $metadata );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( is_array( $unser ) ) {
                        if ( isset( $unser['error'] ) ) {
                                return false;
@@ -304,7 +304,7 @@ class DjVuHandler extends ImageHandler {
                        return false;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                try {
                        // Set to false rather than null to avoid further attempts
                        $image->dejaMetaTree = false;
@@ -327,7 +327,7 @@ class DjVuHandler extends ImageHandler {
                } catch ( Exception $e ) {
                        wfDebug( "Bogus multipage XML metadata on '{$image->getName()}'\n" );
                }
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $gettext ) {
                        return $image->djvuTextTree;
                } else {
index e8faa70..dbbe991 100644 (file)
@@ -123,9 +123,9 @@ class DjVuImage {
        }
 
        function getInfo() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $file = fopen( $this->mFilename, 'rb' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( $file === false ) {
                        wfDebug( __METHOD__ . ": missing or failed file read\n" );
 
index 3386868..b4cc43e 100644 (file)
@@ -294,9 +294,9 @@ class Exif {
 
                $this->debugFile( $this->basename, __FUNCTION__, true );
                if ( function_exists( 'exif_read_data' ) ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $data = exif_read_data( $this->file, 0, true );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                } else {
                        throw new MWException( "Internal error: exif_read_data not present. " .
                                "\$wgShowEXIF may be incorrectly set or not checked by an extension." );
@@ -471,17 +471,17 @@ class Exif {
                                        break;
                        }
                        if ( $charset ) {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $val = iconv( $charset, 'UTF-8//IGNORE', $val );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                        } else {
                                // if valid utf-8, assume that, otherwise assume windows-1252
                                $valCopy = $val;
                                UtfNormal\Validator::quickIsNFCVerify( $valCopy ); //validates $valCopy.
                                if ( $valCopy !== $val ) {
-                                       wfSuppressWarnings();
+                                       MediaWiki\suppressWarnings();
                                        $val = iconv( 'Windows-1252', 'UTF-8//IGNORE', $val );
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
                                }
                        }
 
index f56a947..5ba5c68 100644 (file)
@@ -30,6 +30,7 @@
 class ExifBitmapHandler extends BitmapHandler {
        const BROKEN_FILE = '-1'; // error extracting metadata
        const OLD_BROKEN_FILE = '0'; // outdated error extracting metadata.
+       const SRGB_ICC_PROFILE_NAME = 'IEC 61966-2.1 Default RGB colour space - sRGB';
 
        function convertMetadataVersion( $metadata, $version = 1 ) {
                // basically flattens arrays.
@@ -100,9 +101,9 @@ class ExifBitmapHandler extends BitmapHandler {
                if ( $metadata === self::BROKEN_FILE ) {
                        return self::METADATA_GOOD;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $exif = unserialize( $metadata );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !isset( $exif['MEDIAWIKI_EXIF_VERSION'] )
                        || $exif['MEDIAWIKI_EXIF_VERSION'] != Exif::version()
                ) {
@@ -224,9 +225,9 @@ class ExifBitmapHandler extends BitmapHandler {
                if ( !$data ) {
                        return 0;
                }
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $data = unserialize( $data );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( isset( $data['Orientation'] ) ) {
                        # See http://sylvana.net/jpegcrop/exif_orientation.html
                        switch ( $data['Orientation'] ) {
@@ -243,4 +244,73 @@ class ExifBitmapHandler extends BitmapHandler {
 
                return 0;
        }
+
+       protected function transformImageMagick( $image, $params ) {
+               global $wgUseTinyRGBForJPGThumbnails;
+
+               $ret = parent::transformImageMagick( $image, $params );
+
+               if ( $ret ) {
+                       return $ret;
+               }
+
+               if ( $params['mimeType'] === 'image/jpeg' && $wgUseTinyRGBForJPGThumbnails ) {
+                       // T100976 If the profile embedded in the JPG is sRGB, swap it for the smaller
+                       // (and free) TinyRGB
+
+                       $this->swapICCProfile(
+                               $params['dstPath'],
+                               self::SRGB_ICC_PROFILE_NAME,
+                               realpath( __DIR__ ) . '/tinyrgb.icc'
+                       );
+               }
+
+               return false;
+       }
+
+       /**
+        * Swaps an embedded ICC profile for another, if found. Depends on exiftool, no-op if not installed.
+        * @param string $filepath File to be manipulated (will be overwritten)
+        * @param string $oldProfileString Exact name of color profile to look for (the one that will be replaced)
+        * @param string $profileFilepath ICC profile file to apply to the file
+        * @since 1.26
+        * @return bool
+        */
+       public function swapICCProfile( $filepath, $oldProfileString, $profileFilepath ) {
+               global $wgExiftool;
+
+               if ( !$wgExiftool || !is_executable( $wgExiftool ) ) {
+                       return false;
+               }
+
+               $cmd = wfEscapeShellArg( $wgExiftool,
+                       '-DeviceModelDesc',
+                       '-S',
+                       '-T',
+                       $filepath
+               );
+
+               $output = wfShellExecWithStderr( $cmd, $retval );
+
+               if ( $retval !== 0 || strcasecmp( trim( $output ), $oldProfileString ) !== 0 ) {
+                       // We can't establish that this file has the expected ICC profile, don't process it
+                       return false;
+               }
+
+               $cmd = wfEscapeShellArg( $wgExiftool,
+                       '-overwrite_original',
+                       '-icc_profile<=' . $profileFilepath,
+                       $filepath
+               );
+
+               $output = wfShellExecWithStderr( $cmd, $retval );
+
+               if ( $retval !== 0 ) {
+                       $this->logErrorForExternalProcess( $retval, $output, $cmd );
+
+                       return false;
+               }
+
+               return true;
+       }
 }
index 2ae5af3..0fee8cc 100644 (file)
@@ -706,7 +706,7 @@ class FormatMetadata extends ContextSource {
                                                break;
 
                                        case 'GPSDOP':
-                                               // See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+                                               // See https://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
                                                if ( $val <= 2 ) {
                                                        $val = $this->exifMsg( $tag, 'excellent', $this->formatNum( $val ) );
                                                } elseif ( $val <= 5 ) {
@@ -1283,7 +1283,7 @@ class FormatMetadata extends ContextSource {
         */
        private function gcd( $a, $b ) {
                /*
-                       // http://en.wikipedia.org/wiki/Euclidean_algorithm
+                       // https://en.wikipedia.org/wiki/Euclidean_algorithm
                        // Recursive form would be:
                        if( $b == 0 )
                                return $a;
@@ -1575,7 +1575,6 @@ class FormatMetadata extends ContextSource {
 
                // If revision deleted, exit immediately
                if ( $file->isDeleted( File::DELETED_FILE ) ) {
-
                        return array();
                }
 
@@ -1733,8 +1732,9 @@ class FormatMetadata extends ContextSource {
        }
 
        /**
-        * Turns an XMP-style multivalue array into a single value by dropping all but the first value.
-        * If the value is not a multivalue array (or a multivalue array inside a multilang array), it is returned unchanged.
+        * Turns an XMP-style multivalue array into a single value by dropping all but the first
+        * value. If the value is not a multivalue array (or a multivalue array inside a multilang
+        * array), it is returned unchanged.
         * See mediawiki.org/wiki/Manual:File_metadata_handling#Multi-language_array_format
         * @param mixed $value
         * @return mixed The value, or the first value if there were multiple ones
@@ -1743,7 +1743,8 @@ class FormatMetadata extends ContextSource {
        protected function resolveMultivalueValue( $value ) {
                if ( !is_array( $value ) ) {
                        return $value;
-               } elseif ( isset( $value['_type'] ) && $value['_type'] === 'lang' ) { // if this is a multilang array, process fields separately
+               } elseif ( isset( $value['_type'] ) && $value['_type'] === 'lang' ) {
+                       // if this is a multilang array, process fields separately
                        $newValue = array();
                        foreach ( $value as $k => $v ) {
                                $newValue[$k] = $this->resolveMultivalueValue( $v );
index e3621fb..94aca61 100644 (file)
@@ -131,9 +131,9 @@ class GIFHandler extends BitmapHandler {
                        return self::METADATA_GOOD;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $data = unserialize( $metadata );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$data || !is_array( $data ) ) {
                        wfDebug( __METHOD__ . " invalid GIF metadata\n" );
@@ -161,9 +161,9 @@ class GIFHandler extends BitmapHandler {
 
                $original = parent::getLongDesc( $image );
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $metadata = unserialize( $image->getMetadata() );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$metadata || $metadata['frameCount'] <= 1 ) {
                        return $original;
index 5c37046..6ee23cd 100644 (file)
@@ -161,9 +161,9 @@ class GIFMetadataExtractor {
                                        UtfNormal\Validator::quickIsNFCVerify( $dataCopy );
 
                                        if ( $dataCopy !== $data ) {
-                                               wfSuppressWarnings();
+                                               MediaWiki\suppressWarnings();
                                                $data = iconv( 'windows-1252', 'UTF-8', $data );
-                                               wfRestoreWarnings();
+                                               MediaWiki\restoreWarnings();
                                        }
 
                                        $commentCount = count( $comment );
index 0eb27cc..c3d58b8 100644 (file)
@@ -445,9 +445,9 @@ class IPTC {
         */
        private static function convIPTCHelper( $data, $charset ) {
                if ( $charset ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $data = iconv( $charset, "UTF-8//IGNORE", $data );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $data === false ) {
                                $data = "";
                                wfDebugLog( 'iptc', __METHOD__ . " Error converting iptc data charset $charset to utf-8" );
index 968e424..db74bb3 100644 (file)
@@ -201,9 +201,9 @@ abstract class ImageHandler extends MediaHandler {
        }
 
        function getImageSize( $image, $path ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $gis = getimagesize( $path );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                return $gis;
        }
index 5463922..040ff96 100644 (file)
@@ -137,7 +137,7 @@ class JpegHandler extends ExifBitmapHandler {
 
                $rotation = ( $params['rotation'] + $this->getRotation( $file ) ) % 360;
 
-               if ( $wgJpegTran && is_file( $wgJpegTran ) ) {
+               if ( $wgJpegTran && is_executable( $wgJpegTran ) ) {
                        $cmd = wfEscapeShellArg( $wgJpegTran ) .
                                " -rotate " . wfEscapeShellArg( $rotation ) .
                                " -outfile " . wfEscapeShellArg( $params['dstPath'] ) .
index ae4af8d..5069f18 100644 (file)
@@ -102,9 +102,9 @@ class JpegMetadataExtractor {
                                // turns $com to valid utf-8.
                                // thus if no change, its utf-8, otherwise its something else.
                                if ( $com !== $oldCom ) {
-                                       wfSuppressWarnings();
+                                       MediaWiki\suppressWarnings();
                                        $com = $oldCom = iconv( 'windows-1252', 'UTF-8//IGNORE', $oldCom );
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
                                }
                                // Try it again, if its still not a valid string, then probably
                                // binary junk or some really weird encoding, so don't extract.
index 33aed34..3a59996 100644 (file)
@@ -181,9 +181,9 @@ abstract class MediaHandler {
                if ( !is_array( $metadata ) ) {
 
                        //unserialize to keep return parameter consistent.
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $ret = unserialize( $metadata );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        return $ret;
                }
index 15a2ca5..6f9c291 100644 (file)
@@ -23,4 +23,5 @@
  *
  * @ingroup Exception
  */
-class MediaTransformInvalidParametersException extends MWException {}
+class MediaTransformInvalidParametersException extends MWException {
+}
index 5f1aca5..c3f0832 100644 (file)
@@ -118,9 +118,9 @@ class PNGHandler extends BitmapHandler {
                        return self::METADATA_GOOD;
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $data = unserialize( $metadata );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$data || !is_array( $data ) ) {
                        wfDebug( __METHOD__ . " invalid png metadata\n" );
@@ -147,9 +147,9 @@ class PNGHandler extends BitmapHandler {
                global $wgLang;
                $original = parent::getLongDesc( $image );
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $metadata = unserialize( $image->getMetadata() );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$metadata || $metadata['frameCount'] <= 0 ) {
                        return $original;
index bccd36c..ac92460 100644 (file)
@@ -201,9 +201,9 @@ class PNGMetadataExtractor {
                                        // if compressed
                                        if ( $items[2] == "\x01" ) {
                                                if ( function_exists( 'gzuncompress' ) && $items[4] === "\x00" ) {
-                                                       wfSuppressWarnings();
+                                                       MediaWiki\suppressWarnings();
                                                        $items[5] = gzuncompress( $items[5] );
-                                                       wfRestoreWarnings();
+                                                       MediaWiki\restoreWarnings();
 
                                                        if ( $items[5] === false ) {
                                                                // decompression failed
@@ -245,9 +245,9 @@ class PNGMetadataExtractor {
                                        fseek( $fh, self::$crcSize, SEEK_CUR );
                                        continue;
                                }
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $content = iconv( 'ISO-8859-1', 'UTF-8', $content );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
 
                                if ( $content === false ) {
                                        throw new Exception( __METHOD__ . ": Read error (error with iconv)" );
@@ -285,9 +285,9 @@ class PNGMetadataExtractor {
                                                continue;
                                        }
 
-                                       wfSuppressWarnings();
+                                       MediaWiki\suppressWarnings();
                                        $content = gzuncompress( $content );
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
 
                                        if ( $content === false ) {
                                                // decompression failed
@@ -296,9 +296,9 @@ class PNGMetadataExtractor {
                                                continue;
                                        }
 
-                                       wfSuppressWarnings();
+                                       MediaWiki\suppressWarnings();
                                        $content = iconv( 'ISO-8859-1', 'UTF-8', $content );
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
 
                                        if ( $content === false ) {
                                                throw new Exception( __METHOD__ . ": Read error (error with iconv)" );
index c2f85e8..4377f75 100644 (file)
@@ -206,10 +206,10 @@ class SvgHandler extends ImageHandler {
                $lnPath = "$tmpDir/" . basename( $srcPath );
                $ok = mkdir( $tmpDir, 0771 ) && symlink( $srcPath, $lnPath );
                $cleaner = new ScopedCallback( function () use ( $tmpDir, $lnPath ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        unlink( $lnPath );
                        rmdir( $tmpDir );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                } );
                if ( !$ok ) {
                        wfDebugLog( 'thumbnail',
@@ -375,9 +375,9 @@ class SvgHandler extends ImageHandler {
        }
 
        function unpackMetadata( $metadata ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $unser = unserialize( $metadata );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( isset( $unser['version'] ) && $unser['version'] == self::SVG_METADATA_VERSION ) {
                        return $unser;
                } else {
index 2037c33..8afa31b 100644 (file)
@@ -108,17 +108,17 @@ class SVGReader {
                // Because we cut off the end of the svg making an invalid one. Complicated
                // try catch thing to make sure warnings get restored. Seems like there should
                // be a better way.
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                try {
                        $this->read();
                } catch ( Exception $e ) {
                        // Note, if this happens, the width/height will be taken to be 0x0.
                        // Should we consider it the default 512x512 instead?
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        libxml_disable_entity_loader( $oldDisable );
                        throw $e;
                }
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                libxml_disable_entity_loader( $oldDisable );
        }
 
@@ -262,7 +262,6 @@ class SVGReader {
                        } elseif ( $this->reader->namespaceURI == self::NS_SVG
                                && $this->reader->nodeType == XMLReader::ELEMENT
                        ) {
-
                                $sysLang = $this->reader->getAttribute( 'systemLanguage' );
                                if ( !is_null( $sysLang ) && $sysLang !== '' ) {
                                        // See http://www.w3.org/TR/SVG/struct.html#SystemLanguageAttribute
diff --git a/includes/media/WebP.php b/includes/media/WebP.php
new file mode 100644 (file)
index 0000000..05d12c4
--- /dev/null
@@ -0,0 +1,306 @@
+<?php
+/**
+ * Handler for Google's WebP format <https://developers.google.com/speed/webp/>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+/**
+ * Handler for Google's WebP format <https://developers.google.com/speed/webp/>
+ *
+ * @ingroup Media
+ */
+class WebPHandler extends BitmapHandler {
+       const BROKEN_FILE = '0'; // value to store in img_metadata if error extracting metadata.
+       /**
+        * @var int Minimum chunk header size to be able to read all header types
+        */
+       const MINIMUM_CHUNK_HEADER_LENGTH = 18;
+       /**
+        * @var int version of the metadata stored in db records
+        */
+       const _MW_WEBP_VERSION = 1;
+
+       const VP8X_ICC = 32;
+       const VP8X_ALPHA = 16;
+       const VP8X_EXIF = 8;
+       const VP8X_XMP = 4;
+       const VP8X_ANIM = 2;
+
+       public function getMetadata( $image, $filename ) {
+               $parsedWebPData = self::extractMetadata( $filename );
+               if ( !$parsedWebPData ) {
+                       return self::BROKEN_FILE;
+               }
+
+               $parsedWebPData['metadata']['_MW_WEBP_VERSION'] = self::_MW_WEBP_VERSION;
+               return serialize( $parsedWebPData );
+       }
+
+       public function getMetadataType( $image ) {
+               return 'parsed-webp';
+       }
+
+       public function isMetadataValid( $image, $metadata ) {
+               if ( $metadata === self::BROKEN_FILE ) {
+                               // Do not repetitivly regenerate metadata on broken file.
+                               return self::METADATA_GOOD;
+               }
+
+               wfSuppressWarnings();
+               $data = unserialize( $metadata );
+               wfRestoreWarnings();
+
+               if ( !$data || !is_array( $data ) ) {
+                               wfDebug( __METHOD__ . " invalid WebP metadata\n" );
+
+                               return self::METADATA_BAD;
+               }
+
+               if ( !isset( $data['metadata']['_MW_WEBP_VERSION'] )
+                               || $data['metadata']['_MW_WEBP_VERSION'] != self::_MW_WEBP_VERSION
+               ) {
+                               wfDebug( __METHOD__ . " old but compatible WebP metadata\n" );
+
+                               return self::METADATA_COMPATIBLE;
+               }
+               return self::METADATA_GOOD;
+       }
+
+       /**
+        * Extracts the image size and WebP type from a file
+        *
+        * @param string $chunks Chunks as extracted by RiffExtractor
+        * @return array|bool Header data array with entries 'compression', 'width' and 'height',
+        * where 'compression' can be 'lossy', 'lossless', 'animated' or 'unknown'. False if
+        * file is not a valid WebP file.
+        */
+       public static function extractMetadata( $filename ) {
+               wfDebugLog( 'WebP', __METHOD__ . ": Extracting metadata from $filename\n" );
+
+               $info = RiffExtractor::findChunksFromFile( $filename, 100 );
+               if ( $info === false ) {
+                       wfDebugLog( 'WebP', __METHOD__ . ": Not a valid RIFF file\n" );
+                       return false;
+               }
+
+               if ( $info['fourCC'] != 'WEBP' ) {
+                       wfDebugLog( 'WebP', __METHOD__ . ': FourCC was not WEBP: ' .
+                               bin2hex( $info['fourCC'] ) .  " \n" );
+                       return false;
+               }
+
+               $metadata = self::extractMetadataFromChunks( $info['chunks'], $filename );
+               if ( !$metadata ) {
+                       wfDebugLog( 'WebP', __METHOD__ . ": No VP8 chunks found\n" );
+                       return false;
+               }
+
+               return $metadata;
+       }
+
+       /**
+        * Extracts the image size and WebP type from a file based on the chunk list
+        * @param array $chunks Chunks as extracted by RiffExtractor
+        * @return array Header data array with entries 'compression', 'width' and 'height', where
+        * 'compression' can be 'lossy', 'lossless', 'animated' or 'unknown'
+        */
+       public static function extractMetadataFromChunks( $chunks, $filename ) {
+               $vp8Info = array();
+
+               foreach ( $chunks as $chunk ) {
+                       if ( !in_array( $chunk['fourCC'], array( 'VP8 ', 'VP8L', 'VP8X' ) ) ) {
+                               // Not a chunk containing interesting metadata
+                               continue;
+                       }
+
+                       $chunkHeader = file_get_contents( $filename, false, null,
+                               $chunk['start'], self::MINIMUM_CHUNK_HEADER_LENGTH );
+                       wfDebugLog( 'WebP', __METHOD__ . ": {$chunk['fourCC']}\n" );
+
+                       switch ( $chunk['fourCC'] ) {
+                               case 'VP8 ':
+                                       return array_merge( $vp8Info,
+                                               self::decodeLossyChunkHeader( $chunkHeader ) );
+                               case 'VP8L':
+                                       return array_merge( $vp8Info,
+                                               self::decodeLosslessChunkHeader( $chunkHeader ) );
+                               case 'VP8X':
+                                       $vp8Info = array_merge( $vp8Info,
+                                               self::decodeExtendedChunkHeader( $chunkHeader ) );
+                                       // Continue looking for other chunks to improve the metadata
+                                       break;
+                       }
+               }
+               return $vp8Info;
+       }
+
+       /**
+        * Decodes a lossy chunk header
+        * @param string $header Header string
+        * @return boolean|array See WebPHandler::decodeHeader
+        */
+       protected static function decodeLossyChunkHeader( $header ) {
+               // Bytes 0-3 are 'VP8 '
+               // Bytes 4-7 are the VP8 stream size
+               // Bytes 8-10 are the frame tag
+               // Bytes 11-13 are 0x9D 0x01 0x2A called the sync code
+               $syncCode = substr( $header, 11, 3 );
+               if ( $syncCode != "\x9D\x01\x2A" ) {
+                       wfDebugLog( 'WebP', __METHOD__ . ': Invalid sync code: ' .
+                               bin2hex( $syncCode ) . "\n" );
+                       return array();
+               }
+               // Bytes 14-17 are image size
+               $imageSize = unpack( 'v2', substr( $header, 14, 4 ) );
+               // Image sizes are 14 bit, 2 MSB are scaling parameters which are ignored here
+               return array(
+                       'compression' => 'lossy',
+                       'width' => $imageSize[1] & 0x3FFF,
+                       'height' => $imageSize[2] & 0x3FFF
+               );
+       }
+
+       /**
+        * Decodes a lossless chunk header
+        * @param string $header Header string
+        * @return boolean|array See WebPHandler::decodeHeader
+        */
+       public static function decodeLosslessChunkHeader( $header ) {
+               // Bytes 0-3 are 'VP8L'
+               // Bytes 4-7 are chunk stream size
+               // Byte 8 is 0x2F called the signature
+               if ( $header{8} != "\x2F" ) {
+                       wfDebugLog( 'WebP',  __METHOD__ . ': Invalid signature: ' .
+                               bin2hex( $header{8} ) . "\n" );
+                       return array();
+               }
+               // Bytes 9-12 contain the image size
+               // Bits 0-13 are width-1; bits 15-27 are height-1
+               $imageSize = unpack( 'C4', substr( $header, 9, 4 ) );
+               return array(
+                               'compression' => 'lossless',
+                               'width' => ( $imageSize[1] | ( ( $imageSize[2] & 0x3F ) << 8 ) ) + 1,
+                               'height' => ( ( ( $imageSize[2] & 0xC0 ) >> 6 ) |
+                                               ( $imageSize[3] << 2 ) | ( ( $imageSize[4] & 0x03 ) << 10 ) ) + 1
+               );
+       }
+
+       /**
+        * Decodes an extended chunk header
+        * @param string $header Header string
+        * @return boolean|array See WebPHandler::decodeHeader
+        */
+       public static function decodeExtendedChunkHeader( $header ) {
+               // Bytes 0-3 are 'VP8X'
+               // Byte 4-7 are chunk length
+               // Byte 8-11 are a flag bytes
+               $flags = unpack( 'c', substr( $header, 8, 1 ) );
+
+               // Byte 12-17 are image size (24 bits)
+               $width = unpack( 'V', substr( $header, 12, 3 ) . "\x00" );
+               $height = unpack( 'V', substr( $header, 15, 3 ) . "\x00" );
+
+               return array(
+                       'compression' => 'unknown',
+                       '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
+               );
+       }
+
+       public function getImageSize( $file, $path, $metadata = false ) {
+               if ( $file === null ) {
+                       $metadata = self::getMetadata( $file, $path );
+               }
+               if ( $metadata === false ) {
+                       $metadata = $file->getMetadata();
+               }
+
+               wfSuppressWarnings();
+               $metadata = unserialize( $metadata );
+               wfRestoreWarnings();
+
+               if ( $metadata == false ) {
+                       return false;
+               }
+               return array( $metadata['width'], $metadata['height'] );
+       }
+
+       /**
+        * @param $file
+        * @return bool True, not all browsers support WebP
+        */
+       public function mustRender( $file ) {
+               return true;
+       }
+
+       /**
+        * @param $file
+        * @return bool False if we are unable to render this image
+        */
+       public function canRender( $file ) {
+               if ( self::isAnimatedImage( $file ) ) {
+                       return false;
+               }
+               return true;
+       }
+
+       /**
+        * @param File $image
+        * @return bool
+        */
+       public function isAnimatedImage( $image ) {
+               $ser = $image->getMetadata();
+               if ( $ser ) {
+                       $metadata = unserialize( $ser );
+                       if ( isset($metadata['animated']) && $metadata['animated'] === true ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       public function canAnimateThumbnail( $file ) {
+               return false;
+       }
+
+       /**
+        * Render files as PNG
+        *
+        * @param $ext
+        * @param $mime
+        * @param $params
+        * @return array
+        */
+       public function getThumbType( $ext, $mime, $params = null ) {
+               return array( 'png', 'image/png' );
+       }
+
+       /**
+        * Must use "im" for XCF
+        *
+        * @return string
+        */
+       protected function getScalerType( $dstPath, $checkDstPath = true ) {
+               return 'im';
+       }
+}
index 6544d5c..16e11dc 100644 (file)
@@ -3,7 +3,7 @@
  * Handler for the Gimp's native file format (XCF)
  *
  * Overview:
- *   http://en.wikipedia.org/wiki/XCF_(file_format)
+ *   https://en.wikipedia.org/wiki/XCF_(file_format)
  * Specification in Gnome repository:
  *   http://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup
  *
@@ -222,9 +222,9 @@ class XCFHandler extends BitmapHandler {
         * @return bool
         */
        public function canRender( $file ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $xcfMeta = unserialize( $file->getMetadata() );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( isset( $xcfMeta['colorType'] ) && $xcfMeta['colorType'] === 'index-coloured' ) {
                        return false;
                }
index 6b36e37..a838355 100644 (file)
@@ -339,9 +339,9 @@ class XMPReader implements LoggerAwareInterface {
                        }
                        if ( $this->charset !== 'UTF-8' ) {
                                //don't convert if already utf-8
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                $content = iconv( $this->charset, 'UTF-8//IGNORE', $content );
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
                        }
 
                        // Ensure the XMP block does not have an xml doctype declaration, which
@@ -415,7 +415,7 @@ class XMPReader implements LoggerAwareInterface {
                $len = unpack( 'Nlength/Noffset', substr( $content, 32, 8 ) );
 
                if ( !$len || $len['length'] < 4 || $len['offset'] < 0 || $len['offset'] > $len['length'] ) {
-                       $this->logger->info(  __METHOD__ . 'Error reading extended XMP block, invalid length or offset.' );
+                       $this->logger->info( __METHOD__ . 'Error reading extended XMP block, invalid length or offset.' );
 
                        return false;
                }
@@ -533,7 +533,7 @@ class XMPReader implements LoggerAwareInterface {
 
                // Even with LIBXML_NOWARNING set, XMLReader::read gives a warning
                // when parsing truncated XML, which causes unit tests to fail.
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                while ( $reader->read() ) {
                        if ( $reader->nodeType === XMLReader::ELEMENT ) {
                                // Reached the first element without hitting a doctype declaration
@@ -547,7 +547,7 @@ class XMPReader implements LoggerAwareInterface {
                                break;
                        }
                }
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !is_null( $result ) ) {
                        return $result;
@@ -638,7 +638,6 @@ class XMPReader implements LoggerAwareInterface {
                // Validate structures.
                list( $ns, $tag ) = explode( ' ', $elm, 2 );
                if ( isset( $this->items[$ns][$tag]['validate'] ) ) {
-
                        $info =& $this->items[$ns][$tag];
                        $finalName = isset( $info['map_name'] )
                                ? $info['map_name'] : $tag;
diff --git a/includes/media/tinyrgb.icc b/includes/media/tinyrgb.icc
new file mode 100644 (file)
index 0000000..eab973f
Binary files /dev/null and b/includes/media/tinyrgb.icc differ
index 243e280..840b9d8 100644 (file)
@@ -9,7 +9,7 @@
 image/gif      [BITMAP]
 image/png image/x-png  [BITMAP]
 image/ief      [BITMAP]
-image/jpeg     [BITMAP]
+image/jpeg image/pjpeg [BITMAP]
 image/jp2      [BITMAP]
 image/xbm      [BITMAP]
 image/tiff     [BITMAP]
index bc4a00b..6912864 100644 (file)
@@ -745,13 +745,13 @@ class MWMemcached {
                $timeout = $this->_connect_timeout;
                $errno = $errstr = null;
                for ( $i = 0; !$sock && $i < $this->_connect_attempts; $i++ ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        if ( $this->_persistent == 1 ) {
                                $sock = pfsockopen( $ip, $port, $errno, $errstr, $timeout );
                        } else {
                                $sock = fsockopen( $ip, $port, $errno, $errstr, $timeout );
                        }
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
                if ( !$sock ) {
                        $this->_error_log( "Error connecting to $host: $errstr\n" );
index 7faf4bb..c5850b6 100644 (file)
@@ -38,6 +38,7 @@ use MediaWiki\Logger\LoggerFactory;
 class ObjectCache {
        /** @var Array Map of (id => BagOStuff) */
        public static $instances = array();
+
        /** @var Array Map of (id => WANObjectCache) */
        public static $wanInstances = array();
 
@@ -45,35 +46,29 @@ class ObjectCache {
         * Get a cached instance of the specified type of cache object.
         *
         * @param string $id
-        *
         * @return BagOStuff
         */
        static function getInstance( $id ) {
-               if ( isset( self::$instances[$id] ) ) {
-                       return self::$instances[$id];
+               if ( !isset( self::$instances[$id] ) ) {
+                       self::$instances[$id] = self::newFromId( $id );
                }
 
-               $object = self::newFromId( $id );
-               self::$instances[$id] = $object;
-               return $object;
+               return self::$instances[$id];
        }
 
        /**
         * Get a cached instance of the specified type of cache object.
         *
+        * @since 1.26
         * @param string $id
-        *
         * @return WANObjectCache
-        * @since 1.26
         */
        static function getWANInstance( $id ) {
-               if ( isset( self::$wanInstances[$id] ) ) {
-                       return self::$wanInstances[$id];
+               if ( !isset( self::$wanInstances[$id] ) ) {
+                       self::$wanInstances[$id] = self::newWANCacheFromId( $id );
                }
 
-               $object = self::newWANCacheFromId( $id );
-               self::$wanInstances[$id] = $object;
-               return $object;
+               return self::$wanInstances[$id];
        }
 
        /**
@@ -88,9 +83,8 @@ class ObjectCache {
         * Create a new cache object of the specified type.
         *
         * @param string $id
-        *
-        * @throws MWException
         * @return BagOStuff
+        * @throws MWException
         */
        static function newFromId( $id ) {
                global $wgObjectCaches;
@@ -107,9 +101,8 @@ class ObjectCache {
         * Create a new cache object from parameters
         *
         * @param array $params
-        *
-        * @throws MWException
         * @return BagOStuff
+        * @throws MWException
         */
        static function newFromParams( $params ) {
                if ( isset( $params['loggroup'] ) ) {
@@ -140,6 +133,7 @@ class ObjectCache {
         * be an alias to the configured cache choice for that.
         * If no cache choice is configured (by default $wgMainCacheType is CACHE_NONE),
         * then CACHE_ANYTHING will forward to CACHE_DB.
+        *
         * @param array $params
         * @return BagOStuff
         */
@@ -162,8 +156,8 @@ class ObjectCache {
         *
         * @param array $params
         * @param int|string $fallback Fallback cache, e.g. (CACHE_NONE, "hash") (since 1.24)
-        * @throws MWException
         * @return BagOStuff
+        * @throws MWException
         */
        static function newAccelerator( $params, $fallback = null ) {
                if ( function_exists( 'apc_fetch' ) ) {
@@ -173,11 +167,11 @@ class ObjectCache {
                } elseif ( function_exists( 'wincache_ucache_get' ) ) {
                        $id = 'wincache';
                } else {
-                       if ( $fallback !== null ) {
-                               return self::newFromId( $fallback );
+                       if ( $fallback === null ) {
+                               throw new MWException( 'CACHE_ACCEL requested but no suitable object ' .
+                                       'cache is present. You may want to install APC.' );
                        }
-                       throw new MWException( "CACHE_ACCEL requested but no suitable object " .
-                               "cache is present. You may want to install APC." );
+                       $id = $fallback;
                }
                return self::newFromId( $id );
        }
@@ -190,7 +184,6 @@ class ObjectCache {
         * switching between the two clients randomly would be disastrous.
         *
         * @param array $params
-        *
         * @return MemcachedPhpBagOStuff
         */
        static function newMemcached( $params ) {
@@ -200,11 +193,10 @@ class ObjectCache {
        /**
         * Create a new cache object of the specified type
         *
+        * @since 1.26
         * @param string $id
-        *
-        * @throws MWException
         * @return WANObjectCache
-        * @since 1.26
+        * @throws MWException
         */
        static function newWANCacheFromId( $id ) {
                global $wgWANObjectCaches;
@@ -226,8 +218,8 @@ class ObjectCache {
        /**
         * Get the main WAN cache object
         *
-        * @return WANObjectCache
         * @since 1.26
+        * @return WANObjectCache
         */
        static function getMainWANInstance() {
                global $wgMainWANCache;
@@ -247,9 +239,8 @@ class ObjectCache {
         * avoiding an assumption of perfect serializability (or accepting anomalies).
         * Reads may be eventually consistent or data might rollback as nodes flap.
         *
-        *
-        * @return BagOStuff
         * @since 1.26
+        * @return BagOStuff
         */
        static function getMainStashInstance() {
                global $wgMainStash;
index 789f1e3..ae3850f 100644 (file)
@@ -31,6 +31,8 @@ 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
         */
@@ -157,10 +159,24 @@ class ObjectCacheSessionHandler {
        }
 
        /**
-        * Shutdown function. See the comment inside ObjectCacheSessionHandler::install
-        * for rationale.
+        * Shutdown function.
+        * See the comment inside ObjectCacheSessionHandler::install for rationale.
         */
        static function handleShutdown() {
+               global $wgObjectCacheSessionExpiry;
+
+               $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.
+               // Make a dummy change every so often to avoid this.
+               if ( !isset( $_SESSION['wsExpiresUnix'] )
+                       || ( $now + self::TTL_REFRESH_WINDOW ) > isset( $_SESSION['wsExpiresUnix'] )
+               ) {
+                       $_SESSION['wsExpiresUnix'] = $now + $wgObjectCacheSessionExpiry;
+               }
+
                session_write_close();
        }
 }
index ed0aaa2..b8a0dd5 100644 (file)
@@ -374,10 +374,32 @@ class RedisBagOStuff extends BagOStuff {
 
                foreach ( $candidates as $tag ) {
                        $server = $this->serverTagMap[$tag];
+
                        $conn = $this->redisPool->getConnection( $server );
-                       if ( $conn ) {
-                               return array( $server, $conn );
+                       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).
+                                       continue;
+                               }
+                       } catch ( RedisException $e ) {
+                               // Server is not accepting commands
+                               $this->handleException( $conn, $e );
+                               continue;
                        }
+
+                       return array( $server, $conn );
                }
 
                $this->setLastError( BagOStuff::ERR_UNREACHABLE );
index 82eeb84..3b46249 100644 (file)
@@ -30,6 +30,7 @@ class SqlBagOStuff extends BagOStuff {
        /** @var LoadBalancer */
        protected $lb;
 
+       /** @var array */
        protected $serverInfos;
 
        /** @var array */
@@ -53,6 +54,9 @@ class SqlBagOStuff extends BagOStuff {
        /** @var string */
        protected $tableName = 'objectcache';
 
+       /** @var bool */
+       protected $slaveOnly = false;
+
        /** @var array UNIX timestamps */
        protected $connFailureTimes = array();
 
@@ -84,6 +88,10 @@ class SqlBagOStuff extends BagOStuff {
         *                  required to hold the largest shard index. Data will be
         *                  distributed across all tables by key hash. This is for
         *                  MySQL bugs 61735 and 61736.
+        *   - slaveOnly:   Whether to only use slave DBs and avoid triggering
+        *                  garbage collection logic of expired items. This only
+        *                  makes sense if the primary DB is used and only if get()
+        *                  calls will be used. This is used by ReplicatedBagOStuff.
         *
         * @param array $params
         */
@@ -112,6 +120,7 @@ class SqlBagOStuff extends BagOStuff {
                if ( isset( $params['shards'] ) ) {
                        $this->shards = intval( $params['shards'] );
                }
+               $this->slaveOnly = !empty( $params['slaveOnly'] );
        }
 
        /**
@@ -155,12 +164,13 @@ class SqlBagOStuff extends BagOStuff {
                                 * However, SQLite has an opposite behavior. And PostgreSQL needs to know
                                 * if we are in transaction or no
                                 */
-                               if ( wfGetDB( DB_MASTER )->getType() == 'mysql' ) {
+                               $index = $this->slaveOnly ? DB_SLAVE : DB_MASTER;
+                               if ( wfGetDB( $index )->getType() == 'mysql' ) {
                                        $this->lb = wfGetLBFactory()->newMainLB();
-                                       $db = $this->lb->getConnection( DB_MASTER );
+                                       $db = $this->lb->getConnection( $index );
                                        $db->clearFlag( DBO_TRX ); // auto-commit mode
                                } else {
-                                       $db = wfGetDB( DB_MASTER );
+                                       $db = wfGetDB( $index );
                                }
                        }
                        if ( $wgDebugDBTransactions ) {
@@ -274,12 +284,7 @@ class SqlBagOStuff extends BagOStuff {
                                try {
                                        $db = $this->getDB( $row->serverIndex );
                                        if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
-                                               $this->debug( "get: key has expired, deleting" );
-                                               # Put the expiry time in the WHERE condition to avoid deleting a
-                                               # newly-inserted value
-                                               $db->delete( $row->tableName,
-                                                       array( 'keyname' => $key, 'exptime' => $row->exptime ),
-                                                       __METHOD__ );
+                                               $this->debug( "get: key has expired" );
                                        } else { // HIT
                                                $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                        }
@@ -358,8 +363,6 @@ class SqlBagOStuff extends BagOStuff {
                return $result;
        }
 
-
-
        /**
         * @param string $key
         * @param mixed $value
@@ -367,37 +370,7 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $exptime = 0 ) {
-               list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
-               try {
-                       $db = $this->getDB( $serverIndex );
-                       $exptime = intval( $exptime );
-
-                       if ( $exptime < 0 ) {
-                               $exptime = 0;
-                       }
-
-                       if ( $exptime == 0 ) {
-                               $encExpiry = $this->getMaxDateTime( $db );
-                       } else {
-                               $exptime = $this->convertExpiry( $exptime );
-                               $encExpiry = $db->timestamp( $exptime );
-                       }
-                       // (bug 24425) use a replace if the db supports it instead of
-                       // delete/insert to avoid clashes with conflicting keynames
-                       $db->replace(
-                               $tableName,
-                               array( 'keyname' ),
-                               array(
-                                       'keyname' => $key,
-                                       'value' => $db->encodeBlob( $this->serialize( $value ) ),
-                                       'exptime' => $encExpiry
-                               ), __METHOD__ );
-               } catch ( DBError $e ) {
-                       $this->handleWriteError( $e, $serverIndex );
-                       return false;
-               }
-
-               return true;
+               return $this->setMulti( array( $key => $value ), $exptime );
        }
 
        /**
@@ -546,7 +519,7 @@ class SqlBagOStuff extends BagOStuff {
        }
 
        protected function garbageCollect() {
-               if ( !$this->purgePeriod ) {
+               if ( !$this->purgePeriod || $this->slaveOnly ) {
                        // Disabled
                        return;
                }
@@ -688,9 +661,9 @@ class SqlBagOStuff extends BagOStuff {
         */
        protected function unserialize( $serial ) {
                if ( function_exists( 'gzinflate' ) ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $decomp = gzinflate( $serial );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        if ( false !== $decomp ) {
                                $serial = $decomp;
@@ -758,6 +731,8 @@ class SqlBagOStuff extends BagOStuff {
         * @param int $serverIndex
         */
        protected function markServerDown( $exception, $serverIndex ) {
+               unset( $this->conns[$serverIndex] ); // bug T103435
+
                if ( isset( $this->connFailureTimes[$serverIndex] ) ) {
                        if ( time() - $this->connFailureTimes[$serverIndex] >= 60 ) {
                                unset( $this->connFailureTimes[$serverIndex] );
index 48f3161..f213f6a 100644 (file)
@@ -333,7 +333,9 @@ class Article implements Page {
         * @return string|bool String containing article contents, or false if null
         * @deprecated since 1.21, use WikiPage::getContent() instead
         */
-       function fetchContent() { #BC cruft!
+       function fetchContent() {
+               // BC cruft!
+
                ContentHandler::deprecated( __METHOD__, '1.21' );
 
                if ( $this->mContentLoaded && $this->mContent ) {
@@ -572,7 +574,7 @@ class Article implements Page {
                }
 
                # Should the parser cache be used?
-               $useParserCache = $this->mPage->isParserCacheUsed( $parserOptions, $oldid );
+               $useParserCache = $this->mPage->shouldCheckParserCache( $parserOptions, $oldid );
                wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
                if ( $user->getStubThreshold() ) {
                        $this->getContext()->getStats()->increment( 'pcache_miss_stub' );
@@ -998,7 +1000,7 @@ class Article implements Page {
                                $outputPage->addModules( 'mediawiki.action.view.redirect' );
 
                                // Add a <link rel="canonical"> tag
-                               $outputPage->setCanonicalUrl( $this->getTitle()->getLocalURL() );
+                               $outputPage->setCanonicalUrl( $this->getTitle()->getCanonicalURL() );
 
                                // Tell the output object that the user arrived at this article through a redirect
                                $outputPage->setRedirectedFrom( $this->mRedirectedFrom );
@@ -1238,7 +1240,7 @@ class Article implements Page {
                if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
                        // If there's no backing content, send a 404 Not Found
                        // for better machine handling of broken links.
-                       $this->getContext()->getRequest()->response()->header( "HTTP/1.1 404 Not Found" );
+                       $this->getContext()->getRequest()->response()->statusHeader( 404 );
                }
 
                // Also apply the robot policy for nonexisting pages (even if a 404 was used for sanity)
@@ -1704,10 +1706,8 @@ class Article implements Page {
 
                if ( $user->isAllowed( 'suppressrevision' ) ) {
                        $suppress = Html::openElement( 'div', array( 'id' => 'wpDeleteSuppressRow' ) ) .
-                               "<strong>" .
-                                               Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
-                                                       'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
-                                       "</strong>" .
+                               Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
+                                       'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
                                Html::closeElement( 'div' );
                } else {
                        $suppress = '';
@@ -1772,7 +1772,7 @@ class Article implements Page {
                        Xml::closeElement( 'form' );
 
                        if ( $user->isAllowed( 'editinterface' ) ) {
-                               $link = Linker::link(
+                               $link = Linker::linkKnown(
                                        $ctx->msg( 'deletereason-dropdown' )->inContentLanguage()->getTitle(),
                                        wfMessage( 'delete-edit-reasonlist' )->escaped(),
                                        array(),
@@ -1795,8 +1795,10 @@ class Article implements Page {
         */
        public function doDelete( $reason, $suppress = false ) {
                $error = '';
-               $outputPage = $this->getContext()->getOutput();
-               $status = $this->mPage->doDeleteArticleReal( $reason, $suppress, 0, true, $error );
+               $context = $this->getContext();
+               $outputPage = $context->getOutput();
+               $user = $context->getUser();
+               $status = $this->mPage->doDeleteArticleReal( $reason, $suppress, 0, true, $error, $user );
 
                if ( $status->isGood() ) {
                        $deleted = $this->getTitle()->getPrefixedText();
index 8f635cf..7ea4ed7 100644 (file)
@@ -614,8 +614,8 @@ EOT
                        $out->wrapWikiMsg( "<div id='mw-imagepage-nofile' class='plainlinks'>\n$1\n</div>", $nofile );
                        if ( !$this->getID() && $wgSend404Code ) {
                                // If there is no image, no shared image, and no description page,
-                               // output a 404, to be consistent with articles.
-                               $request->response()->header( 'HTTP/1.1 404 Not Found' );
+                               // output a 404, to be consistent with Article::showMissingArticle.
+                               $request->response()->statusHeader( 404 );
                        }
                }
                $out->setFileVersion( $this->displayImg );
@@ -1515,6 +1515,18 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
                $s = '';
                $this->doQuery();
                if ( count( $this->mHist ) ) {
+                       if ( $this->mImg->isLocal() ) {
+                               // Do a batch existence check for user pages and talkpages
+                               $linkBatch = new LinkBatch();
+                               for ( $i = $this->mRange[0]; $i <= $this->mRange[1]; $i++ ) {
+                                       $file = $this->mHist[$i];
+                                       $user = $file->getUser( 'text' );
+                                       $linkBatch->add( NS_USER, $user );
+                                       $linkBatch->add( NS_USER_TALK, $user );
+                               }
+                               $linkBatch->execute();
+                       }
+
                        $list = new ImageHistoryList( $this->mImagePage );
                        # Generate prev/next links
                        $navLink = $this->getNavigationBar();
index abb22a0..f7f2528 100644 (file)
@@ -1082,13 +1082,13 @@ class WikiPage implements Page, IDBAccessObject {
         * Should the parser cache be used?
         *
         * @param ParserOptions $parserOptions ParserOptions to check
-        * @param int $oldid
+        * @param int $oldId
         * @return bool
         */
-       public function isParserCacheUsed( ParserOptions $parserOptions, $oldid ) {
+       public function shouldCheckParserCache( ParserOptions $parserOptions, $oldId ) {
                return $parserOptions->getStubThreshold() == 0
                        && $this->exists()
-                       && ( $oldid === null || $oldid === 0 || $oldid === $this->getLatest() )
+                       && ( $oldId === null || $oldId === 0 || $oldId === $this->getLatest() )
                        && $this->getContentHandler()->isParserCacheSupported();
        }
 
@@ -1105,7 +1105,7 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public function getParserOutput( ParserOptions $parserOptions, $oldid = null ) {
 
-               $useParserCache = $this->isParserCacheUsed( $parserOptions, $oldid );
+               $useParserCache = $this->shouldCheckParserCache( $parserOptions, $oldid );
                wfDebug( __METHOD__ . ': using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
                if ( $parserOptions->getStubThreshold() ) {
                        wfIncrStats( 'pcache.miss.stub' );
@@ -1264,10 +1264,9 @@ class WikiPage implements Page, IDBAccessObject {
                        $conditions['page_latest'] = $lastRevision;
                }
 
-               $now = wfTimestampNow();
                $row = array( /* SET */
                        'page_latest'      => $revision->getId(),
-                       'page_touched'     => $dbw->timestamp( $now ),
+                       'page_touched'     => $dbw->timestamp( $revision->getTimestamp() ),
                        'page_is_new'      => ( $lastRevision === 0 ) ? 1 : 0,
                        'page_is_redirect' => $rt !== null ? 1 : 0,
                        'page_len'         => $len,
@@ -1865,7 +1864,7 @@ class WikiPage implements Page, IDBAccessObject {
                                $revision = null;
                                // Update page_touched, this is usually implicit in the page update
                                // Other cache updates are done in onArticleEdit()
-                               $this->mTitle->invalidateCache();
+                               $this->mTitle->invalidateCache( $now );
                        }
                } else {
                        // Create new article
@@ -2168,9 +2167,11 @@ class WikiPage implements Page, IDBAccessObject {
                        $editInfo = $this->mPreparedEdit;
                }
 
-               // Save it to the parser cache
+               // Save it to the parser cache.
+               // Make sure the cache time matches page_touched to avoid double parsing.
                ParserCache::singleton()->save(
-                       $editInfo->output, $this, $editInfo->popts, $editInfo->timestamp, $editInfo->revid
+                       $editInfo->output, $this, $editInfo->popts,
+                       $revision->getTimestamp(), $editInfo->revid
                );
 
                // Update the links tables and other secondary data
@@ -3023,7 +3024,7 @@ class WikiPage implements Page, IDBAccessObject {
                        ) );
                }
 
-               // Get the last edit not by this guy...
+               // Get the last edit not by this person...
                // Note: these may not be public values
                $user = intval( $current->getUser( Revision::RAW ) );
                $user_text = $dbw->addQuotes( $current->getUserText( Revision::RAW ) );
@@ -3045,29 +3046,6 @@ class WikiPage implements Page, IDBAccessObject {
                        return array( array( 'notvisiblerev' ) );
                }
 
-               // Set patrolling and bot flag on the edits, which gets rollbacked.
-               // This is done before the rollback edit to have patrolling also on failure (bug 62157).
-               $set = array();
-               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
-                       // Mark all reverted edits as bot
-                       $set['rc_bot'] = 1;
-               }
-
-               if ( $wgUseRCPatrol ) {
-                       // Mark all reverted edits as patrolled
-                       $set['rc_patrolled'] = 1;
-               }
-
-               if ( count( $set ) ) {
-                       $dbw->update( 'recentchanges', $set,
-                               array( /* WHERE */
-                                       'rc_cur_id' => $current->getPage(),
-                                       'rc_user_text' => $current->getUserText(),
-                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
-                               ), __METHOD__
-                       );
-               }
-
                // Generate the edit summary if necessary
                $target = Revision::newFromId( $s->rev_id, Revision::READ_LATEST );
                if ( empty( $summary ) ) {
@@ -3116,6 +3094,30 @@ class WikiPage implements Page, IDBAccessObject {
                        $guser
                );
 
+               // Set patrolling and bot flag on the edits, which gets rollbacked.
+               // This is done even on edit failure to have patrolling in that case (bug 62157).
+               $set = array();
+               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
+                       // Mark all reverted edits as bot
+                       $set['rc_bot'] = 1;
+               }
+
+               if ( $wgUseRCPatrol ) {
+                       // Mark all reverted edits as patrolled
+                       $set['rc_patrolled'] = 1;
+               }
+
+               if ( count( $set ) ) {
+                       $dbw->update( 'recentchanges', $set,
+                               array( /* WHERE */
+                                       'rc_cur_id' => $current->getPage(),
+                                       'rc_user_text' => $current->getUserText(),
+                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
+                               ),
+                               __METHOD__
+                       );
+               }
+
                if ( !$status->isOK() ) {
                        return $status->getErrorsArray();
                }
@@ -3159,7 +3161,6 @@ class WikiPage implements Page, IDBAccessObject {
                // Update existence markers on article/talk tabs...
                $other = $title->getOtherPage();
 
-               $other->invalidateCache();
                $other->purgeSquid();
 
                $title->touchLinks();
@@ -3176,7 +3177,6 @@ class WikiPage implements Page, IDBAccessObject {
                // Update existence markers on article/talk tabs...
                $other = $title->getOtherPage();
 
-               $other->invalidateCache();
                $other->purgeSquid();
 
                $title->touchLinks();
index 950c0d4..c450689 100644 (file)
@@ -47,7 +47,7 @@ class CacheTime {
        /**
         * setCacheTime() sets the timestamp expressing when the page has been rendered.
         * This does not control expiry, see updateCacheExpiry() for that!
-        * @param string $t
+        * @param string $t TS_MW timestamp
         * @return string
         */
        public function setCacheTime( $t ) {
index 830a68f..cf8cd41 100644 (file)
@@ -41,7 +41,7 @@ class CoreParserFunctions {
                $noHashFunctions = array(
                        'ns', 'nse', 'urlencode', 'lcfirst', 'ucfirst', 'lc', 'uc',
                        'localurl', 'localurle', 'fullurl', 'fullurle', 'canonicalurl',
-                       'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural',
+                       'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural', 'bidi',
                        'numberofpages', 'numberofusers', 'numberofactiveusers',
                        'numberofarticles', 'numberoffiles', 'numberofadmins',
                        'numberingroup', 'numberofedits', 'language',
@@ -353,6 +353,15 @@ class CoreParserFunctions {
                return $parser->getFunctionLang()->convertPlural( $text, $forms );
        }
 
+       /**
+        * @param Parser $parser
+        * @param string $text
+        * @return string
+        */
+       public static function bidi( $parser, $text = '' ) {
+               return $parser->getFunctionLang()->embedBidi( $text );
+       }
+
        /**
         * Override the title of the page when viewed, provided we've been given a
         * title which will normalise to the canonical title
index 7026c5c..b4ca7c8 100644 (file)
@@ -560,7 +560,6 @@ class LinkHolderArray {
 
                        // for each found variants, figure out link holders and replace
                        foreach ( $varRes as $s ) {
-
                                $variantTitle = Title::makeTitle( $s->page_namespace, $s->page_title );
                                $varPdbk = $variantTitle->getPrefixedDBkey();
                                $vardbk = $variantTitle->getDBkey();
index 928c3a8..7f92590 100644 (file)
@@ -1023,6 +1023,7 @@ class Parser {
                        }
 
                        $first_character = $line[0];
+                       $first_two = substr( $line, 0, 2 );
                        $matches = array();
 
                        if ( preg_match( '/^(:*)\{\|(.*)$/', $line, $matches ) ) {
@@ -1042,7 +1043,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 +1061,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 +1090,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 );
                                }
@@ -1438,7 +1439,7 @@ class Parser {
                                '-' => '',
                                ' ' => '',
                                'x' => 'X',
-                       ));
+                       ) );
                        $titleObj = SpecialPage::getTitleFor( 'Booksources', $num );
                        return '<a href="' .
                                htmlspecialchars( $titleObj->getLocalURL() ) .
@@ -1481,7 +1482,7 @@ class Parser {
                # Don't break a trailing HTML entity by moving the ; into $trail
                # This is in hot code, so use substr_compare to avoid having to
                # create a new string object for the comparison
-               if ( $numSepChars && substr_compare( $url, ";", -$numSepChars, 1 ) === 0) {
+               if ( $numSepChars && substr_compare( $url, ";", -$numSepChars, 1 ) === 0 ) {
                        # more optimization: instead of running preg_match with a $
                        # anchor, which can be slow, do the match on the reversed
                        # string starting at the desired offset.
@@ -3438,7 +3439,6 @@ class Parser {
 
                # SUBST
                if ( !$found ) {
-
                        $substMatch = $this->mSubstWords->matchStartAndRemove( $part1 );
 
                        # Possibilities for substMatch: "subst", "safesubst" or FALSE
@@ -3496,7 +3496,6 @@ class Parser {
 
                # Parser functions
                if ( !$found ) {
-
                        $colonPos = strpos( $part1, ':' );
                        if ( $colonPos !== false ) {
                                $func = substr( $part1, 0, $colonPos );
@@ -4556,6 +4555,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
@@ -5077,7 +5082,7 @@ class Parser {
         * in the Parser class.
         *
         * This interface (introduced r61913) appears to be undocumented, but
-        * 'markerName' is used by some core tag hooks to override which strip
+        * 'markerType' is used by some core tag hooks to override which strip
         * array their results are placed in. **Use great caution if attempting
         * this interface, as it is not documented and injudicious use could smash
         * private variables.**
index 98d3f7f..44b0bc9 100644 (file)
@@ -141,7 +141,7 @@ class ParserCache {
 
                // Determine the options which affect this article
                $optionsKey = $this->mMemc->get( $this->getOptionsKey( $article ) );
-               if ( $optionsKey != false ) {
+               if ( $optionsKey instanceof CacheTime ) {
                        if ( !$useOutdated && $optionsKey->expired( $article->getTouched() ) ) {
                                wfIncrStats( "pcache.miss.expired" );
                                $cacheTime = $optionsKey->getCacheTime();
@@ -176,7 +176,7 @@ class ParserCache {
         * Retrieve the ParserOutput from ParserCache.
         * false if not found or outdated.
         *
-        * @param WikiPage $article
+        * @param WikiPage|Article $article
         * @param ParserOptions $popts
         * @param bool $useOutdated (default false)
         *
@@ -213,6 +213,10 @@ class ParserCache {
                // key. Force it here. See bug 31445.
                $value->setEditSectionTokens( $popts->getEditSection() );
 
+               $wikiPage = method_exists( $article, 'getPage' )
+                       ? $article->getPage()
+                       : $article;
+
                if ( !$useOutdated && $value->expired( $touched ) ) {
                        wfIncrStats( "pcache.miss.expired" );
                        $cacheTime = $value->getCacheTime();
@@ -225,6 +229,10 @@ class ParserCache {
                        $cachedRevId = $value->getCacheRevisionId();
                        wfDebug( "ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n" );
                        $value = false;
+               } elseif ( Hooks::run( 'RejectParserCacheValue', array( $value, $wikiPage, $popts ) ) === false ) {
+                       wfIncrStats( 'pcache.miss.rejected' );
+                       wfDebug( "ParserOutput key valid, but rejected by RejectParserCacheValue hook handler.\n" );
+                       $value = false;
                } else {
                        wfIncrStats( "pcache.hit" );
                }
index a8db1c9..7068bd7 100644 (file)
@@ -103,7 +103,7 @@ class ParserOutput extends CacheTime {
                        $text = str_replace( array( Parser::TOC_START, Parser::TOC_END ), '', $text );
                } else {
                        $text = preg_replace(
-                               '#' . preg_quote( Parser::TOC_START ) . '.*?' . preg_quote( Parser::TOC_END ) . '#s',
+                               '#' . preg_quote( Parser::TOC_START, '#' ) . '.*?' . preg_quote( Parser::TOC_END, '#' ) . '#s',
                                '',
                                $text
                        );
index ff34d9b..718ca35 100644 (file)
@@ -87,9 +87,9 @@ class Preprocessor_DOM implements Preprocessor {
                $xml .= "</list>";
 
                $dom = new DOMDocument();
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $result = $dom->loadXML( $xml );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$result ) {
                        // Try running the XML through UtfNormal to get rid of invalid characters
                        $xml = UtfNormal\Validator::cleanUp( $xml );
@@ -154,7 +154,6 @@ class Preprocessor_DOM implements Preprocessor {
                $cacheable = ( $wgPreprocessorCacheThreshold !== false
                        && strlen( $text ) > $wgPreprocessorCacheThreshold );
                if ( $cacheable ) {
-
                        $cacheKey = wfMemcKey( 'preprocess-xml', md5( $text ), $flags );
                        $cacheValue = $wgMemc->get( $cacheKey );
                        if ( $cacheValue ) {
@@ -186,9 +185,9 @@ class Preprocessor_DOM implements Preprocessor {
                }
 
                $dom = new DOMDocument;
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $result = $dom->loadXML( $xml );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( !$result ) {
                        // Try running the XML through UtfNormal to get rid of invalid characters
                        $xml = UtfNormal\Validator::cleanUp( $xml );
index 308ef44..d1ad39c 100644 (file)
@@ -119,7 +119,6 @@ class Preprocessor_Hash implements Preprocessor {
                        && strlen( $text ) > $wgPreprocessorCacheThreshold;
 
                if ( $cacheable ) {
-
                        $cacheKey = wfMemcKey( 'preprocess-hash', md5( $text ), $flags );
                        $cacheValue = $wgMemc->get( $cacheKey );
                        if ( $cacheValue ) {
diff --git a/includes/password/PasswordPolicyChecks.php b/includes/password/PasswordPolicyChecks.php
new file mode 100644 (file)
index 0000000..eb4a958
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Password policy checks
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Functions to check passwords against a policy requirement
+ * @since 1.26
+ */
+class PasswordPolicyChecks {
+
+       /**
+        * Check password is longer than minimum, not fatal
+        * @param int $policyVal minimal length
+        * @param User $user
+        * @param string $password
+        * @return Status error if $password is shorter than $policyVal
+        */
+       public static function checkMinimalPasswordLength( $policyVal, User $user, $password ) {
+               $status = Status::newGood();
+               if ( $policyVal > strlen( $password ) ) {
+                       $status->error( 'passwordtooshort', $policyVal );
+               }
+               return $status;
+       }
+
+       /**
+        * Check password is longer than minimum, fatal
+        * @param int $policyVal minimal length
+        * @param User $user
+        * @param string $password
+        * @return Status fatal if $password is shorter than $policyVal
+        */
+       public static function checkMinimumPasswordLengthToLogin( $policyVal, User $user, $password ) {
+               $status = Status::newGood();
+               if ( $policyVal > strlen( $password ) ) {
+                       $status->fatal( 'passwordtooshort', $policyVal );
+               }
+               return $status;
+       }
+
+       /**
+        * Check password is shorter than maximum, fatal
+        * @param int $policyVal maximum length
+        * @param User $user
+        * @param string $password
+        * @return Status fatal if $password is shorter than $policyVal
+        */
+       public static function checkMaximalPasswordLength( $policyVal, User $user, $password ) {
+               $status = Status::newGood();
+               if ( $policyVal < strlen( $password ) ) {
+                       $status->fatal( 'passwordtoolong', $policyVal );
+               }
+               return $status;
+       }
+
+       /**
+        * Check if username and password match
+        * @param bool $policyVal true to force compliance.
+        * @param User $user
+        * @param string $password
+        * @return Status error if username and password match, and policy is true
+        */
+       public static function checkPasswordCannotMatchUsername( $policyVal, User $user, $password ) {
+               global $wgContLang;
+               $status = Status::newGood();
+               $username = $user->getName();
+               if ( $policyVal && $wgContLang->lc( $password ) === $wgContLang->lc( $username ) ) {
+                       $status->error( 'password-name-match' );
+               }
+               return $status;
+       }
+
+       /**
+        * Check if username and password are on a blacklist
+        * @param bool $policyVal true to force compliance.
+        * @param User $user
+        * @param string $password
+        * @return Status error if username and password match, and policy is true
+        */
+       public static function checkPasswordCannotMatchBlacklist( $policyVal, User $user, $password ) {
+               static $blockedLogins = array(
+                       'Useruser' => 'Passpass', 'Useruser1' => 'Passpass1', # r75589
+                       'Apitestsysop' => 'testpass', 'Apitestuser' => 'testpass' # r75605
+               );
+
+               $status = Status::newGood();
+               $username = $user->getName();
+               if ( $policyVal
+                       && isset( $blockedLogins[$username] )
+                       && $password == $blockedLogins[$username]
+               ) {
+                       $status->error( 'password-login-forbidden' );
+               }
+               return $status;
+       }
+
+}
diff --git a/includes/password/UserPasswordPolicy.php b/includes/password/UserPasswordPolicy.php
new file mode 100644 (file)
index 0000000..cdad9ba
--- /dev/null
@@ -0,0 +1,158 @@
+<?php
+/**
+ * Password policy checking for a user
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Check if a user's password complies with any password policies that apply to that
+ * user, based on the user's group membership.
+ * @since 1.26
+ */
+class UserPasswordPolicy {
+
+       /**
+        * @var array
+        */
+       private $policies;
+
+       /**
+        * Mapping of statements to the function that will test the password for compliance. The
+        * checking functions take the policy value, the user, and password, and return a Status
+        * object indicating compliance.
+        * @var array
+        */
+       private $policyCheckFunctions;
+
+       /**
+        * @param array $policies
+        * @param array $checks mapping statement to its checking function. Checking functions are
+        * called with the policy value for this user, the user object, and the password to check.
+        */
+       public function __construct( array $policies, array $checks ) {
+               if ( !isset( $policies['default'] ) ) {
+                       throw new InvalidArgumentException(
+                               'Must include a \'default\' password policy'
+                       );
+               }
+               $this->policies = $policies;
+
+               foreach ( $checks as $statement => $check ) {
+                       if ( !is_callable( $check ) ) {
+                               throw new InvalidArgumentException(
+                                       'Policy check functions must be callable'
+                               );
+                       }
+                       $this->policyCheckFunctions[$statement] = $check;
+               }
+       }
+
+       /**
+        * 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
+        * @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();
+
+               foreach ( $effectivePolicy as $policy => $value ) {
+                       if ( !isset( $this->policyCheckFunctions[$policy] ) ) {
+                               throw new DomainException( 'Invalid password policy config' );
+                       }
+                       $status->merge(
+                               call_user_func(
+                                       $this->policyCheckFunctions[$policy],
+                                       $value,
+                                       $user,
+                                       $password
+                               )
+                       );
+               }
+
+               return $status;
+       }
+
+       /**
+        * Get the policy for a user, based on their group membership. Public so
+        * UI elements can access and inform the user.
+        * @param User $user
+        * @return array the effective policy for $user
+        */
+       public function getPoliciesForUser( User $user ) {
+               $effectivePolicy = self::getPoliciesForGroups(
+                       $this->policies,
+                       $user->getEffectiveGroups(),
+                       $this->policies['default']
+               );
+
+               Hooks::run( 'PasswordPoliciesForUser', array( $user, &$effectivePolicy ) );
+
+               return $effectivePolicy;
+       }
+
+       /**
+        * Utility function to get the effective policy from a list of policies, based
+        * on a list of groups.
+        * @param array $policies list of policies to consider
+        * @param array $userGroups the groups from which we calculate the effective policy
+        * @param array $defaultPolicy the default policy to start from
+        * @return array effective policy
+        */
+       public static function getPoliciesForGroups( array $policies, array $userGroups,
+               array $defaultPolicy
+       ) {
+               $effectivePolicy = $defaultPolicy;
+               foreach ( $policies as $group => $policy ) {
+                       if ( in_array( $group, $userGroups ) ) {
+                               $effectivePolicy = self::maxOfPolicies(
+                                       $effectivePolicy,
+                                       $policies[$group]
+                               );
+                       }
+               }
+
+               return $effectivePolicy;
+       }
+
+       /**
+        * Utility function to get a policy that is the most restrictive of $p1 and $p2. For
+        * simplicity, we setup the policy values so the maximum value is always more restrictive.
+        * @param array $p1
+        * @param array $p2
+        * @return array containing the more restrictive values of $p1 and $p2
+        */
+       public static function maxOfPolicies( array $p1, array $p2 ) {
+               $ret = array();
+               $keys = array_merge( array_keys( $p1 ), array_keys( $p2 ) );
+               foreach ( $keys as $key ) {
+                       if ( !isset( $p1[$key] ) ) {
+                               $ret[$key] = $p2[$key];
+                       } elseif ( !isset( $p2[$key] ) ) {
+                               $ret[$key] = $p1[$key];
+                       } else {
+                               $ret[$key] = max( $p1[$key], $p2[$key] );
+                       }
+               }
+               return $ret;
+       }
+
+}
index 5692d73..1ec14aa 100644 (file)
@@ -192,10 +192,11 @@ abstract class PoolCounter {
        }
 
        /**
-        * Given a key (any string) and the number of lots, returns a slot number (an integer from the [0..($slots-1)] range).
-        * This is used for a global limit on the number of instances  of a given type that can acquire a lock.
-        * The hashing is deterministic so that PoolCounter::$workers is always an upper limit of how many instances with
-        * the same key can acquire a lock.
+        * Given a key (any string) and the number of lots, returns a slot number (an integer from
+        * the [0..($slots-1)] range). This is used for a global limit on the number of instances of
+        * a given type that can acquire a lock. The hashing is deterministic so that
+        * PoolCounter::$workers is always an upper limit of how many instances with the same key
+        * can acquire a lock.
         *
         * @param string $key PoolCounter instance key (any string)
         * @param int $slots The number of slots (max allowed value is 65536)
index 9062251..d787edb 100644 (file)
@@ -39,5 +39,6 @@ class ProfileSection {
         *
         * @param string $name Name of the function to profile
         */
-       public function __construct( $name ) {}
+       public function __construct( $name ) {
+       }
 }
index 9983fec..9fd5a36 100644 (file)
@@ -145,8 +145,11 @@ abstract class Profiler {
        }
 
        // Kept BC for now, remove when possible
-       public function profileIn( $functionname ) {}
-       public function profileOut( $functionname ) {}
+       public function profileIn( $functionname ) {
+       }
+
+       public function profileOut( $functionname ) {
+       }
 
        /**
         * Mark the start of a custom profiling frame (e.g. DB queries).
@@ -294,9 +297,9 @@ abstract class Profiler {
         * @return array List of method entries arrays, each having:
         *   - name     : method name
         *   - calls    : the number of invoking calls
-        *   - real     : real time ellapsed (ms)
+        *   - real     : real time elapsed (ms)
         *   - %real    : percent real time
-        *   - cpu      : CPU time ellapsed (ms)
+        *   - cpu      : CPU time elapsed (ms)
         *   - %cpu     : percent CPU time
         *   - memory   : memory used (bytes)
         *   - %memory  : percent memory used
index 4984e77..6c58453 100644 (file)
@@ -32,7 +32,7 @@
 function wfGetRusage() {
        if ( !function_exists( 'getrusage' ) ) {
                return false;
-       } elseif ( defined ( 'HHVM_VERSION' ) ) {
+       } elseif ( defined( 'HHVM_VERSION' ) ) {
                return getrusage( 2 /* RUSAGE_THREAD */ );
        } else {
                return getrusage( 0 /* RUSAGE_SELF */ );
index bab8eba..63940bc 100644 (file)
@@ -89,9 +89,9 @@ class SectionProfiler {
         * @return array List of method entries arrays, each having:
         *   - name    : method name
         *   - calls   : the number of invoking calls
-        *   - real    : real time ellapsed (ms)
+        *   - real    : real time elapsed (ms)
         *   - %real   : percent real time
-        *   - cpu     : real time ellapsed (ms)
+        *   - cpu     : real time elapsed (ms)
         *   - %cpu    : percent real time
         *   - memory  : memory used (bytes)
         *   - %memory : percent memory used
index bf4b85c..09f5688 100644 (file)
@@ -45,7 +45,11 @@ class ProfilerOutputDump extends ProfilerOutput {
 
        public function log( array $stats ) {
                $data = $this->collector->getRawData();
-               $filename = sprintf( "%s/%s.%s%s", $this->params['outputDir'], uniqid(), $this->collector->getProfileID(), $this->suffix );
+               $filename = sprintf( "%s/%s.%s%s",
+                       $this->params['outputDir'],
+                       uniqid(),
+                       $this->collector->getProfileID(),
+                       $this->suffix );
                file_put_contents( $filename, serialize( $data ) );
        }
 }
index 6752779..dc24f18 100644 (file)
@@ -35,7 +35,7 @@ class ProfilerOutputText extends ProfilerOutput {
                parent::__construct( $collector, $params );
                $this->thresholdMs = isset( $params['thresholdMs'] )
                        ? $params['thresholdMs']
-                       : .25;
+                       : 1.0;
        }
        public function log( array $stats ) {
                if ( $this->collector->getTemplated() ) {
index 7da03c1..a562677 100644 (file)
@@ -23,7 +23,7 @@
 
 /**
  * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (see http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
+ * (see https://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
  *
  * @ingroup Profiler
  * @since 1.25
index 519606c..f524361 100644 (file)
@@ -90,9 +90,7 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
                                $packet['log_type'] = $rc->getAttribute( 'rc_log_type' );
                                $packet['log_action'] = $rc->getAttribute( 'rc_log_action' );
                                if ( $rc->getAttribute( 'rc_params' ) ) {
-                                       wfSuppressWarnings();
-                                       $params = unserialize( $rc->getAttribute( 'rc_params' ) );
-                                       wfRestoreWarnings();
+                                       $params = $rc->parseParams();
                                        if (
                                                // If it's an actual serialised false...
                                                $rc->getAttribute( 'rc_params' ) == serialize( false ) ||
index 0a09ff5..273e9ef 100644 (file)
@@ -290,10 +290,14 @@ class ExtensionProcessor implements Processor {
 
        /**
         * @param string $name
-        * @param mixed $value
+        * @param array $value
         * @param array &$array
+        * @throws InvalidArgumentException
         */
        protected function storeToArray( $name, $value, &$array ) {
+               if ( !is_array( $value ) ) {
+                       throw new InvalidArgumentException( "The value for '$name' should be an array" );
+               }
                if ( isset( $array[$name] ) ) {
                        $array[$name] = array_merge_recursive( $array[$name], $value );
                } else {
index d767870..d48a1bd 100644 (file)
@@ -137,7 +137,7 @@ class ExtensionRegistry {
                        if ( !is_array( $info ) ) {
                                throw new Exception( "$path is not a valid JSON file." );
                        }
-                       if ( !isset( $info['manifest_version' ] ) ) {
+                       if ( !isset( $info['manifest_version'] ) ) {
                                // For backwards-compatability, assume a version of 1
                                $info['manifest_version'] = 1;
                        }
index 5784f2a..5967537 100644 (file)
  * @since 1.24
  */
 class DerivativeResourceLoaderContext extends ResourceLoaderContext {
+       const INHERIT_VALUE = -1;
 
        /**
         * @var ResourceLoaderContext
         */
        private $context;
-       protected $modules;
-       protected $language;
-       protected $direction;
-       protected $skin;
-       protected $user;
-       protected $debug;
-       protected $only;
-       protected $version;
-       protected $hash;
-       protected $raw;
+
+       protected $modules = self::INHERIT_VALUE;
+       protected $language = self::INHERIT_VALUE;
+       protected $direction = self::INHERIT_VALUE;
+       protected $skin = self::INHERIT_VALUE;
+       protected $user = self::INHERIT_VALUE;
+       protected $debug = self::INHERIT_VALUE;
+       protected $only = self::INHERIT_VALUE;
+       protected $version = self::INHERIT_VALUE;
+       protected $raw = self::INHERIT_VALUE;
 
        public function __construct( ResourceLoaderContext $context ) {
                $this->context = $context;
        }
 
        public function getModules() {
-               if ( !is_null( $this->modules ) ) {
-                       return $this->modules;
-               } else {
+               if ( $this->modules === self::INHERIT_VALUE ) {
                        return $this->context->getModules();
                }
+               return $this->modules;
        }
 
        /**
@@ -64,11 +64,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getLanguage() {
-               if ( !is_null( $this->language ) ) {
-                       return $this->language;
-               } else {
+               if ( $this->language === self::INHERIT_VALUE ) {
                        return $this->context->getLanguage();
                }
+               return $this->language;
        }
 
        /**
@@ -76,16 +75,19 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
         */
        public function setLanguage( $language ) {
                $this->language = $language;
-               $this->direction = null; // Invalidate direction since it might be based on language
+               // Invalidate direction since it is based on language
+               $this->direction = null;
                $this->hash = null;
        }
 
        public function getDirection() {
-               if ( !is_null( $this->direction ) ) {
-                       return $this->direction;
-               } else {
+               if ( $this->direction === self::INHERIT_VALUE ) {
                        return $this->context->getDirection();
                }
+               if ( $this->direction === null ) {
+                       $this->direction = Language::factory( $this->getLanguage() )->getDir();
+               }
+               return $this->direction;
        }
 
        /**
@@ -97,11 +99,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getSkin() {
-               if ( !is_null( $this->skin ) ) {
-                       return $this->skin;
-               } else {
+               if ( $this->skin === self::INHERIT_VALUE ) {
                        return $this->context->getSkin();
                }
+               return $this->skin;
        }
 
        /**
@@ -113,11 +114,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getUser() {
-               if ( !is_null( $this->user ) ) {
-                       return $this->user;
-               } else {
+               if ( $this->user === self::INHERIT_VALUE ) {
                        return $this->context->getUser();
                }
+               return $this->user;
        }
 
        /**
@@ -130,11 +130,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getDebug() {
-               if ( !is_null( $this->debug ) ) {
-                       return $this->debug;
-               } else {
+               if ( $this->debug === self::INHERIT_VALUE ) {
                        return $this->context->getDebug();
                }
+               return $this->debug;
        }
 
        /**
@@ -146,15 +145,14 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getOnly() {
-               if ( !is_null( $this->only ) ) {
-                       return $this->only;
-               } else {
+               if ( $this->only === self::INHERIT_VALUE ) {
                        return $this->context->getOnly();
                }
+               return $this->only;
        }
 
        /**
-        * @param string $only
+        * @param string|null $only
         */
        public function setOnly( $only ) {
                $this->only = $only;
@@ -162,15 +160,14 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getVersion() {
-               if ( !is_null( $this->version ) ) {
-                       return $this->version;
-               } else {
+               if ( $this->version === self::INHERIT_VALUE ) {
                        return $this->context->getVersion();
                }
+               return $this->version;
        }
 
        /**
-        * @param string $version
+        * @param string|null $version
         */
        public function setVersion( $version ) {
                $this->version = $version;
@@ -178,11 +175,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getRaw() {
-               if ( !is_null( $this->raw ) ) {
-                       return $this->raw;
-               } else {
+               if ( $this->raw === self::INHERIT_VALUE ) {
                        return $this->context->getRaw();
                }
+               return $this->raw;
        }
 
        /**
index 5bc9dc3..e6cb5eb 100644 (file)
  * @author Trevor Parscal
  */
 
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
 /**
  * Dynamic JavaScript and CSS resource loading system.
  *
  * Most of the documentation is on the MediaWiki documentation wiki starting at:
  *    https://www.mediawiki.org/wiki/ResourceLoader
  */
-class ResourceLoader {
+class ResourceLoader implements LoggerAwareInterface {
        /** @var int */
        protected static $filterCacheVersion = 7;
 
@@ -77,6 +81,11 @@ class ResourceLoader {
         */
        protected $blobStore;
 
+       /**
+        * @var LoggerInterface
+        */
+       private $logger;
+
        /**
         * Load information stored in the database about modules.
         *
@@ -188,14 +197,16 @@ class ResourceLoader {
                }
 
                if ( !in_array( $filter, array( 'minify-js', 'minify-css' ) ) ) {
-                       wfDebugLog( 'resourceloader', __METHOD__ . ": Invalid filter: $filter" );
+                       $this->logger->warning( 'Invalid filter {filter}', array(
+                               'filter' => $filter
+                       ) );
                        return $data;
                }
 
                if ( !$options['cache'] ) {
                        $result = $this->applyFilter( $filter, $data );
                } else {
-                       $key = wfMemcKey( 'resourceloader', 'filter', $filter, self::$filterCacheVersion, md5( $data ) );
+                       $key = wfGlobalCacheKey( 'resourceloader', 'filter', $filter, self::$filterCacheVersion, md5( $data ) );
                        $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
                        $cacheEntry = $cache->get( $key );
                        if ( is_string( $cacheEntry ) ) {
@@ -204,15 +215,22 @@ class ResourceLoader {
                        }
                        $result = '';
                        try {
-                               wfIncrStats( "resourceloader_cache.$filter.miss" );
+                               $stats = RequestContext::getMain()->getStats();
+                               $statStart = microtime( true );
+
                                $result = $this->applyFilter( $filter, $data );
+
+                               $stats->timing( "resourceloader_cache.$filter.miss", microtime( true ) - $statStart );
                                if ( $options['cacheReport'] ) {
                                        $result .= "\n/* cache key: $key */";
                                }
-                               $cache->set( $key, $result );
+                               // Set a TTL since HHVM's APC doesn't have any limitation or eviction logic.
+                               $cache->set( $key, $result, 24 * 3600 );
                        } catch ( Exception $e ) {
                                MWExceptionHandler::logException( $e );
-                               wfDebugLog( 'resourceloader', __METHOD__ . ": minification failed: $e" );
+                               $this->logger->warning( 'Minification failed: {exception}', array(
+                                       'exception' => $e
+                               ) );
                                $this->errors[] = self::formatExceptionNoComment( $e );
                        }
                }
@@ -221,16 +239,17 @@ class ResourceLoader {
        }
 
        private function applyFilter( $filter, $data ) {
-                       switch ( $filter ) {
-                               case 'minify-js':
-                                       return JavaScriptMinifier::minify( $data,
-                                               $this->config->get( 'ResourceLoaderMinifierStatementsOnOwnLine' ),
-                                               $this->config->get( 'ResourceLoaderMinifierMaxLineLength' )
-                                       );
-                               case 'minify-css':
-                                       return CSSMin::minify( $data );
-                       }
-                       return $data;
+               switch ( $filter ) {
+                       case 'minify-js':
+                               return JavaScriptMinifier::minify( $data,
+                                       $this->config->get( 'ResourceLoaderMinifierStatementsOnOwnLine' ),
+                                       $this->config->get( 'ResourceLoaderMinifierMaxLineLength' )
+                               );
+                       case 'minify-css':
+                               return CSSMin::minify( $data );
+               }
+
+               return $data;
        }
 
        /* Methods */
@@ -239,14 +258,18 @@ class ResourceLoader {
         * Register core modules and runs registration hooks.
         * @param Config|null $config
         */
-       public function __construct( Config $config = null ) {
+       public function __construct( Config $config = null, LoggerInterface $logger = null ) {
                global $IP;
 
-               if ( $config === null ) {
-                       wfDebug( __METHOD__ . ' was called without providing a Config instance' );
-                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               if ( !$logger ) {
+                       $logger = new NullLogger();
                }
+               $this->setLogger( $logger );
 
+               if ( !$config ) {
+                       $this->logger->debug( __METHOD__ . ' was called without providing a Config instance' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
                $this->config = $config;
 
                // Add 'local' source first
@@ -276,9 +299,21 @@ class ResourceLoader {
                return $this->config;
        }
 
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
+       /**
+        * @since 1.26
+        * @return MessageBlobStore
+        */
+       public function getMessageBlobStore() {
+               return $this->blobStore;
+       }
+
        /**
-        * @param MessageBlobStore $blobStore
         * @since 1.25
+        * @param MessageBlobStore $blobStore
         */
        public function setMessageBlobStore( MessageBlobStore $blobStore ) {
                $this->blobStore = $blobStore;
@@ -633,7 +668,7 @@ class ResourceLoader {
                                // Do not allow private modules to be loaded from the web.
                                // This is a security issue, see bug 34907.
                                if ( $module->getGroup() === 'private' ) {
-                                       wfDebugLog( 'resourceloader', __METHOD__ . ": request for private module '$name' denied" );
+                                       $this->logger->debug( "Request for private module '$name' denied" );
                                        $this->errors[] = "Cannot show private module \"$name\"";
                                        continue;
                                }
@@ -648,7 +683,9 @@ class ResourceLoader {
                        $this->preloadModuleInfo( array_keys( $modules ), $context );
                } catch ( Exception $e ) {
                        MWExceptionHandler::logException( $e );
-                       wfDebugLog( 'resourceloader', __METHOD__ . ": preloading module info failed: $e" );
+                       $this->logger->warning( 'Preloading module info failed: {exception}', array(
+                               'exception' => $e
+                       ) );
                        $this->errors[] = self::formatExceptionNoComment( $e );
                }
 
@@ -658,7 +695,9 @@ class ResourceLoader {
                        $versionHash = $this->getCombinedVersion( $context, array_keys( $modules ) );
                } catch ( Exception $e ) {
                        MWExceptionHandler::logException( $e );
-                       wfDebugLog( 'resourceloader', __METHOD__ . ": calculating version hash failed: $e" );
+                       $this->logger->warning( 'Calculating version hash failed: {exception}', array(
+                               'exception' => $e
+                       ) );
                        $this->errors[] = self::formatExceptionNoComment( $e );
                }
 
@@ -804,8 +843,7 @@ class ResourceLoader {
                        // sending the 304.
                        wfResetOutputBuffers( /* $resetGzipEncoding = */ true );
 
-                       header( 'HTTP/1.0 304 Not Modified' );
-                       header( 'Status: 304 Not Modified' );
+                       HttpStatus::header( 304 );
 
                        $this->sendResponseHeaders( $context, $etag, false );
                        return true;
@@ -938,17 +976,14 @@ MESSAGE;
                // Pre-fetch blobs
                if ( $context->shouldIncludeMessages() ) {
                        try {
-                               $blobs = $this->blobStore->get( $this, $modules, $context->getLanguage() );
+                               $this->blobStore->get( $this, $modules, $context->getLanguage() );
                        } catch ( Exception $e ) {
                                MWExceptionHandler::logException( $e );
-                               wfDebugLog(
-                                       'resourceloader',
-                                       __METHOD__ . ": pre-fetching blobs from MessageBlobStore failed: $e"
-                               );
+                               $this->logger->warning( 'Prefetching MessageBlobStore failed: {exception}', array(
+                                       'exception' => $e
+                               ) );
                                $this->errors[] = self::formatExceptionNoComment( $e );
                        }
-               } else {
-                       $blobs = array();
                }
 
                foreach ( $missing as $name ) {
@@ -958,79 +993,13 @@ MESSAGE;
                // Generate output
                $isRaw = false;
                foreach ( $modules as $name => $module ) {
-                       /**
-                        * @var $module ResourceLoaderModule
-                        */
-
                        try {
-                               $scripts = '';
-                               if ( $context->shouldIncludeScripts() ) {
-                                       // If we are in debug mode, we'll want to return an array of URLs if possible
-                                       // However, we can't do this if the module doesn't support it
-                                       // We also can't do this if there is an only= parameter, because we have to give
-                                       // the module a way to return a load.php URL without causing an infinite loop
-                                       if ( $context->getDebug() && !$context->getOnly() && $module->supportsURLLoading() ) {
-                                               $scripts = $module->getScriptURLsForDebug( $context );
-                                       } else {
-                                               $scripts = $module->getScript( $context );
-                                               // rtrim() because there are usually a few line breaks
-                                               // after the last ';'. A new line at EOF, a new line
-                                               // added by ResourceLoaderFileModule::readScriptFiles, etc.
-                                               if ( is_string( $scripts )
-                                                       && strlen( $scripts )
-                                                       && substr( rtrim( $scripts ), -1 ) !== ';'
-                                               ) {
-                                                       // Append semicolon to prevent weird bugs caused by files not
-                                                       // terminating their statements right (bug 27054)
-                                                       $scripts .= ";\n";
-                                               }
-                                       }
-                               }
-                               // Styles
-                               $styles = array();
-                               if ( $context->shouldIncludeStyles() ) {
-                                       // Don't create empty stylesheets like array( '' => '' ) for modules
-                                       // that don't *have* any stylesheets (bug 38024).
-                                       $stylePairs = $module->getStyles( $context );
-                                       if ( count( $stylePairs ) ) {
-                                               // If we are in debug mode without &only= set, we'll want to return an array of URLs
-                                               // See comment near shouldIncludeScripts() for more details
-                                               if ( $context->getDebug() && !$context->getOnly() && $module->supportsURLLoading() ) {
-                                                       $styles = array(
-                                                               'url' => $module->getStyleURLsForDebug( $context )
-                                                       );
-                                               } else {
-                                                       // Minify CSS before embedding in mw.loader.implement call
-                                                       // (unless in debug mode)
-                                                       if ( !$context->getDebug() ) {
-                                                               foreach ( $stylePairs as $media => $style ) {
-                                                                       // Can be either a string or an array of strings.
-                                                                       if ( is_array( $style ) ) {
-                                                                               $stylePairs[$media] = array();
-                                                                               foreach ( $style as $cssText ) {
-                                                                                       if ( is_string( $cssText ) ) {
-                                                                                               $stylePairs[$media][] = $this->filter( 'minify-css', $cssText );
-                                                                                       }
-                                                                               }
-                                                                       } elseif ( is_string( $style ) ) {
-                                                                               $stylePairs[$media] = $this->filter( 'minify-css', $style );
-                                                                       }
-                                                               }
-                                                       }
-                                                       // Wrap styles into @media groups as needed and flatten into a numerical array
-                                                       $styles = array(
-                                                               'css' => self::makeCombinedStyles( $stylePairs )
-                                                       );
-                                               }
-                                       }
-                               }
-
-                               // Messages
-                               $messagesBlob = isset( $blobs[$name] ) ? $blobs[$name] : '{}';
+                               $content = $module->getModuleContent( $context );
 
                                // Append output
                                switch ( $context->getOnly() ) {
                                        case 'scripts':
+                                               $scripts = $content['scripts'];
                                                if ( is_string( $scripts ) ) {
                                                        // Load scripts raw...
                                                        $out .= $scripts;
@@ -1040,6 +1009,7 @@ MESSAGE;
                                                }
                                                break;
                                        case 'styles':
+                                               $styles = $content['styles'];
                                                // We no longer seperate into media, they are all combined now with
                                                // custom media type groups into @media .. {} sections as part of the css string.
                                                // Module returns either an empty array or a numerical array with css strings.
@@ -1048,16 +1018,18 @@ MESSAGE;
                                        default:
                                                $out .= self::makeLoaderImplementScript(
                                                        $name,
-                                                       $scripts,
-                                                       $styles,
-                                                       new XmlJsCode( $messagesBlob ),
-                                                       $module->getTemplates()
+                                                       isset( $content['scripts'] ) ? $content['scripts'] : '',
+                                                       isset( $content['styles'] ) ? $content['styles'] : array(),
+                                                       isset( $content['messagesBlob'] ) ? new XmlJsCode( $content['messagesBlob'] ) : array(),
+                                                       isset( $content['templates'] ) ? $content['templates'] : array()
                                                );
                                                break;
                                }
                        } catch ( Exception $e ) {
                                MWExceptionHandler::logException( $e );
-                               wfDebugLog( 'resourceloader', __METHOD__ . ": generating module package failed: $e" );
+                               $this->logger->warning( 'Generating module package failed: {exception}', array(
+                                       'exception' => $e
+                               ) );
                                $this->errors[] = self::formatExceptionNoComment( $e );
 
                                // Respond to client with error-state instead of module implementation
@@ -1138,9 +1110,9 @@ MESSAGE;
                $module = array(
                        $name,
                        $scripts,
-                       (object) $styles,
-                       (object) $messages,
-                       (object) $templates,
+                       (object)$styles,
+                       (object)$messages,
+                       (object)$templates,
                );
                self::trimArray( $module );
 
index 66b4ee2..2e1752a 100644 (file)
@@ -22,6 +22,8 @@
  * @author Roan Kattouw
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Object passed around to modules which contains information about the state
  * of a specific loader request
@@ -57,24 +59,26 @@ class ResourceLoaderContext {
                $this->resourceLoader = $resourceLoader;
                $this->request = $request;
 
-               // Interpret request
                // List of modules
                $modules = $request->getVal( 'modules' );
                $this->modules = $modules ? self::expandModuleNames( $modules ) : array();
+
                // Various parameters
-               $this->skin = $request->getVal( 'skin' );
                $this->user = $request->getVal( 'user' );
                $this->debug = $request->getFuzzyBool(
-                       'debug', $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
+                       'debug',
+                       $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
                );
-               $this->only = $request->getVal( 'only' );
-               $this->version = $request->getVal( 'version' );
+               $this->only = $request->getVal( 'only', null );
+               $this->version = $request->getVal( 'version', null );
                $this->raw = $request->getFuzzyBool( 'raw' );
+
                // Image requests
                $this->image = $request->getVal( 'image' );
                $this->variant = $request->getVal( 'variant' );
                $this->format = $request->getVal( 'format' );
 
+               $this->skin = $request->getVal( 'skin' );
                $skinnames = Skin::getSkinNames();
                // If no skin is specified, or we don't recognize the skin, use the default skin
                if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
@@ -123,7 +127,8 @@ class ResourceLoaderContext {
         */
        public static function newDummyContext() {
                return new self( new ResourceLoader(
-                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' ),
+                       LoggerFactory::getInstance( 'resourceloader' )
                ), new FauxRequest( array() ) );
        }
 
@@ -154,7 +159,7 @@ class ResourceLoaderContext {
        public function getLanguage() {
                if ( $this->language === null ) {
                        // Must be a valid language code after this point (bug 62849)
-                       $this->language = RequestContext::sanitizeLangCode( $this->request->getVal( 'lang' ) );
+                       $this->language = RequestContext::sanitizeLangCode( $this->getRequest()->getVal( 'lang' ) );
                }
                return $this->language;
        }
@@ -164,7 +169,7 @@ class ResourceLoaderContext {
         */
        public function getDirection() {
                if ( $this->direction === null ) {
-                       $this->direction = $this->request->getVal( 'dir' );
+                       $this->direction = $this->getRequest()->getVal( 'dir' );
                        if ( !$this->direction ) {
                                // Determine directionality based on user language (bug 6100)
                                $this->direction = Language::factory( $this->getLanguage() )->getDir();
@@ -174,7 +179,7 @@ class ResourceLoaderContext {
        }
 
        /**
-        * @return string|null
+        * @return string
         */
        public function getSkin() {
                return $this->skin;
@@ -287,7 +292,7 @@ class ResourceLoaderContext {
                                return $this->imageObj;
                        }
 
-                       $image = $module->getImage( $this->image );
+                       $image = $module->getImage( $this->image, $this );
                        if ( !$image ) {
                                return $this->imageObj;
                        }
@@ -302,21 +307,21 @@ class ResourceLoaderContext {
         * @return bool
         */
        public function shouldIncludeScripts() {
-               return is_null( $this->getOnly() ) || $this->getOnly() === 'scripts';
+               return $this->getOnly() === null || $this->getOnly() === 'scripts';
        }
 
        /**
         * @return bool
         */
        public function shouldIncludeStyles() {
-               return is_null( $this->getOnly() ) || $this->getOnly() === 'styles';
+               return $this->getOnly() === null || $this->getOnly() === 'styles';
        }
 
        /**
         * @return bool
         */
        public function shouldIncludeMessages() {
-               return is_null( $this->getOnly() );
+               return $this->getOnly() === null;
        }
 
        /**
index d0273c2..f3fae0e 100644 (file)
@@ -65,15 +65,10 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return array
+        * @return bool
         */
-       public function getDefinitionSummary( ResourceLoaderContext $context ) {
-               $summary = parent::getDefinitionSummary( $context );
-               $summary[] = array(
-                       'lessVars' => $this->getLessVars( $context ),
-               );
-               return $summary;
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 0ee2e7d..b734def 100644 (file)
@@ -478,10 +478,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
        /**
         * Gets list of names of modules this module depends on.
-        *
+        * @param ResourceLoaderContext context
         * @return array List of module names
         */
-       public function getDependencies() {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                return $this->dependencies;
        }
 
@@ -513,6 +513,18 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->raw;
        }
 
+       /**
+        * Disable module content versioning.
+        *
+        * This class uses getDefinitionSummary() instead, to avoid filesystem overhead
+        * involved with building the full module content inside a startup request.
+        *
+        * @return bool
+        */
+       public function enableModuleContentVersion() {
+               return false;
+       }
+
        /**
         * Helper method to gather file mtimes for getDefinitionSummary.
         *
index bf68fdd..2338c90 100644 (file)
@@ -54,15 +54,16 @@ class ResourceLoaderImage {
                $this->variants = $variants;
 
                // Expand shorthands:
-               // array( "en,de,fr" => "foo.svg" ) → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" )
+               // array( "en,de,fr" => "foo.svg" )
+               // → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" )
                if ( is_array( $this->descriptor ) && isset( $this->descriptor['lang'] ) ) {
                        foreach ( array_keys( $this->descriptor['lang'] ) as $langList ) {
                                if ( strpos( $langList, ',' ) !== false ) {
                                        $this->descriptor['lang'] += array_fill_keys(
                                                explode( ',', $langList ),
-                                               $this->descriptor['lang'][ $langList ]
+                                               $this->descriptor['lang'][$langList]
                                        );
-                                       unset( $this->descriptor['lang'][ $langList ] );
+                                       unset( $this->descriptor['lang'][$langList] );
                                }
                        }
                }
@@ -75,11 +76,15 @@ class ResourceLoaderImage {
                } );
                $extensions = array_unique( $extensions );
                if ( count( $extensions ) !== 1 ) {
-                       throw new InvalidArgumentException( "File type for different image files of '$name' not the same" );
+                       throw new InvalidArgumentException(
+                               "File type for different image files of '$name' not the same"
+                       );
                }
                $ext = $extensions[0];
                if ( !isset( self::$fileTypes[$ext] ) ) {
-                       throw new InvalidArgumentException( "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)" );
+                       throw new InvalidArgumentException(
+                               "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)"
+                       );
                }
                $this->extension = $ext;
        }
@@ -121,10 +126,10 @@ class ResourceLoaderImage {
                $desc = $this->descriptor;
                if ( is_string( $desc ) ) {
                        return $this->basePath . '/' . $desc;
-               } elseif ( isset( $desc['lang'][ $context->getLanguage() ] ) ) {
-                       return $this->basePath . '/' . $desc['lang'][ $context->getLanguage() ];
-               } elseif ( isset( $desc[ $context->getDirection() ] ) ) {
-                       return $this->basePath . '/' . $desc[ $context->getDirection() ];
+               } elseif ( isset( $desc['lang'][$context->getLanguage()] ) ) {
+                       return $this->basePath . '/' . $desc['lang'][$context->getLanguage()];
+               } elseif ( isset( $desc[$context->getDirection()] ) ) {
+                       return $this->basePath . '/' . $desc[$context->getDirection()];
                } else {
                        return $this->basePath . '/' . $desc['default'];
                }
index eb06a69..8de87f2 100644 (file)
@@ -86,9 +86,11 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         *         // List of image files and their options
         *         'images' => array(
         *             [theme name] => array(
-        *                 [file path string],
-        *                 [file path string] => array(
-        *                     'name' => [image name string, defaults to file name],
+        *                 [icon name] => array(
+        *                     'file' => [file path string or array whose values are file path strings
+        *                                    and whose keys are 'default', 'ltr', 'rtl', a single
+        *                                    language code like 'en', or a list of language codes like
+        *                                    'en,de,ar'],
         *                     'variants' => [array of variant name strings, variants
         *                                    available for this image],
         *                 ),
@@ -132,20 +134,30 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
 
                $prefix = isset( $options['prefix'] ) && $options['prefix'];
                $selector = isset( $options['selector'] ) && $options['selector'];
-               $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] ) && $options['selectorWithoutVariant'];
-               $selectorWithVariant = isset( $options['selectorWithVariant'] ) && $options['selectorWithVariant'];
+               $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] )
+                       && $options['selectorWithoutVariant'];
+               $selectorWithVariant = isset( $options['selectorWithVariant'] )
+                       && $options['selectorWithVariant'];
 
                if ( $selectorWithoutVariant && !$selectorWithVariant ) {
-                       throw new InvalidArgumentException( "Given 'selectorWithoutVariant' but no 'selectorWithVariant'." );
+                       throw new InvalidArgumentException(
+                               "Given 'selectorWithoutVariant' but no 'selectorWithVariant'."
+                       );
                }
                if ( $selectorWithVariant && !$selectorWithoutVariant ) {
-                       throw new InvalidArgumentException( "Given 'selectorWithVariant' but no 'selectorWithoutVariant'." );
+                       throw new InvalidArgumentException(
+                               "Given 'selectorWithVariant' but no 'selectorWithoutVariant'."
+                       );
                }
                if ( $selector && $selectorWithVariant ) {
-                       throw new InvalidArgumentException( "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given." );
+                       throw new InvalidArgumentException(
+                               "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given."
+                       );
                }
                if ( !$prefix && !$selector && !$selectorWithVariant ) {
-                       throw new InvalidArgumentException( "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given." );
+                       throw new InvalidArgumentException(
+                               "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given."
+                       );
                }
 
                foreach ( $options as $member => $option ) {
@@ -209,6 +221,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
        /**
         * Get a ResourceLoaderImage object for given image.
         * @param string $name Image name
+        * @param ResourceLoaderContext $context
         * @return ResourceLoaderImage|null
         */
        public function getImage( $name, ResourceLoaderContext $context ) {
@@ -219,6 +232,7 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
 
        /**
         * Get ResourceLoaderImage objects for all images.
+        * @param ResourceLoaderContext $context
         * @return ResourceLoaderImage[] Array keyed by image name
         */
        public function getImages( ResourceLoaderContext $context ) {
@@ -227,23 +241,23 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                        $this->loadFromDefinition();
                        $this->imageObjects = array();
                }
-               if ( !isset( $this->imageObjects[ $skin ] ) ) {
-                       $this->imageObjects[ $skin ] = array();
-                       if ( !isset( $this->images[ $skin ] ) ) {
-                               $this->images[ $skin ] = isset( $this->images[ 'default' ] ) ?
-                                       $this->images[ 'default' ] :
+               if ( !isset( $this->imageObjects[$skin] ) ) {
+                       $this->imageObjects[$skin] = array();
+                       if ( !isset( $this->images[$skin] ) ) {
+                               $this->images[$skin] = isset( $this->images['default'] ) ?
+                                       $this->images['default'] :
                                        array();
                        }
-                       foreach ( $this->images[ $skin ] as $name => $options ) {
+                       foreach ( $this->images[$skin] as $name => $options ) {
                                $fileDescriptor = is_string( $options ) ? $options : $options['file'];
 
                                $allowedVariants = array_merge(
                                        is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array(),
                                        $this->getGlobalVariants( $context )
                                );
-                               if ( isset( $this->variants[ $skin ] ) ) {
+                               if ( isset( $this->variants[$skin] ) ) {
                                        $variantConfig = array_intersect_key(
-                                               $this->variants[ $skin ],
+                                               $this->variants[$skin],
                                                array_fill_keys( $allowedVariants, true )
                                        );
                                } else {
@@ -257,16 +271,17 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                                        $this->localBasePath,
                                        $variantConfig
                                );
-                               $this->imageObjects[ $skin ][ $image->getName() ] = $image;
+                               $this->imageObjects[$skin][$image->getName()] = $image;
                        }
                }
 
-               return $this->imageObjects[ $skin ];
+               return $this->imageObjects[$skin];
        }
 
        /**
         * Get list of variants in this module that are 'global', i.e., available
         * for every image regardless of image options.
+        * @param ResourceLoaderContext $context
         * @return string[]
         */
        public function getGlobalVariants( ResourceLoaderContext $context ) {
@@ -275,21 +290,21 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                        $this->loadFromDefinition();
                        $this->globalVariants = array();
                }
-               if ( !isset( $this->globalVariants[ $skin ] ) ) {
-                       $this->globalVariants[ $skin ] = array();
-                       if ( !isset( $this->variants[ $skin ] ) ) {
-                               $this->variants[ $skin ] = isset( $this->variants[ 'default' ] ) ?
-                                       $this->variants[ 'default' ] :
+               if ( !isset( $this->globalVariants[$skin] ) ) {
+                       $this->globalVariants[$skin] = array();
+                       if ( !isset( $this->variants[$skin] ) ) {
+                               $this->variants[$skin] = isset( $this->variants['default'] ) ?
+                                       $this->variants['default'] :
                                        array();
                        }
-                       foreach ( $this->variants[ $skin ] as $name => $config ) {
+                       foreach ( $this->variants[$skin] as $name => $config ) {
                                if ( isset( $config['global'] ) && $config['global'] ) {
-                                       $this->globalVariants[ $skin ][] = $name;
+                                       $this->globalVariants[$skin][] = $name;
                                }
                        }
                }
 
-               return $this->globalVariants[ $skin ];
+               return $this->globalVariants[$skin];
        }
 
        /**
diff --git a/includes/resourceloader/ResourceLoaderJqueryMsgDataModule.php b/includes/resourceloader/ResourceLoaderJqueryMsgDataModule.php
deleted file mode 100644 (file)
index fda3faa..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Resource loader module for populating mediawiki.jqueryMsg data.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write 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 Brad Jorsch
- */
-
-/**
- * ResourceLoader module for populating mediawiki.jqueryMsg data.
- */
-class ResourceLoaderJqueryMsgDataModule extends ResourceLoaderModule {
-
-       protected $targets = array( 'desktop', 'mobile' );
-
-       /**
-        * @param ResourceLoaderContext $context
-        * @return string JavaScript code
-        */
-       public function getScript( ResourceLoaderContext $context ) {
-               $jsData = array();
-
-               $tagData = Sanitizer::getRecognizedTagData();
-               $jsData['allowedHtmlElements'] = array_merge(
-                       array_keys( $tagData['htmlpairs'] ),
-                       array_diff(
-                               array_keys( $tagData['htmlsingle'] ),
-                               array_keys( $tagData['htmlsingleonly'] )
-                       )
-               );
-
-               return "if ( !mw.jqueryMsg ) {\n" .
-                       "\tmw.jqueryMsg = {};\n" .
-                       "}\n" .
-                       "mw.jqueryMsg.data = " . Xml::encodeJsVar( $jsData ) . ";\n";
-       }
-
-       /**
-        * @param ResourceLoaderContext $context
-        * @return array|null
-        */
-       public function getDefinitionSummary( ResourceLoaderContext $context ) {
-               $ret = parent::getDefinitionSummary( $context );
-               $ret['hash'] = md5( $this->getScript( $context ) );
-               return $ret;
-       }
-}
diff --git a/includes/resourceloader/ResourceLoaderJqueryMsgModule.php b/includes/resourceloader/ResourceLoaderJqueryMsgModule.php
new file mode 100644 (file)
index 0000000..d159284
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * ResourceLoader module for mediawiki.jqueryMsg that provides generated data.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 Brad Jorsch
+ */
+
+/**
+ * ResourceLoader module for mediawiki.jqueryMsg and its generated data
+ */
+class ResourceLoaderJqueryMsgModule extends ResourceLoaderFileModule {
+
+       /**
+        * @param ResourceLoaderContext $context
+        * @return string JavaScript code
+        */
+       public function getScript( ResourceLoaderContext $context ) {
+               $fileScript = parent::getScript( $context );
+
+               $tagData = Sanitizer::getRecognizedTagData();
+               $parserDefaults = array();
+               $parserDefaults['allowedHtmlElements'] = array_merge(
+                       array_keys( $tagData['htmlpairs'] ),
+                       array_diff(
+                               array_keys( $tagData['htmlsingle'] ),
+                               array_keys( $tagData['htmlsingleonly'] )
+                       )
+               );
+
+               $dataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', array( $parserDefaults ) );
+
+               return $fileScript . $dataScript;
+       }
+
+       /**
+        * @return bool
+        */
+       public function enableModuleContentVersion() {
+               return true;
+       }
+}
index ebaf366..27c74d7 100644 (file)
@@ -63,17 +63,17 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( $this->getData( $context ) ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
+        * @param ResourceLoaderContext $context
         * @return array
         */
-       public function getDependencies() {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                return array( 'mediawiki.language.init' );
        }
 }
index 3111050..081c728 100644 (file)
@@ -32,7 +32,6 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule {
 
        protected $targets = array( 'desktop', 'mobile' );
 
-
        /**
         * @param ResourceLoaderContext $context
         * @return array
@@ -60,16 +59,19 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule {
                );
        }
 
-       public function getDependencies() {
+       /**
+        * @param ResourceLoaderContext $context
+        * @return array
+        */
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                return array( 'mediawiki.language.init' );
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( $this->getData( $context ) ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
 }
index 958990c..94edb36 100644 (file)
@@ -64,6 +64,8 @@ abstract class ResourceLoaderModule {
        protected $msgBlobMtime = array();
        // In-object cache for version hash
        protected $versionHash = array();
+       // In-object cache for module content
+       protected $contents = array();
 
        // Whether the position returned by getPosition() is defined in the module configuration
        // and not a default value
@@ -291,9 +293,9 @@ abstract class ResourceLoaderModule {
 
        /**
         * Whether the position returned by getPosition() is a default value or comes from the module
-        * definition. This method is meant to be short-lived, and is only useful until classes added via
-        * addModuleStyles with a default value define an explicit position. See getModuleStyles() in
-        * OutputPage for the related migration warning.
+        * definition. This method is meant to be short-lived, and is only useful until classes added
+        * via addModuleStyles with a default value define an explicit position. See getModuleStyles()
+        * in OutputPage for the related migration warning.
         *
         * @return bool
         * @since  1.26
@@ -331,9 +333,14 @@ abstract class ResourceLoaderModule {
         *
         * To add dependencies dynamically on the client side, use a custom
         * loader script, see getLoaderScript()
+        *
+        * Note: It is expected that $context will be made non-optional in the near
+        * future.
+        *
+        * @param ResourceLoaderContext $context
         * @return array List of module names as strings
         */
-       public function getDependencies() {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                // Stub, override expected
                return array();
        }
@@ -379,16 +386,21 @@ abstract class ResourceLoaderModule {
                }
 
                $dbr = wfGetDB( DB_SLAVE );
-               $deps = $dbr->selectField( 'module_deps', 'md_deps', array(
+               $deps = $dbr->selectField( 'module_deps',
+                       'md_deps',
+                       array(
                                'md_module' => $this->getName(),
                                'md_skin' => $skin,
-                       ), __METHOD__
+                       ),
+                       __METHOD__
                );
+
                if ( !is_null( $deps ) ) {
                        $this->fileDeps[$skin] = (array)FormatJson::decode( $deps, true );
                } else {
                        $this->fileDeps[$skin] = array();
                }
+
                return $this->fileDeps[$skin];
        }
 
@@ -414,10 +426,13 @@ abstract class ResourceLoaderModule {
                        }
 
                        $dbr = wfGetDB( DB_SLAVE );
-                       $msgBlobMtime = $dbr->selectField( 'msg_resource', 'mr_timestamp', array(
+                       $msgBlobMtime = $dbr->selectField( 'msg_resource',
+                               'mr_timestamp',
+                               array(
                                        'mr_resource' => $this->getName(),
                                        'mr_lang' => $lang
-                               ), __METHOD__
+                               ),
+                               __METHOD__
                        );
                        // If no blob was found, but the module does have messages, that means we need
                        // to regenerate it. Return NOW
@@ -439,6 +454,130 @@ abstract class ResourceLoaderModule {
                $this->msgBlobMtime[$lang] = $mtime;
        }
 
+       /**
+        * Get an array of this module's resources. Ready for serving to the web.
+        *
+        * @since 1.26
+        * @param ResourceLoaderContext $context
+        * @return array
+        */
+       public function getModuleContent( ResourceLoaderContext $context ) {
+               $contextHash = $context->getHash();
+               // Cache this expensive operation. This calls builds the scripts, styles, and messages
+               // content which typically involves filesystem and/or database access.
+               if ( !array_key_exists( $contextHash, $this->contents ) ) {
+                       $this->contents[$contextHash] = $this->buildContent( $context );
+               }
+               return $this->contents[$contextHash];
+       }
+
+       /**
+        * Bundle all resources attached to this module into an array.
+        *
+        * @since 1.26
+        * @param ResourceLoaderContext $context
+        * @return array
+        */
+       final protected function buildContent( ResourceLoaderContext $context ) {
+               $rl = $context->getResourceLoader();
+               $stats = RequestContext::getMain()->getStats();
+               $statStart = microtime( true );
+
+               // Only include properties that are relevant to this context (e.g. only=scripts)
+               // and that are non-empty (e.g. don't include "templates" for modules without
+               // templates). This helps prevent invalidating cache for all modules when new
+               // optional properties are introduced.
+               $content = array();
+
+               // Scripts
+               if ( $context->shouldIncludeScripts() ) {
+                       // If we are in debug mode, we'll want to return an array of URLs if possible
+                       // However, we can't do this if the module doesn't support it
+                       // We also can't do this if there is an only= parameter, because we have to give
+                       // the module a way to return a load.php URL without causing an infinite loop
+                       if ( $context->getDebug() && !$context->getOnly() && $this->supportsURLLoading() ) {
+                               $scripts = $this->getScriptURLsForDebug( $context );
+                       } else {
+                               $scripts = $this->getScript( $context );
+                               // rtrim() because there are usually a few line breaks
+                               // after the last ';'. A new line at EOF, a new line
+                               // added by ResourceLoaderFileModule::readScriptFiles, etc.
+                               if ( is_string( $scripts )
+                                       && strlen( $scripts )
+                                       && substr( rtrim( $scripts ), -1 ) !== ';'
+                               ) {
+                                       // Append semicolon to prevent weird bugs caused by files not
+                                       // terminating their statements right (bug 27054)
+                                       $scripts .= ";\n";
+                               }
+                       }
+                       $content['scripts'] = $scripts;
+               }
+
+               // Styles
+               if ( $context->shouldIncludeStyles() ) {
+                       $styles = array();
+                       // Don't create empty stylesheets like array( '' => '' ) for modules
+                       // that don't *have* any stylesheets (bug 38024).
+                       $stylePairs = $this->getStyles( $context );
+                       if ( count( $stylePairs ) ) {
+                               // If we are in debug mode without &only= set, we'll want to return an array of URLs
+                               // See comment near shouldIncludeScripts() for more details
+                               if ( $context->getDebug() && !$context->getOnly() && $this->supportsURLLoading() ) {
+                                       $styles = array(
+                                               'url' => $this->getStyleURLsForDebug( $context )
+                                       );
+                               } else {
+                                       // Minify CSS before embedding in mw.loader.implement call
+                                       // (unless in debug mode)
+                                       if ( !$context->getDebug() ) {
+                                               foreach ( $stylePairs as $media => $style ) {
+                                                       // Can be either a string or an array of strings.
+                                                       if ( is_array( $style ) ) {
+                                                               $stylePairs[$media] = array();
+                                                               foreach ( $style as $cssText ) {
+                                                                       if ( is_string( $cssText ) ) {
+                                                                               $stylePairs[$media][] =
+                                                                                       $rl->filter( 'minify-css', $cssText );
+                                                                       }
+                                                               }
+                                                       } elseif ( is_string( $style ) ) {
+                                                               $stylePairs[$media] = $rl->filter( 'minify-css', $style );
+                                                       }
+                                               }
+                                       }
+                                       // Wrap styles into @media groups as needed and flatten into a numerical array
+                                       $styles = array(
+                                               'css' => $rl->makeCombinedStyles( $stylePairs )
+                                       );
+                               }
+                       }
+                       $content['styles'] = $styles;
+               }
+
+               // Messages
+               $blobs = $rl->getMessageBlobStore()->get(
+                       $rl,
+                       array( $this->getName() => $this ),
+                       $context->getLanguage()
+               );
+               if ( isset( $blobs[$this->getName()] ) ) {
+                       $content['messagesBlob'] = $blobs[$this->getName()];
+               }
+
+               $templates = $this->getTemplates();
+               if ( $templates ) {
+                       $content['templates'] = $templates;
+               }
+
+               $statTiming = microtime( true ) - $statStart;
+               $statName = str_replace( '.', '_', $this->getName() );
+               $stats->timing( "resourceloader_build.all", $statTiming );
+               $stats->timing( "resourceloader_build.$statName", $statTiming );
+
+               return $content;
+       }
+
        /**
         * Get a string identifying the current version of this module in a given context.
         *
@@ -462,32 +601,61 @@ abstract class ResourceLoaderModule {
         * @return string Hash (should use ResourceLoader::makeHash)
         */
        public function getVersionHash( ResourceLoaderContext $context ) {
+               // The startup module produces a manifest with versions representing the entire module.
+               // Typically, the request for the startup module itself has only=scripts. That must apply
+               // only to the startup module content, and not to the module version computed here.
+               $context = new DerivativeResourceLoaderContext( $context );
+               $context->setModules( array() );
+               // Version hash must cover all resources, regardless of startup request itself.
+               $context->setOnly( null );
+               // Compute version hash based on content, not debug urls.
+               $context->setDebug( false );
+
                // Cache this somewhat expensive operation. Especially because some classes
                // (e.g. startup module) iterate more than once over all modules to get versions.
                $contextHash = $context->getHash();
                if ( !array_key_exists( $contextHash, $this->versionHash ) ) {
 
-                       $summary = $this->getDefinitionSummary( $context );
-                       if ( !isset( $summary['_cacheEpoch'] ) ) {
-                               throw new Exception( 'getDefinitionSummary must call parent method' );
-                       }
-                       $str = json_encode( $summary );
-
-                       $mtime = $this->getModifiedTime( $context );
-                       if ( $mtime !== null ) {
-                               // Support: MediaWiki 1.25 and earlier
-                               $str .= strval( $mtime );
+                       if ( $this->enableModuleContentVersion() ) {
+                               // Detect changes directly
+                               $str = json_encode( $this->getModuleContent( $context ) );
+                       } else {
+                               // Infer changes based on definition and other metrics
+                               $summary = $this->getDefinitionSummary( $context );
+                               if ( !isset( $summary['_cacheEpoch'] ) ) {
+                                       throw new LogicException( 'getDefinitionSummary must call parent method' );
+                               }
+                               $str = json_encode( $summary );
+
+                               $mtime = $this->getModifiedTime( $context );
+                               if ( $mtime !== null ) {
+                                       // Support: MediaWiki 1.25 and earlier
+                                       $str .= strval( $mtime );
+                               }
+
+                               $mhash = $this->getModifiedHash( $context );
+                               if ( $mhash !== null ) {
+                                       // Support: MediaWiki 1.25 and earlier
+                                       $str .= strval( $mhash );
+                               }
                        }
 
-                       $mhash = $this->getModifiedHash( $context );
-                       if ( $mhash !== null ) {
-                               // Support: MediaWiki 1.25 and earlier
-                               $str .= strval( $mhash );
-                       }
-
-                       $this->versionHash[ $contextHash ] = ResourceLoader::makeHash( $str );
+                       $this->versionHash[$contextHash] = ResourceLoader::makeHash( $str );
                }
-               return $this->versionHash[ $contextHash ];
+               return $this->versionHash[$contextHash];
+       }
+
+       /**
+        * Whether to generate version hash based on module content.
+        *
+        * If a module requires database or file system access to build the module
+        * content, consider disabling this in favour of manually tracking relevant
+        * aspects in getDefinitionSummary(). See getVersionHash() for how this is used.
+        *
+        * @return bool
+        */
+       public function enableModuleContentVersion() {
+               return false;
        }
 
        /**
@@ -625,8 +793,13 @@ abstract class ResourceLoaderModule {
        protected function validateScriptFile( $fileName, $contents ) {
                if ( $this->getConfig()->get( 'ResourceLoaderValidateJS' ) ) {
                        // Try for cache hit
-                       // Use CACHE_ANYTHING since filtering is very slow compared to DB queries
-                       $key = wfMemcKey( 'resourceloader', 'jsparse', self::$parseCacheVersion, md5( $contents ) );
+                       // Use CACHE_ANYTHING since parsing JS is much slower than a DB query
+                       $key = wfMemcKey(
+                               'resourceloader',
+                               'jsparse',
+                               self::$parseCacheVersion,
+                               md5( $contents )
+                       );
                        $cache = wfGetCache( CACHE_ANYTHING );
                        $cacheEntry = $cache->get( $key );
                        if ( is_string( $cacheEntry ) ) {
@@ -640,7 +813,8 @@ abstract class ResourceLoaderModule {
                        } catch ( Exception $e ) {
                                // We'll save this to cache to avoid having to validate broken JS over and over...
                                $err = $e->getMessage();
-                               $result = "mw.log.error(" . Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");";
+                               $result = "mw.log.error(" .
+                                       Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");";
                        }
 
                        $cache->set( $key, $result );
@@ -667,9 +841,9 @@ abstract class ResourceLoaderModule {
         * @return int UNIX timestamp
         */
        protected static function safeFilemtime( $filename ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $mtime = filemtime( $filename ) ?: 1;
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                return $mtime;
        }
index 6d76493..8493f9f 100644 (file)
@@ -43,9 +43,16 @@ class ResourceLoaderOOUIImageModule extends ResourceLoaderImageModule {
 
                        if ( file_exists( $dataPath ) ) {
                                $data = json_decode( file_get_contents( $dataPath ), true );
-                               array_walk_recursive( $data['images'], function ( &$path ) use ( $rootPath, $theme ) {
+                               $fixPath = function ( &$path ) use ( $rootPath, $theme ) {
                                        // TODO Allow extensions to specify this path somehow
                                        $path = $rootPath . '/' . $theme . '/' . $path;
+                               };
+                               array_walk( $data['images'], function ( &$value ) use ( $fixPath ) {
+                                       if ( is_string( $value['file'] ) ) {
+                                               $fixPath( $value['file'] );
+                                       } elseif ( is_array( $value['file'] ) ) {
+                                               array_walk_recursive( $value['file'], $fixPath );
+                                       }
                                } );
                        } else {
                                $data = array();
@@ -62,7 +69,9 @@ class ResourceLoaderOOUIImageModule extends ResourceLoaderImageModule {
                                                if ( !isset( $definition[$key] ) ) {
                                                        $definition[$key] = $data[$key];
                                                } elseif ( $definition[$key] !== $data[$key] ) {
-                                                       throw new Exception( "Mismatched OOUI theme definitions are not supported: trying to load $key of $theme theme" );
+                                                       throw new Exception(
+                                                               "Mismatched OOUI theme definitions are not supported: trying to load $key of $theme theme"
+                                                       );
                                                }
                                                break;
                                }
index 980b7fe..911d953 100644 (file)
@@ -44,13 +44,13 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
                                        '(min-resolution: 1.5dppx), ' .
                                        '(min-resolution: 144dpi)'
                                ][] = '.mw-wiki-logo { background-image: ' .
-                               CSSMin::buildUrlValue( $logoHD['1.5x'] ) .';' .
+                               CSSMin::buildUrlValue( $logoHD['1.5x'] ) . ';' .
                                'background-size: 135px auto; }';
                        }
                        if ( isset( $logoHD['2x'] ) ) {
                                $styles[
                                        '(-webkit-min-device-pixel-ratio: 2), ' .
-                                       '(min--moz-device-pixel-ratio: 2),'.
+                                       '(min--moz-device-pixel-ratio: 2),' .
                                        '(min-resolution: 2dppx), ' .
                                        '(min-resolution: 192dpi)'
                                ][] = '.mw-wiki-logo { background-image: ' .
index 5eb4e3a..8170cb1 100644 (file)
@@ -54,17 +54,17 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( $this->getData() ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
+        * @param ResourceLoaderContext $context
         * @return array
         */
-       public function getDependencies() {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                return array( 'mediawiki.language' );
        }
 
index 6c078b0..a578ece 100644 (file)
@@ -226,7 +226,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
 
                        $registryData[$name] = array(
                                'version' => $versionHash,
-                               'dependencies' => $module->getDependencies(),
+                               'dependencies' => $module->getDependencies( $context ),
                                'group' => $module->getGroup(),
                                'source' => $module->getSource(),
                                'loader' => $module->getLoaderScript(),
@@ -404,7 +404,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                // Pre-populate versionHash with something because the loop over all modules below includes
                // the startup module (this module).
                // See ResourceLoaderModule::getVersionHash() for usage of this cache.
-               $this->versionHash[ $context->getHash() ] = null;
+               $this->versionHash[$context->getHash()] = null;
 
                return $rl->getCombinedVersion( $context, $rl->getModuleNames() );
        }
index d0f7d44..65d770e 100644 (file)
@@ -30,11 +30,10 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
        protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return array|int|mixed
+        * @return bool
         */
-       public function getModifiedTime( ResourceLoaderContext $context ) {
-               return wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 2fd35ad..eba61ed 100644 (file)
  */
 class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule {
 
-       /* Protected Members */
-
        protected $targets = array( 'desktop', 'mobile' );
 
-       /* Methods */
-
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( User::getDefaultOptions() ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 4ed1b87..0847109 100644 (file)
@@ -32,18 +32,18 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
        protected $targets = array( 'desktop', 'mobile' );
 
        /**
+        * @param ResourceLoaderContext $context
         * @return array List of module names as strings
         */
-       public function getDependencies() {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                return array( 'user.defaults' );
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return int
+        * @return bool
         */
-       public function getModifiedTime( ResourceLoaderContext $context ) {
-               return wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 86d59a1..a4d94f8 100644 (file)
  * Abstraction for resource loader modules which pull from wiki pages
  *
  * This can only be used for wiki pages in the MediaWiki and User namespaces,
- * because of its dependence on the functionality of
- * Title::isCssJsSubpage.
+ * because of its dependence on the functionality of Title::isCssJsSubpage.
+ *
+ * This module supports being used as a placeholder for a module on a remote wiki.
+ * To do so, getDB() must be overloaded to return a foreign database object that
+ * allows local wikis to query page metadata.
+ *
+ * Safe for calls on local wikis are:
+ * - Option getters:
+ *   - getGroup()
+ *   - getPosition()
+ *   - getPages()
+ * - Basic methods that strictly involve the foreign database
+ *   - getDB()
+ *   - isKnownEmpty()
+ *   - getTitleInfo()
  */
 class ResourceLoaderWikiModule extends ResourceLoaderModule {
        /** @var string Position on the page to load this module at */
@@ -36,7 +49,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
        // Origin defaults to users with sitewide authority
        protected $origin = self::ORIGIN_USER_SITEWIDE;
 
-       // In-object cache for title info
+       // In-process cache for title info
        protected $titleInfo = array();
 
        // List of page names that contain CSS
@@ -116,13 +129,13 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
        }
 
        /**
-        * Get the Database object used in getTitleMTimes(). Defaults to the local slave DB
-        * but subclasses may want to override this to return a remote DB object, or to return
-        * null if getTitleMTimes() shouldn't access the DB at all.
+        * Get the Database object used in getTitleInfo().
+        *
+        * Defaults to the local slave DB. Subclasses may want to override this to return a foreign
+        * database object, or null if getTitleInfo() shouldn't access the database.
         *
-        * NOTE: This ONLY works for getTitleMTimes() and getModifiedTime(), NOT FOR ANYTHING ELSE.
-        * In particular, it doesn't work for getting the content of JS and CSS pages. That functionality
-        * will use the local DB irrespective of the return value of this method.
+        * NOTE: This ONLY works for getTitleInfo() and isKnownEmpty(), NOT FOR ANYTHING ELSE.
+        * In particular, it doesn't work for getContent() or getScript() etc.
         *
         * @return IDatabase|null
         */
@@ -131,10 +144,15 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param Title $title
+        * @param string $title
         * @return null|string
         */
-       protected function getContent( $title ) {
+       protected function getContent( $titleText ) {
+               $title = Title::newFromText( $titleText );
+               if ( !$title || $title->isRedirect() ) {
+                       return null;
+               }
+
                $handler = ContentHandler::getForTitle( $title );
                if ( $handler->isSupportedFormat( CONTENT_FORMAT_CSS ) ) {
                        $format = CONTENT_FORMAT_CSS;
@@ -169,11 +187,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        if ( $options['type'] !== 'script' ) {
                                continue;
                        }
-                       $title = Title::newFromText( $titleText );
-                       if ( !$title || $title->isRedirect() ) {
-                               continue;
-                       }
-                       $script = $this->getContent( $title );
+                       $script = $this->getContent( $titleText );
                        if ( strval( $script ) !== '' ) {
                                $script = $this->validateScriptFile( $titleText, $script );
                                $scripts .= ResourceLoader::makeComment( $titleText ) . $script . "\n";
@@ -192,12 +206,8 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        if ( $options['type'] !== 'style' ) {
                                continue;
                        }
-                       $title = Title::newFromText( $titleText );
-                       if ( !$title || $title->isRedirect() ) {
-                               continue;
-                       }
                        $media = isset( $options['media'] ) ? $options['media'] : 'all';
-                       $style = $this->getContent( $title );
+                       $style = $this->getContent( $titleText );
                        if ( strval( $style ) === '' ) {
                                continue;
                        }
@@ -215,23 +225,17 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return int
+        * Disable module content versioning.
+        *
+        * This class does not support generating content outside of a module
+        * request due to foreign database support.
+        *
+        * See getDefinitionSummary() for meta-data versioning.
+        *
+        * @return bool
         */
-       public function getModifiedTime( ResourceLoaderContext $context ) {
-               $modifiedTime = 1;
-               $titleInfo = $this->getTitleInfo( $context );
-               if ( count( $titleInfo ) ) {
-                       $mtimes = array_map( function ( $value ) {
-                               return $value['timestamp'];
-                       }, $titleInfo );
-                       $modifiedTime = max( $modifiedTime, max( $mtimes ) );
-               }
-               $modifiedTime = max(
-                       $modifiedTime,
-                       $this->getMsgBlobMtime( $context->getLanguage() )
-               );
-               return $modifiedTime;
+       public function enableModuleContentVersion() {
+               return false;
        }
 
        /**
@@ -242,6 +246,8 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                $summary = parent::getDefinitionSummary( $context );
                $summary[] = array(
                        'pages' => $this->getPages( $context ),
+                       // Includes SHA1 of content
+                       'titleInfo' => $this->getTitleInfo( $context ),
                );
                return $summary;
        }
@@ -251,33 +257,29 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @return bool
         */
        public function isKnownEmpty( ResourceLoaderContext $context ) {
-               $titleInfo = $this->getTitleInfo( $context );
-               // Bug 68488: For modules in the "user" group, we should actually
-               // check that the pages are empty (page_len == 0), but for other
-               // groups, just check the pages exist so that we don't end up
-               // caching temporarily-blank pages without the appropriate
-               // <script> or <link> tag.
-               if ( $this->getGroup() !== 'user' ) {
-                       return count( $titleInfo ) === 0;
-               }
+               $revisions = $this->getTitleInfo( $context );
 
-               foreach ( $titleInfo as $info ) {
-                       if ( $info['length'] !== 0 ) {
-                               // At least one non-0-lenth page, not empty
-                               return false;
+               // For user modules, don't needlessly load if there are no non-empty pages
+               if ( $this->getGroup() === 'user' ) {
+                       foreach ( $revisions as $revision ) {
+                               if ( $revision['rev_len'] > 0 ) {
+                                       // At least one non-empty page, module should be loaded
+                                       return false;
+                               }
                        }
+                       return true;
                }
 
-               // All pages are 0-length, so it's empty
-               return true;
+               // Bug 68488: For other modules (i.e. ones that are called in cached html output) only check
+               // page existance. This ensures that, if some pages in a module are temporarily blanked,
+               // we don't end omit the module's script or link tag on some pages.
+               return count( $revisions ) === 0;
        }
 
        /**
-        * Get the modification times of all titles that would be loaded for
-        * a given context.
-        * @param ResourceLoaderContext $context Context object
-        * @return array Keyed by page dbkey. Value is an array with 'length' and 'timestamp'
-        *               keys, where the timestamp is a UNIX timestamp
+        * Get the information about the wiki pages for a given context.
+        * @param ResourceLoaderContext $context
+        * @return array Keyed by page name. Contains arrays with 'rev_len' and 'rev_sha1' keys
         */
        protected function getTitleInfo( ResourceLoaderContext $context ) {
                $dbr = $this->getDB();
@@ -286,32 +288,35 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        return array();
                }
 
-               $hash = $context->getHash();
-               if ( isset( $this->titleInfo[$hash] ) ) {
-                       return $this->titleInfo[$hash];
-               }
-
-               $this->titleInfo[$hash] = array();
-               $batch = new LinkBatch;
-               foreach ( $this->getPages( $context ) as $titleText => $options ) {
-                       $batch->addObj( Title::newFromText( $titleText ) );
-               }
+               $pages = $this->getPages( $context );
+               $key = implode( '|', array_keys( $pages ) );
+               if ( !isset( $this->titleInfo[$key] ) ) {
+                       $this->titleInfo[$key] = array();
+                       $batch = new LinkBatch;
+                       foreach ( $pages as $titleText => $options ) {
+                               $batch->addObj( Title::newFromText( $titleText ) );
+                       }
 
-               if ( !$batch->isEmpty() ) {
-                       $res = $dbr->select( 'page',
-                               array( 'page_namespace', 'page_title', 'page_touched', 'page_len' ),
-                               $batch->constructSet( 'page', $dbr ),
-                               __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                               $this->titleInfo[$hash][$title->getPrefixedDBkey()] = array(
-                                       'timestamp' => wfTimestamp( TS_UNIX, $row->page_touched ),
-                                       'length' => $row->page_len,
+                       if ( !$batch->isEmpty() ) {
+                               $res = $dbr->select( array( 'page', 'revision' ),
+                                       array( 'page_namespace', 'page_title', 'rev_len', 'rev_sha1' ),
+                                       $batch->constructSet( 'page', $dbr ),
+                                       __METHOD__,
+                                       array(),
+                                       array( 'revision' => array( 'INNER JOIN', array( 'page_latest=rev_id' ) ) )
                                );
+                               foreach ( $res as $row ) {
+                                       // Avoid including ids or timestamps of revision/page tables so
+                                       // that versions are not wasted
+                                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                                       $this->titleInfo[$key][$title->getPrefixedText()] = array(
+                                               'rev_len' => $row->rev_len,
+                                               'rev_sha1' => $row->rev_sha1,
+                                       );
+                               }
                        }
                }
-               return $this->titleInfo[$hash];
+               return $this->titleInfo[$key];
        }
 
        public function getPosition() {
index 5087e8d..7d5d38f 100644 (file)
@@ -218,7 +218,7 @@ class SearchHighlighter {
                        }
 
                        // calc by how much to extend existing snippets
-                       $targetchars = intval( ( $contextchars * $contextlines ) / count ( $snippets ) );
+                       $targetchars = intval( ( $contextchars * $contextlines ) / count( $snippets ) );
                }
 
                foreach ( $snippets as $index => $line ) {
index 485088c..fa2423b 100644 (file)
@@ -54,9 +54,9 @@ class SearchMySQL extends SearchDatabase {
                if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
                                $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach ( $m as $bits ) {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
 
                                if ( $nonQuoted != '' ) {
                                        $term = $nonQuoted;
index eee6930..3a5ee0e 100644 (file)
@@ -52,9 +52,9 @@ class SearchSqlite extends SearchDatabase {
                if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
                                $filteredText, $m, PREG_SET_ORDER ) ) {
                        foreach ( $m as $bits ) {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                list( /* all */, $modifier, $term, $nonQuoted, $wildcard ) = $bits;
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
 
                                if ( $nonQuoted != '' ) {
                                        $term = $nonQuoted;
index 6e48d04..20cceda 100644 (file)
@@ -42,9 +42,9 @@ class MediaWikiI18N {
                $m = array();
                while ( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
                        list( $src, $var ) = $m;
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $varValue = $this->context[$var];
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        $value = str_replace( $src, $varValue, $value );
                }
                return $value;
index 6c5fbcd..327ef7c 100644 (file)
@@ -650,7 +650,7 @@ abstract class Skin extends ContextSource {
                }
 
                return $this->msg( 'retrievedfrom' )
-                       ->rawParams( '<a dir="ltr" href="' . $url. '">' . $url . '</a>' )
+                       ->rawParams( '<a dir="ltr" href="' . $url . '">' . $url . '</a>' )
                        ->parse();
        }
 
index 312769f..cd5e43c 100644 (file)
@@ -87,7 +87,7 @@ class SkinFallbackTemplate extends BaseTemplate {
                if ( file_exists( "$IP/skins/$skin/skin.json" ) ) {
                        return "wfLoadSkin( '$skin' );";
                } else {
-                       return  "require_once \"\$IP/skins/$skin/$skin.php\";";
+                       return "require_once \"\$IP/skins/$skin/$skin.php\";";
                }
        }
 
index 5364719..ae78b2c 100644 (file)
@@ -1076,6 +1076,7 @@ class SkinTemplate extends Skin {
                                        $xmlID = 'ca-nstab-' . $xmlID;
                                } elseif ( isset( $link['context'] ) && $link['context'] == 'talk' ) {
                                        $xmlID = 'ca-talk';
+                                       $link['rel'] = 'discussion';
                                } elseif ( $section == 'variants' ) {
                                        $xmlID = 'ca-varlang-' . $xmlID;
                                } else {
index b913235..23bd394 100644 (file)
@@ -434,7 +434,8 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $legend .= Html::element( 'dt',
                                array( 'class' => $cssClass ), $context->msg( $letter )->text()
                        ) . "\n" .
-                       Html::rawElement( 'dd', array(),
+                       Html::rawElement( 'dd',
+                               array( 'class' => Sanitizer::escapeClass( 'mw-changeslist-legend-' . $key ) ),
                                $context->msg( $label )->parse()
                        ) . "\n";
                }
index 92409cd..69e1d8c 100644 (file)
@@ -70,7 +70,7 @@ abstract class QueryPage extends SpecialPage {
                                array( 'DeadendPagesPage', 'Deadendpages' ),
                                array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
                                array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
-                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles'),
+                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles' ),
                                array( 'LinkSearchPage', 'LinkSearch' ),
                                array( 'ListredirectsPage', 'Listredirects' ),
                                array( 'LonelyPagesPage', 'Lonelypages' ),
@@ -470,6 +470,18 @@ abstract class QueryPage extends SpecialPage {
                return $this->cachedTimestamp;
        }
 
+       /**
+        * Returns limit and offset, as returned by $this->getRequest()->getLimitOffset().
+        * Subclasses may override this to further restrict or modify limit and offset.
+        *
+        * @since 1.26
+        *
+        * @return int[] list( $limit, $offset )
+        */
+       protected function getLimitOffset() {
+               return $this->getRequest()->getLimitOffset();
+       }
+
        /**
         * This is the actual workhorse. It does everything needed to make a
         * real, honest-to-gosh query page.
@@ -495,7 +507,7 @@ abstract class QueryPage extends SpecialPage {
                $out->setSyndicated( $this->isSyndicated() );
 
                if ( $this->limit == 0 && $this->offset == 0 ) {
-                       list( $this->limit, $this->offset ) = $this->getRequest()->getLimitOffset();
+                       list( $this->limit, $this->offset ) = $this->getLimitOffset();
                }
 
                // @todo Use doQuery()
index a866ba7..9129ee5 100644 (file)
@@ -70,13 +70,15 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
         * Return part of the request string for a special redirect page
         * This allows passing, e.g. action=history to Special:Mypage, etc.
         *
-        * @return string
+        * @return array|bool
         */
        public function getRedirectQuery() {
                $params = array();
                $request = $this->getRequest();
 
-               foreach ( $this->mAllowedRedirectParams as $arg ) {
+               foreach ( array_merge( $this->mAllowedRedirectParams,
+                               array( 'uselang', 'useskin', 'debug' ) // parameters which can be passed to all pages
+                       ) as $arg ) {
                        if ( $request->getVal( $arg, null ) !== null ) {
                                $params[$arg] = $request->getVal( $arg );
                        } elseif ( $request->getArray( $arg, null ) !== null ) {
@@ -147,11 +149,11 @@ abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
  * - limit, offset: Useful for linking to history of one's own user page or
  * user talk page. For example, this would be a link to "the last edit to your
  * user talk page in the year 2010":
- * http://en.wikipedia.org/wiki/Special:MyPage?offset=20110000000000&limit=1&action=history
+ * https://en.wikipedia.org/wiki/Special:MyPage?offset=20110000000000&limit=1&action=history
  *
  * - feed: would allow linking to the current user's RSS feed for their user
  * talk page:
- * http://en.wikipedia.org/w/index.php?title=Special:MyTalk&action=history&feed=rss
+ * https://en.wikipedia.org/w/index.php?title=Special:MyTalk&action=history&feed=rss
  *
  * - preloadtitle: Can be used to provide a default section title for a
  * preloaded new comment on one's own talk page.
@@ -166,7 +168,7 @@ abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
  * - redlink: Affects the message the user sees if their talk page/user talk
  * page does not currently exist. Avoids confusion for newbies with no user
  * pages over why they got a "permission error" following this link:
- * http://en.wikipedia.org/w/index.php?title=Special:MyPage&redlink=1
+ * https://en.wikipedia.org/w/index.php?title=Special:MyPage&redlink=1
  *
  * - debug: determines whether the debug parameter is passed to load.php,
  * which disables reformatting and allows scripts to be debugged. Useful
@@ -205,7 +207,7 @@ abstract class RedirectSpecialArticle extends RedirectSpecialPage {
                        'section', 'oldid', 'diff', 'dir',
                        'limit', 'offset', 'feed',
                        # Misc options
-                       'redlink', 'debug',
+                       'redlink',
                        # Options for action=raw; missing ctype can break JS or CSS in some browsers
                        'ctype', 'maxage', 'smaxage',
                );
index a7a43b0..eb18b8f 100644 (file)
@@ -662,7 +662,6 @@ class SpecialPage {
         */
        public function getFinalGroupName() {
                $name = $this->getName();
-               $specialPageGroups = $this->getConfig()->get( 'SpecialPageGroups' );
 
                // Allow overbidding the group from the wiki side
                $msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
@@ -671,18 +670,6 @@ class SpecialPage {
                } else {
                        // Than use the group from this object
                        $group = $this->getGroupName();
-
-                       // Group '-' is used as default to have the chance to determine,
-                       // if the special pages overrides this method,
-                       // if not overridden, $wgSpecialPageGroups is checked for b/c
-                       if ( $group === '-' && isset( $specialPageGroups[$name] ) ) {
-                               $group = $specialPageGroups[$name];
-                       }
-               }
-
-               // never give '-' back, change to 'other'
-               if ( $group === '-' ) {
-                       $group = 'other';
                }
 
                return $group;
@@ -697,8 +684,6 @@ class SpecialPage {
         * @since 1.21
         */
        protected function getGroupName() {
-               // '-' used here to determine, if this group is overridden or has a hardcoded 'other'
-               // Needed for b/c in getFinalGroupName
-               return '-';
+               return 'other';
        }
 }
index dedfcb6..e794a5d 100644 (file)
@@ -218,7 +218,7 @@ class SpecialPageFactory {
                global $wgSpecialPages;
                global $wgDisableInternalSearch, $wgEmailAuthentication;
                global $wgEnableEmail, $wgEnableJavaScriptTest;
-               global $wgPageLanguageUseDB;
+               global $wgPageLanguageUseDB, $wgContentHandlerUseDB;
 
                if ( !is_array( self::$list ) ) {
 
@@ -244,6 +244,9 @@ class SpecialPageFactory {
                        if ( $wgPageLanguageUseDB ) {
                                self::$list['PageLanguage'] = 'SpecialPageLanguage';
                        }
+                       if ( $wgContentHandlerUseDB ) {
+                               self::$list['ChangeContentModel'] = 'SpecialChangeContentModel';
+                       }
 
                        self::$list['Activeusers'] = 'SpecialActiveUsers';
 
@@ -260,14 +263,13 @@ class SpecialPageFactory {
        }
 
        /**
-        * Initialise and return the list of special page aliases.  Returns an object with
-        * properties which can be accessed $obj->pagename - each property name is an
-        * alias, with the value being the canonical name of the special page. All
-        * registered special pages are guaranteed to map to themselves.
-        * @return object
+        * Initialise and return the list of special page aliases. Returns an array where
+        * the key is an alias, and the value is the canonical name of the special page.
+        * All registered special pages are guaranteed to map to themselves.
+        * @return array
         */
-       private static function getAliasListObject() {
-               if ( !is_object( self::$aliases ) ) {
+       private static function getAliasList() {
+               if ( is_null( self::$aliases ) ) {
                        global $wgContLang;
                        $aliases = $wgContLang->getSpecialPageAliases();
                        $pageList = self::getPageList();
@@ -310,9 +312,6 @@ class SpecialPageFactory {
                                        }
                                }
                        }
-
-                       // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       self::$aliases = (object)self::$aliases;
                }
 
                return self::$aliases;
@@ -332,8 +331,9 @@ class SpecialPageFactory {
 
                $caseFoldedAlias = $wgContLang->caseFold( $bits[0] );
                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
-               if ( isset( self::getAliasListObject()->$caseFoldedAlias ) ) {
-                       $name = self::getAliasListObject()->$caseFoldedAlias;
+               $aliases = self::getAliasList();
+               if ( isset( $aliases[$caseFoldedAlias] ) ) {
+                       $name = $aliases[$caseFoldedAlias];
                } else {
                        return array( null, null );
                }
@@ -347,34 +347,6 @@ class SpecialPageFactory {
                return array( $name, $par );
        }
 
-       /**
-        * Add a page to a certain display group for Special:SpecialPages
-        *
-        * @param SpecialPage|string $page
-        * @param string $group
-        * @deprecated since 1.21 Override SpecialPage::getGroupName
-        */
-       public static function setGroup( $page, $group ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               global $wgSpecialPageGroups;
-               $name = is_object( $page ) ? $page->getName() : $page;
-               $wgSpecialPageGroups[$name] = $group;
-       }
-
-       /**
-        * Get the group that the special page belongs in on Special:SpecialPage
-        *
-        * @param SpecialPage $page
-        * @return string
-        * @deprecated since 1.21 Use SpecialPage::getFinalGroupName
-        */
-       public static function getGroup( &$page ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               return $page->getFinalGroupName();
-       }
-
        /**
         * Check if a given name exist as a special page or as a special page alias
         *
@@ -572,7 +544,6 @@ class SpecialPageFactory {
                                $context->setTitle( $page->getPageTitle( $par ) );
                        }
                } elseif ( !$page->isIncludable() ) {
-
                        return false;
                }
 
@@ -638,7 +609,7 @@ class SpecialPageFactory {
        public static function getLocalNameFor( $name, $subpage = false ) {
                global $wgContLang;
                $aliases = $wgContLang->getSpecialPageAliases();
-               $aliasList = self::getAliasListObject();
+               $aliasList = self::getAliasList();
 
                // Find the first alias that maps back to $name
                if ( isset( $aliases[$name] ) ) {
@@ -646,8 +617,8 @@ class SpecialPageFactory {
                        foreach ( $aliases[$name] as $alias ) {
                                $caseFoldedAlias = $wgContLang->caseFold( $alias );
                                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
-                               if ( isset( $aliasList->$caseFoldedAlias ) &&
-                                       $aliasList->$caseFoldedAlias === $name
+                               if ( isset( $aliasList[$caseFoldedAlias] ) &&
+                                       $aliasList[$caseFoldedAlias] === $name
                                ) {
                                        $name = $alias;
                                        $found = true;
index 6a86af2..41c2f93 100644 (file)
@@ -130,7 +130,7 @@ class AllMessagesTablePager extends TablePager {
 
                if ( $prefix !== null ) {
                        $this->displayPrefix = $prefix->getDBkey();
-                       $this->prefix = '/^' . preg_quote( $this->displayPrefix ) . '/i';
+                       $this->prefix = '/^' . preg_quote( $this->displayPrefix, '/' ) . '/i';
                } else {
                        $this->displayPrefix = false;
                        $this->prefix = false;
@@ -392,10 +392,10 @@ class AllMessagesTablePager extends TablePager {
                                        );
                                }
 
-                               return $title . ' '
-                               . $this->msg( 'parentheses' )->rawParams( $talk )->escaped()
-                               . ' '
-                               . $this->msg( 'parentheses' )->rawParams( $translation )->escaped();
+                               return $title . ' ' .
+                                       $this->msg( 'parentheses' )->rawParams( $talk )->escaped() .
+                                       ' ' .
+                                       $this->msg( 'parentheses' )->rawParams( $translation )->escaped();
 
                        case 'am_default' :
                        case 'am_actual' :
index 752edc3..b4d4220 100644 (file)
@@ -394,7 +394,7 @@ class SpecialBlock extends FormSpecialPage {
 
                # Link to edit the block dropdown reasons, if applicable
                if ( $user->isAllowed( 'editinterface' ) ) {
-                       $links[] = Linker::link(
+                       $links[] = Linker::linkKnown(
                                $this->msg( 'ipbreason-dropdown' )->inContentLanguage()->getTitle(),
                                $this->msg( 'ipb-edit-dropdown' )->escaped(),
                                array(),
index 0ec144a..8a9aefd 100644 (file)
@@ -430,23 +430,14 @@ class BlockListPager extends TablePager {
                $lb = new LinkBatch;
                $lb->setCaller( __METHOD__ );
 
-               $userids = array();
-
                foreach ( $result as $row ) {
-                       $userids[] = $row->ipb_by;
-
-                       # Usernames and titles are in fact related by a simple substitution of space -> underscore
-                       # The last few lines of Title::secureAndSplit() tell the story.
-                       $name = str_replace( ' ', '_', $row->ipb_address );
-                       $lb->add( NS_USER, $name );
-                       $lb->add( NS_USER_TALK, $name );
-               }
+                       $lb->add( NS_USER, $row->ipb_address );
+                       $lb->add( NS_USER_TALK, $row->ipb_address );
 
-               $ua = UserArray::newFromIDs( $userids );
-               foreach ( $ua as $user ) {
-                       $name = str_replace( ' ', '_', $user->getName() );
-                       $lb->add( NS_USER, $name );
-                       $lb->add( NS_USER_TALK, $name );
+                       if ( isset( $row->by_user_name ) ) {
+                               $lb->add( NS_USER, $row->by_user_name );
+                               $lb->add( NS_USER_TALK, $row->by_user_name );
+                       }
                }
 
                $lb->execute();
diff --git a/includes/specials/SpecialChangeContentModel.php b/includes/specials/SpecialChangeContentModel.php
new file mode 100644 (file)
index 0000000..7647999
--- /dev/null
@@ -0,0 +1,234 @@
+<?php
+
+class SpecialChangeContentModel extends FormSpecialPage {
+
+       public function __construct() {
+               parent::__construct( 'ChangeContentModel', 'editcontentmodel' );
+       }
+
+       /**
+        * @var Title|null
+        */
+       private $title;
+
+       /**
+        * @var Revision|bool|null
+        *
+        * A Revision object, false if no revision exists, null if not loaded yet
+        */
+       private $oldRevision;
+
+       protected function setParameter( $par ) {
+               $par = $this->getRequest()->getVal( 'pagetitle', $par );
+               $title = Title::newFromText( $par );
+               if ( $title ) {
+                       $this->title = $title;
+                       $this->par = $title->getPrefixedText();
+               } else {
+                       $this->par = '';
+               }
+       }
+
+       protected function getDisplayFormat() {
+               return 'ooui';
+       }
+
+       protected function alterForm( HTMLForm $form ) {
+               if ( !$this->title ) {
+                       $form->setMethod( 'GET' );
+               }
+       }
+
+       public function validateTitle( $title ) {
+               if ( !$title ) {
+                       // 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();
+               }
+
+               $this->oldRevision = Revision::newFromTitle( $titleObj ) ?: false;
+
+               if ( $this->oldRevision ) {
+                       $oldContent = $this->oldRevision->getContent();
+                       if ( !$oldContent->getContentHandler()->supportsDirectEditing() ) {
+                               return $this->msg( 'changecontentmodel-nodirectediting' )
+                                       ->params( ContentHandler::getLocalizedName( $oldContent->getModel() ) )
+                                       ->escaped();
+                       }
+               }
+
+               return true;
+       }
+
+       protected function getFormFields() {
+               $that = $this;
+               $fields = array(
+                       'pagetitle' => array(
+                               'type' => 'text',
+                               'name' => 'pagetitle',
+                               'default' => $this->par,
+                               'label-message' => 'changecontentmodel-title-label',
+                               'validation-callback' => array( $this, 'validateTitle' ),
+                       ),
+               );
+               if ( $this->title ) {
+                       $fields['pagetitle']['readonly'] = true;
+                       $fields += array(
+                               'model' => array(
+                                       'type' => 'select',
+                                       'name' => 'model',
+                                       'options' => $this->getOptionsForTitle( $this->title ),
+                                       'label-message' => 'changecontentmodel-model-label'
+                               ),
+                               'reason' => array(
+                                       'type' => 'text',
+                                       'name' => 'reason',
+                                       'validation-callback' => function( $reason ) use ( $that ) {
+                                               $match = EditPage::matchSummarySpamRegex( $reason );
+                                               if ( $match ) {
+                                                       return $that->msg( 'spamprotectionmatch', $match )->parse();
+                                               }
+
+                                               return true;
+                                       },
+                                       'label-message' => 'changecontentmodel-reason-label',
+                               ),
+                       );
+               }
+
+               return $fields;
+       }
+
+       private function getOptionsForTitle( Title $title = null ) {
+               $models = ContentHandler::getContentModels();
+               $options = array();
+               foreach ( $models as $model ) {
+                       $handler = ContentHandler::getForModelID( $model );
+                       if ( !$handler->supportsDirectEditing() ) {
+                               continue;
+                       }
+                       if ( $title ) {
+                               if ( $title->getContentModel() === $model ) {
+                                       continue;
+                               }
+                               if ( !$handler->canBeUsedOn( $title ) ) {
+                                       continue;
+                               }
+                       }
+                       $options[ContentHandler::getLocalizedName( $model )] = $model;
+               }
+
+               return $options;
+       }
+
+       public function onSubmit( array $data ) {
+               global $wgContLang;
+
+               if ( $data['pagetitle'] === '' ) {
+                       // Initial form view of special page, pass
+                       return false;
+               }
+
+               // At this point, it has to be a POST request. This is enforced by HTMLForm,
+               // but lets be safe verify that.
+               if ( !$this->getRequest()->wasPosted() ) {
+                       throw new RuntimeException( "Form submission was not POSTed" );
+               }
+
+               $this->title = Title::newFromText( $data['pagetitle' ] );
+               $user = $this->getUser();
+               // Check permissions and make sure the user has permission to edit the specific page
+               $errors = $this->title->getUserPermissionsErrors( 'editcontentmodel', $user );
+               $errors = wfMergeErrorArrays( $errors, $this->title->getUserPermissionsErrors( 'edit', $user ) );
+               if ( $errors ) {
+                       $out = $this->getOutput();
+                       $wikitext = $out->formatPermissionsErrorMessage( $errors );
+                       // Hack to get our wikitext parsed
+                       return Status::newFatal( new RawMessage( '$1', array( $wikitext ) ) );
+               }
+
+               $page = WikiPage::factory( $this->title );
+               if ( $this->oldRevision === null ) {
+                       $this->oldRevision = $page->getRevision() ?: false;
+               }
+               $oldModel = $this->title->getContentModel();
+               if ( $this->oldRevision ) {
+                       $oldContent = $this->oldRevision->getContent();
+                       try {
+                               $newContent = ContentHandler::makeContent(
+                                       $oldContent->getNativeData(), $this->title, $data['model']
+                               );
+                       } catch ( MWException $e ) {
+                               return Status::newFatal(
+                                       $this->msg( 'changecontentmodel-cannot-convert' )
+                                               ->params(
+                                                       $this->title->getPrefixedText(),
+                                                       ContentHandler::getLocalizedName( $data['model'] )
+                                               )
+                               );
+                       }
+               } else {
+                       // Page doesn't exist, create an empty content object
+                       $newContent = ContentHandler::getForModelID( $data['model'] )->makeEmptyContent();
+               }
+               $flags = $this->oldRevision ? EDIT_UPDATE : EDIT_NEW;
+               if ( $user->isAllowed( 'bot' ) ) {
+                       $flags |= EDIT_FORCE_BOT;
+               }
+
+               $log = new ManualLogEntry( 'contentmodel', 'change' );
+               $log->setPerformer( $user );
+               $log->setTarget( $this->title );
+               $log->setComment( $data['reason'] );
+               $log->setParameters( array(
+                       '4::oldmodel' => $oldModel,
+                       '5::newmodel' => $data['model']
+               ) );
+
+               $formatter = LogFormatter::newFromEntry( $log );
+               $formatter->setContext( RequestContext::newExtraneousContext( $this->title ) );
+               $reason = $formatter->getPlainActionText();
+               if ( $data['reason'] !== '' ) {
+                       $reason .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $data['reason'];
+               }
+               # Truncate for whole multibyte characters.
+               $reason = $wgContLang->truncate( $reason, 255 );
+
+               $status = $page->doEditContent(
+                       $newContent,
+                       $reason,
+                       $flags,
+                       $this->oldRevision ? $this->oldRevision->getId() : false,
+                       $user
+               );
+               if ( !$status->isOK() ) {
+                       return $status;
+               }
+
+               $logid = $log->insert();
+               $log->publish( $logid );
+
+               return $status;
+       }
+
+       public function onSuccess() {
+               $out = $this->getOutput();
+               $out->setPageTitle( $this->msg( 'changecontentmodel-success-title' ) );
+               $out->addWikiMsg( 'changecontentmodel-success-text', $this->title );
+       }
+}
index babb315..c2aa704 100644 (file)
@@ -107,7 +107,7 @@ class SpecialChangeEmail extends FormSpecialPage {
        }
 
        protected function getDisplayFormat() {
-               return 'vform';
+               return 'ooui';
        }
 
        protected function alterForm( HTMLForm $form ) {
index a2304e3..9672580 100644 (file)
@@ -965,14 +965,14 @@ class ContribsPager extends ReverseChronologicalPager {
                 * we're definitely dealing with revision data and we may proceed, if not, we'll leave it
                 * to extensions to subscribe to the hook to parse the row.
                 */
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                try {
                        $rev = new Revision( $row );
                        $validRevision = (bool)$rev->getId();
                } catch ( Exception $e ) {
                        $validRevision = false;
                }
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $validRevision ) {
                        $classes = array();
index 387c174..8c7f0c8 100644 (file)
@@ -201,14 +201,14 @@ class DeletedContribsPager extends IndexPager {
                 * we're definitely dealing with revision data and we may proceed, if not, we'll leave it
                 * to extensions to subscribe to the hook to parse the row.
                 */
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                try {
                        $rev = Revision::newFromArchiveRow( $row );
                        $validRevision = (bool)$rev->getId();
                } catch ( Exception $e ) {
                        $validRevision = false;
                }
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $validRevision ) {
                        $ret = $this->formatRevisionRow( $row );
index c364f70..47b426d 100644 (file)
@@ -156,7 +156,6 @@ class DoubleRedirectsPage extends QueryPage {
                        $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(),
                        array(),
                        array(
-                               'redirect' => 'no',
                                'action' => 'edit'
                        )
                );
index dfc7cdd..69b795d 100644 (file)
@@ -188,113 +188,128 @@ class SpecialExport extends SpecialPage {
                        $categoryName = '';
                }
 
-               $form = Xml::openElement( 'form', array( 'method' => 'post',
-                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ) ) );
-               $form .= Xml::inputLabel(
-                       $this->msg( 'export-addcattext' )->text(),
-                       'catname',
-                       'catname',
-                       40,
-                       $categoryName
-               ) . '&#160;';
-               $form .= Xml::submitButton(
-                       $this->msg( 'export-addcat' )->text(),
-                       array( 'name' => 'addcat' )
-               ) . '<br />';
-
+               $formDescriptor = array(
+                       'catname' => array(
+                               'type' => 'textwithbutton',
+                               'name' => 'catname',
+                               'horizontal-label' => true,
+                               'label-message' => 'export-addcattext',
+                               'default' => $categoryName,
+                               'size' => 40,
+                               'buttontype' => 'submit',
+                               'buttonname' => 'addcat',
+                               'buttondefault' => $this->msg( 'export-addcat' )->text(),
+                       ),
+               );
                if ( $config->get( 'ExportFromNamespaces' ) ) {
-                       $form .= Html::namespaceSelector(
-                               array(
-                                       'selected' => $nsindex,
-                                       'label' => $this->msg( 'export-addnstext' )->text()
-                               ), array(
+                       $formDescriptor += array(
+                               'nsindex' => array(
+                                       'type' => 'namespaceselectwithbutton',
+                                       'default' => $nsindex,
+                                       'label-message' => 'export-addnstext',
+                                       'horizontal-label' => true,
                                        'name' => 'nsindex',
                                        'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
-                       ) . '&#160;';
-                       $form .= Xml::submitButton(
-                               $this->msg( 'export-addns' )->text(),
-                               array( 'name' => 'addns' )
-                       ) . '<br />';
+                                       'cssclass' => 'namespaceselector',
+                                       'buttontype' => 'submit',
+                                       'buttonname' => 'addns',
+                                       'buttondefault' => $this->msg( 'export-addns' )->text(),
+                               ),
+                       );
                }
 
                if ( $config->get( 'ExportAllowAll' ) ) {
-                       $form .= Xml::checkLabel(
-                               $this->msg( 'exportall' )->text(),
-                               'exportall',
-                               'exportall',
-                               $request->wasPosted() ? $request->getCheck( 'exportall' ) : false
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'exportall' => array(
+                                       'type' => 'check',
+                                       'label-message' => 'exportall',
+                                       'name' => 'exportall',
+                                       'id' => 'exportall',
+                                       'default' => $request->wasPosted() ? $request->getCheck( 'exportall' ) : false,
+                               ),
+                       );
                }
 
-               $form .= Xml::element(
-                       'textarea',
-                       array( 'name' => 'pages', 'cols' => 40, 'rows' => 10 ),
-                       $page,
-                       false
+               $formDescriptor += array(
+                       'textarea' => array(
+                               'class' => 'HTMLTextAreaField',
+                               'name' => 'pages',
+                               'nodata' => true,
+                               'cols' => 40,
+                               'rows' => 10,
+                               'default' => $page,
+                       ),
                );
-               $form .= '<br />';
 
                if ( $config->get( 'ExportAllowHistory' ) ) {
-                       $form .= Xml::checkLabel(
-                               $this->msg( 'exportcuronly' )->text(),
-                               'curonly',
-                               'curonly',
-                               $request->wasPosted() ? $request->getCheck( 'curonly' ) : true
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'curonly' => array(
+                                       'type' => 'check',
+                                       'label-message' => 'exportcuronly',
+                                       'name' => 'curonly',
+                                       'id' => 'curonly',
+                                       'default' => $request->wasPosted() ? $request->getCheck( 'curonly' ) : true,
+                               ),
+                       );
                } else {
                        $out->addWikiMsg( 'exportnohistory' );
                }
 
-               $form .= Xml::checkLabel(
-                       $this->msg( 'export-templates' )->text(),
-                       'templates',
-                       'wpExportTemplates',
-                       $request->wasPosted() ? $request->getCheck( 'templates' ) : false
-               ) . '<br />';
+               $formDescriptor += array(
+                       'templates' => array(
+                               'type' => 'check',
+                               'label-message' => 'export-templates',
+                               'name' => 'templates',
+                               'id' => 'wpExportTemplates',
+                               'default' => $request->wasPosted() ? $request->getCheck( 'templates' ) : false,
+                       ),
+               );
 
                if ( $config->get( 'ExportMaxLinkDepth' ) || $this->userCanOverrideExportDepth() ) {
-                       $form .= Xml::inputLabel(
-                               $this->msg( 'export-pagelinks' )->text(),
-                               'pagelink-depth',
-                               'pagelink-depth',
-                               20,
-                               0
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'pagelink-depth' => array(
+                                       'type' => 'text',
+                                       'name' => 'pagelink-depth',
+                                       'id' => 'pagelink-depth',
+                                       'label-message' => 'export-pagelinks',
+                                       'default' => '0',
+                                       'size' => 20,
+                               ),
+                       );
                }
 
-               /* Enable this when we can do something useful exporting/importing image information.
-               $form .= Xml::checkLabel(
-                               $this->msg( 'export-images' )->text(),
-                               'images',
-                               'wpExportImages',
-                               false
-                       ) . '<br />';
-               */
-               $form .= Xml::checkLabel(
-                       $this->msg( 'export-download' )->text(),
-                       'wpDownload',
-                       'wpDownload',
-                       $request->wasPosted() ? $request->getCheck( 'wpDownload' ) : true
-               ) . '<br />';
+               $formDescriptor += array(
+                       /* Enable this when we can do something useful exporting/importing image information.
+                       'images' => array(
+                               'type' => 'check',
+                               'name' => 'images',
+                               'id' => 'wpExportImages',
+                               'default' => false,
+                       ),*/
+                       'wpDownload' => array(
+                               'type' => 'check',
+                               'name' =>'wpDownload',
+                               'id' => 'wpDownload',
+                               'default' => $request->wasPosted() ? $request->getCheck( 'wpDownload' ) : true,
+                               'label-message' => 'export-download',
+                       ),
+               );
 
                if ( $config->get( 'ExportAllowListContributors' ) ) {
-                       $form .= Xml::checkLabel(
-                               $this->msg( 'exportlistauthors' )->text(),
-                               'listauthors',
-                               'listauthors',
-                               $request->wasPosted() ? $request->getCheck( 'listauthors' ) : false
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'listauthors' => array(
+                                       'type' => 'check',
+                                       'label-message' => 'exportlistauthors',
+                                       'default' => $request->wasPosted() ? $request->getCheck( 'listauthors' ) : false,
+                                       'name' => 'listauthors',
+                                       'id' => 'listauthors',
+                               ),
+                       );
                }
 
-               $form .= Xml::submitButton(
-                       $this->msg( 'export-submit' )->text(),
-                       Linker::tooltipAndAccesskeyAttribs( 'export' )
-               );
-               $form .= Xml::closeElement( 'form' );
-
-               $out->addHTML( $form );
+               $htmlForm = HTMLForm::factory( 'div', $formDescriptor, $this->getContext() );
+               $htmlForm->setSubmitTextMsg( 'export-submit' );
+               $htmlForm->prepareForm()->displayForm( false );
                $this->addHelpLink( 'Help:Export' );
        }
 
@@ -320,7 +335,6 @@ class SpecialExport extends SpecialPage {
                if ( $exportall ) {
                        $history = WikiExporter::FULL;
                } else {
-
                        $pageSet = array(); // Inverted index of all pages to look up
 
                        // Split up and normalize input
@@ -372,9 +386,9 @@ class SpecialExport extends SpecialPage {
                        $buffer = WikiExporter::STREAM;
 
                        // This might take a while... :D
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        set_time_limit( 0 );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                }
 
                $exporter = new WikiExporter( $db, $history, $buffer );
index e9639e1..d330b0e 100644 (file)
@@ -229,7 +229,7 @@ HTML;
                // 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  ) ) );
+               echo Xml::encodeJsCall( 'document.write', array( Html::inlineScript( $code ) ) );
        }
 
        private function plainQUnit() {
index 1c1f125..a276197 100644 (file)
@@ -73,9 +73,9 @@ class SpecialLockdb extends FormSpecialPage {
                        return Status::newFatal( 'locknoconfirm' );
                }
 
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $fp = fopen( $this->getConfig()->get( 'ReadOnlyFile' ), 'w' );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( false === $fp ) {
                        # This used to show a file not found error, but the likeliest reason for fopen()
index 60225ea..6c7133f 100644 (file)
@@ -109,7 +109,6 @@ class MIMEsearchPage extends QueryPage {
         * Return HTML to put just before the results.
         */
        function getPageHeader() {
-
                return Xml::openElement(
                                'form',
                                array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => wfScript() )
index 8f14a41..7a7979c 100644 (file)
@@ -236,7 +236,7 @@ class MediaStatisticsPage extends QueryPage {
                                        'mw-mediastats-table-' . strtolower( $mediaType ),
                                        'sortable',
                                        'wikitable'
-                               ))
+                               ) )
                        )
                );
                $this->getOutput()->addHTML( $this->getTableHeaderRow() );
@@ -275,7 +275,7 @@ class MediaStatisticsPage extends QueryPage {
                                array( 'class' => array(
                                        'mw-mediastats-mediatype',
                                        'mw-mediastats-mediatype-' . strtolower( $mediaType )
-                               )),
+                               ) ),
                                // for grep
                                // mediastatistics-header-unknown, mediastatistics-header-bitmap,
                                // mediastatistics-header-drawing, mediastatistics-header-audio,
index c8db1d8..5ef03f1 100644 (file)
@@ -79,7 +79,8 @@ class SpecialMycontributions extends RedirectSpecialPage {
        public function __construct() {
                parent::__construct( 'Mycontributions' );
                $this->mAllowedRedirectParams = array( 'limit', 'namespace', 'tagfilter',
-                       'offset', 'dir', 'year', 'month', 'feed' );
+                       'offset', 'dir', 'year', 'month', 'feed', 'deletedOnly',
+                       'nsInvert', 'associated', 'newOnly', 'topOnly' );
        }
 
        /**
index 899c736..251a8e0 100644 (file)
@@ -233,7 +233,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                                'name' => 'invert',
                                'label-message' => 'invert',
                                'default' => $nsinvert,
-                               'tooltip' => $this->msg( 'tooltip-invert' )->text(),
+                               'tooltip' => 'invert',
                        ),
                        'tagFilter' => array(
                                'type' => 'tagfilter',
@@ -594,7 +594,7 @@ class NewPagesPager extends ReverseChronologicalPager {
                foreach ( $this->mResult as $row ) {
                        $linkBatch->add( NS_USER, $row->rc_user_text );
                        $linkBatch->add( NS_USER_TALK, $row->rc_user_text );
-                       $linkBatch->add( $row->rc_namespace, $row->rc_title );
+                       $linkBatch->add( $row->page_namespace, $row->page_title );
                }
                $linkBatch->execute();
 
index 9476819..6756f27 100644 (file)
@@ -94,7 +94,7 @@ class SpecialPageLanguage extends FormSpecialPage {
        }
 
        protected function getDisplayFormat() {
-               return 'vform';
+               return 'ooui';
        }
 
        public function alterForm( HTMLForm $form ) {
index a2dc2ad..8cad616 100644 (file)
@@ -104,7 +104,7 @@ class SpecialPasswordReset extends FormSpecialPage {
        }
 
        protected function getDisplayFormat() {
-               return 'vform';
+               return 'ooui';
        }
 
        public function alterForm( HTMLForm $form ) {
index 0e1ce53..85ce78f 100644 (file)
@@ -67,10 +67,8 @@ class SpecialProtectedtitles extends SpecialPage {
         * @return string
         */
        function formatRow( $row ) {
-
                $title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
                if ( !$title ) {
-
                        return Html::rawElement(
                                'li',
                                array(),
index b5c9e19..e21eaeb 100644 (file)
@@ -89,6 +89,10 @@ class SpecialRandomInCategory extends FormSpecialPage {
                return false;
        }
 
+       protected function alterForm( HTMLForm $form ) {
+               $form->setSubmitTextMsg( 'randomincategory-submit' );
+       }
+
        protected function setParameter( $par ) {
                // if subpage present, fake form submission
                $this->onSubmit( array( 'category' => $par ) );
index ba2b9a5..27a3a69 100644 (file)
@@ -123,6 +123,10 @@ class SpecialResetTokens extends FormSpecialPage {
                }
        }
 
+       protected function getDisplayFormat() {
+               return 'ooui';
+       }
+
        public function onSubmit( array $formData ) {
                if ( $formData['tokens'] ) {
                        $user = $this->getUser();
index 7e842d5..77ebac3 100644 (file)
@@ -451,7 +451,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                Xml::closeElement( 'form' ) . "\n";
                        // Show link to edit the dropdown reasons
                        if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
-                               $link = Linker::link(
+                               $link = Linker::linkKnown(
                                        $this->msg( 'revdelete-reason-dropdown' )->inContentLanguage()->getTitle(),
                                        $this->msg( 'revdelete-edit-reasonlist' )->escaped(),
                                        array(),
index 8cf9367..286a745 100644 (file)
@@ -38,14 +38,14 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                $this->getOutput()->disable();
 
                if ( wfReadOnly() ) {
-                       header( "HTTP/1.0 423 Locked" );
+                       // HTTP 423 Locked
+                       HttpStatus::header( 423 );
                        print 'Wiki is in read-only mode';
 
                        return;
                } elseif ( !$this->getRequest()->wasPosted() ) {
-                       header( "HTTP/1.0 400 Bad Request" );
+                       HttpStatus::header( 400 );
                        print 'Request must be POSTed';
-
                        return;
                }
 
@@ -55,9 +55,8 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                $params = array_intersect_key( $this->getRequest()->getValues(), $required + $optional );
                $missing = array_diff_key( $required, $params );
                if ( count( $missing ) ) {
-                       header( "HTTP/1.0 400 Bad Request" );
+                       HttpStatus::header( 400 );
                        print 'Missing parameters: ' . implode( ', ', array_keys( $missing ) );
-
                        return;
                }
 
@@ -69,9 +68,8 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                $verified = is_string( $providedSignature )
                        && hash_equals( $correctSignature, $providedSignature );
                if ( !$verified || $params['sigexpiry'] < time() ) {
-                       header( "HTTP/1.0 400 Bad Request" );
+                       HttpStatus::header( 400 );
                        print 'Invalid or stale signature provided';
-
                        return;
                }
 
@@ -83,7 +81,8 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                        // but it needs to know when it is safe to disconnect. Until this
                        // reaches ignore_user_abort(), it is not safe as the jobs won't run.
                        ignore_user_abort( true ); // jobs may take a bit of time
-                       header( "HTTP/1.0 202 Accepted" );
+                       // HTTP 202 Accepted
+                       HttpStatus::header( 202 );
                        ob_flush();
                        flush();
                        // Once the client receives this response, it can disconnect
index ef50fed..bc1bb3d 100644 (file)
@@ -410,6 +410,9 @@ class SpecialSearch extends SpecialPage {
                if ( $prevnext ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
+
+               Hooks::run( 'SpecialSearchResultsAppend', array( $this, $out ) );
+
        }
 
        /**
index 64c2cf3..a6847e1 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialTags extends SpecialPage {
+
+       /**
+        * @var array List of explicitly defined tags
+        */
+       protected $explicitlyDefinedTags;
+
        /**
-        * @var array List of defined tags
+        * @var array List of extension defined tags
         */
-       public $definedTags;
+       protected $extensionDefinedTags;
+
        /**
-        * @var array List of active tags
+        * @var array List of extension activated tags
         */
-       public $activeTags;
+       protected $extensionActivatedTags;
 
        function __construct() {
                parent::__construct( 'Tags' );
@@ -69,9 +76,11 @@ class SpecialTags extends SpecialPage {
                $out->wrapWikiMsg( "<div class='mw-tags-intro'>\n$1\n</div>", 'tags-intro' );
 
                $user = $this->getUser();
+               $userCanManage = $user->isAllowed( 'managechangetags' );
+               $userCanEditInterface = $user->isAllowed( 'editinterface' );
 
                // Show form to create a tag
-               if ( $user->isAllowed( 'managechangetags' ) ) {
+               if ( $userCanManage ) {
                        $fields = array(
                                'Tag' => array(
                                        'type' => 'text',
@@ -108,40 +117,50 @@ class SpecialTags extends SpecialPage {
                        }
                }
 
-               // Whether to show the "Actions" column in the tag list
-               // If any actions added in the future require other user rights, add those
-               // rights here
-               $showActions = $user->isAllowed( 'managechangetags' );
+               // Used to get hitcounts for #doTagRow()
+               $tagStats = ChangeTags::tagUsageStatistics();
 
-               // Write the headers
-               $tagUsageStatistics = ChangeTags::tagUsageStatistics();
+               // Used in #doTagRow()
+               $this->explicitlyDefinedTags = array_fill_keys(
+                       ChangeTags::listExplicitlyDefinedTags(), true );
+               $this->extensionDefinedTags = array_fill_keys(
+                       ChangeTags::listExtensionDefinedTags(), true );
+
+               // List all defined tags, even if they were never applied
+               $definedTags = array_keys( array_merge(
+                       $this->explicitlyDefinedTags, $this->extensionDefinedTags ) );
 
                // Show header only if there exists atleast one tag
-               if ( !$tagUsageStatistics ) {
+               if ( !$tagStats && !$definedTags ) {
                        return;
                }
+
+               // Write the headers
                $html = Xml::tags( 'tr', null, Xml::tags( 'th', null, $this->msg( 'tags-tag' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-source-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() ) .
-                       ( $showActions ?
+                       ( $userCanManage ?
                                Xml::tags( 'th', array( 'class' => 'unsortable' ),
                                        $this->msg( 'tags-actions-header' )->parse() ) :
                                '' )
                );
 
                // Used in #doTagRow()
-               $this->explicitlyDefinedTags = array_fill_keys(
-                       ChangeTags::listExplicitlyDefinedTags(), true );
-               $this->extensionDefinedTags = array_fill_keys(
-                       ChangeTags::listExtensionDefinedTags(), true );
                $this->extensionActivatedTags = array_fill_keys(
                        ChangeTags::listExtensionActivatedTags(), true );
 
-               foreach ( $tagUsageStatistics as $tag => $hitcount ) {
-                       $html .= $this->doTagRow( $tag, $hitcount, $showActions );
+               // Insert tags that have been applied at least once
+               foreach ( $tagStats as $tag => $hitcount ) {
+                       $html .= $this->doTagRow( $tag, $hitcount, $userCanManage, $userCanEditInterface );
+               }
+               // Insert tags defined somewhere but never applied
+               foreach ( $definedTags as $tag ) {
+                       if ( !isset( $tagStats[$tag] ) ) {
+                               $html .= $this->doTagRow( $tag, 0, $userCanManage, $userCanEditInterface );
+                       }
                }
 
                $out->addHTML( Xml::tags(
@@ -151,13 +170,12 @@ class SpecialTags extends SpecialPage {
                ) );
        }
 
-       function doTagRow( $tag, $hitcount, $showActions ) {
-               $user = $this->getUser();
+       function doTagRow( $tag, $hitcount, $showActions, $showEditLinks ) {
                $newRow = '';
                $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
 
                $disp = ChangeTags::tagDescription( $tag );
-               if ( $user->isAllowed( 'editinterface' ) ) {
+               if ( $showEditLinks ) {
                        $disp .= ' ';
                        $editLink = Linker::link(
                                $this->msg( "tag-$tag" )->inContentLanguage()->getTitle(),
@@ -169,7 +187,7 @@ class SpecialTags extends SpecialPage {
 
                $msg = $this->msg( "tag-$tag-description" );
                $desc = !$msg->exists() ? '' : $msg->parse();
-               if ( $user->isAllowed( 'editinterface' ) ) {
+               if ( $showEditLinks ) {
                        $desc .= ' ';
                        $editDescLink = Linker::link(
                                $this->msg( "tag-$tag-description" )->inContentLanguage()->getTitle(),
@@ -209,10 +227,11 @@ class SpecialTags extends SpecialPage {
                $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLink );
 
                // actions
-               $actionLinks = array();
-               if ( $showActions ) {
+               if ( $showActions ) { // we've already checked that the user had the requisite userright
+                       $actionLinks = array();
+
                        // delete
-                       if ( ChangeTags::canDeleteTag( $tag, $user )->isOK() ) {
+                       if ( ChangeTags::canDeleteTag( $tag )->isOK() ) {
                                $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'delete' ),
                                        $this->msg( 'tags-delete' )->escaped(),
                                        array(),
@@ -220,7 +239,7 @@ class SpecialTags extends SpecialPage {
                        }
 
                        // activate
-                       if ( ChangeTags::canActivateTag( $tag, $user )->isOK() ) {
+                       if ( ChangeTags::canActivateTag( $tag )->isOK() ) {
                                $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'activate' ),
                                        $this->msg( 'tags-activate' )->escaped(),
                                        array(),
@@ -228,7 +247,7 @@ class SpecialTags extends SpecialPage {
                        }
 
                        // deactivate
-                       if ( ChangeTags::canDeactivateTag( $tag, $user )->isOK() ) {
+                       if ( ChangeTags::canDeactivateTag( $tag )->isOK() ) {
                                $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'deactivate' ),
                                        $this->msg( 'tags-deactivate' )->escaped(),
                                        array(),
@@ -318,7 +337,7 @@ class SpecialTags extends SpecialPage {
 
                $preText = $this->msg( 'tags-delete-explanation-initial', $tag )->parseAsBlock();
                $tagUsage = ChangeTags::tagUsageStatistics();
-               if ( $tagUsage[$tag] > 0 ) {
+               if ( isset( $tagUsage[$tag] ) && $tagUsage[$tag] > 0 ) {
                        $preText .= $this->msg( 'tags-delete-explanation-in-use', $tag,
                                $tagUsage[$tag] )->parseAsBlock();
                }
index 8a66273..5732ef9 100644 (file)
@@ -757,7 +757,7 @@ class SpecialUndelete extends SpecialPage {
         * @return bool
         */
        protected function isAllowed( $permission, User $user = null ) {
-               $user = $user ? : $this->getUser();
+               $user = $user ?: $this->getUser();
                if ( $this->mTargetObj !== null ) {
                        return $this->mTargetObj->userCan( $permission, $user );
                } else {
index a8b97d7..dc03a4a 100644 (file)
@@ -65,9 +65,9 @@ class SpecialUnlockdb extends FormSpecialPage {
                }
 
                $readOnlyFile = $this->getConfig()->get( 'ReadOnlyFile' );
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $res = unlink( $readOnlyFile );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $res ) {
                        return Status::newGood();
index 1618527..6b0bf41 100644 (file)
@@ -817,7 +817,7 @@ class UploadForm extends HTMLForm {
 
                # Add a link to edit MediaWik:Licenses
                if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
-                       $licensesLink = Linker::link(
+                       $licensesLink = Linker::linkKnown(
                                $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
                                $this->msg( 'licenses-edit' )->escaped(),
                                array(),
index 12e103e..ad329d3 100644 (file)
@@ -226,7 +226,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         */
        private function outputRemoteScaledThumb( $file, $params, $flags ) {
                // This option probably looks something like
-               // 'http://upload.wikimedia.org/wikipedia/test/thumb/temp'. Do not use
+               // '//upload.wikimedia.org/wikipedia/test/thumb/temp'. Do not use
                // trailing slash.
                $scalerBaseUrl = $this->getConfig()->get( 'UploadStashScalerBaseUrl' );
 
index 64a6f72..472fdb7 100644 (file)
@@ -453,8 +453,7 @@ class LoginForm extends SpecialPage {
         * @return Status
         */
        public function addNewAccountInternal() {
-               global $wgAuth, $wgMemc, $wgAccountCreationThrottle,
-                       $wgMinimalPasswordLength, $wgEmailConfirmToEdit;
+               global $wgAuth, $wgMemc, $wgAccountCreationThrottle, $wgEmailConfirmToEdit;
 
                // If the user passes an invalid domain, something is fishy
                if ( !$wgAuth->validDomain( $this->mDomain ) ) {
@@ -1283,8 +1282,9 @@ class LoginForm extends SpecialPage {
        function mainLoginForm( $msg, $msgtype = 'error' ) {
                global $wgEnableEmail, $wgEnableUserEmail;
                global $wgHiddenPrefs, $wgLoginLanguageSelector;
-               global $wgAuth, $wgEmailConfirmToEdit, $wgCookieExpiration;
+               global $wgAuth, $wgEmailConfirmToEdit;
                global $wgSecureLogin, $wgPasswordResetRoutes;
+               global $wgExtendedLoginCookieExpiration, $wgCookieExpiration;
 
                $titleObj = $this->getPageTitle();
                $user = $this->getUser();
@@ -1407,7 +1407,7 @@ class LoginForm extends SpecialPage {
                $template->set( 'emailothers', $wgEnableUserEmail );
                $template->set( 'canreset', $wgAuth->allowPasswordChange() );
                $template->set( 'resetlink', $resetLink );
-               $template->set( 'canremember', ( $wgCookieExpiration > 0 ) );
+               $template->set( 'canremember', $wgExtendedLoginCookieExpiration === null ? ( $wgCookieExpiration > 0 ) : ( $wgExtendedLoginCookieExpiration > 0 ) );
                $template->set( 'usereason', $user->isLoggedIn() );
                $template->set( 'remember', $this->mRemember );
                $template->set( 'cansecurelogin', ( $wgSecureLogin === true ) );
@@ -1529,7 +1529,6 @@ class LoginForm extends SpecialPage {
         */
        public static function getCreateaccountToken() {
                global $wgRequest;
-
                return $wgRequest->getSessionData( 'wsCreateaccountToken' );
        }
 
@@ -1604,22 +1603,21 @@ class LoginForm extends SpecialPage {
         */
        function makeLanguageSelector() {
                $msg = $this->msg( 'loginlanguagelinks' )->inContentLanguage();
-               if ( !$msg->isBlank() ) {
-                       $langs = explode( "\n", $msg->text() );
-                       $links = array();
-                       foreach ( $langs as $lang ) {
-                               $lang = trim( $lang, '* ' );
-                               $parts = explode( '|', $lang );
-                               if ( count( $parts ) >= 2 ) {
-                                       $links[] = $this->makeLanguageSelectorLink( $parts[0], trim( $parts[1] ) );
-                               }
-                       }
-
-                       return count( $links ) > 0 ? $this->msg( 'loginlanguagelabel' )->rawParams(
-                               $this->getLanguage()->pipeList( $links ) )->escaped() : '';
-               } else {
+               if ( $msg->isBlank() ) {
                        return '';
                }
+               $langs = explode( "\n", $msg->text() );
+               $links = array();
+               foreach ( $langs as $lang ) {
+                       $lang = trim( $lang, '* ' );
+                       $parts = explode( '|', $lang );
+                       if ( count( $parts ) >= 2 ) {
+                               $links[] = $this->makeLanguageSelectorLink( $parts[0], trim( $parts[1] ) );
+                       }
+               }
+
+               return count( $links ) > 0 ? $this->msg( 'loginlanguagelabel' )->rawParams(
+                       $this->getLanguage()->pipeList( $links ) )->escaped() : '';
        }
 
        /**
index 758e3c0..0158fdb 100644 (file)
@@ -106,7 +106,7 @@ class UserrightsPage extends SpecialPage {
                        }
                }
 
-               if ( User::getCanonicalName( $this->mTarget ) === $user->getName() ) {
+               if ( $this->mTarget !== null && User::getCanonicalName( $this->mTarget ) === $user->getName() ) {
                        $this->isself = true;
                }
 
@@ -145,6 +145,7 @@ class UserrightsPage extends SpecialPage {
                if (
                        $request->wasPosted() &&
                        $request->getCheck( 'saveusergroups' ) &&
+                       $this->mTarget !== null &&
                        $user->matchEditToken( $request->getVal( 'wpEditToken' ), $this->mTarget )
                ) {
                        // save settings
@@ -249,7 +250,7 @@ class UserrightsPage extends SpecialPage {
                if ( $remove ) {
                        foreach ( $remove as $index => $group ) {
                                if ( !$user->removeGroup( $group ) ) {
-                                       unset($remove[$index]);
+                                       unset( $remove[$index] );
                                }
                        }
                        $newGroups = array_diff( $newGroups, $remove );
@@ -257,7 +258,7 @@ class UserrightsPage extends SpecialPage {
                if ( $add ) {
                        foreach ( $add as $index => $group ) {
                                if ( !$user->addGroup( $group ) ) {
-                                       unset($add[$index]);
+                                       unset( $add[$index] );
                                }
                        }
                        $newGroups = array_merge( $newGroups, $add );
index 620c736..0a91957 100644 (file)
@@ -522,6 +522,9 @@ class SpecialVersion extends SpecialPage {
                $out .= Html::openElement( 'tr' )
                        . Html::element( 'th', array(), $this->msg( 'version-libraries-library' )->text() )
                        . Html::element( 'th', array(), $this->msg( 'version-libraries-version' )->text() )
+                       . Html::element( 'th', array(), $this->msg( 'version-libraries-license' )->text() )
+                       . Html::element( 'th', array(), $this->msg( 'version-libraries-description' )->text() )
+                       . Html::element( 'th', array(), $this->msg( 'version-libraries-authors' )->text() )
                        . Html::closeElement( 'tr' );
 
                foreach ( $lock->getInstalledDependencies() as $name => $info ) {
@@ -530,13 +533,28 @@ class SpecialVersion extends SpecialPage {
                                // in their proper section
                                continue;
                        }
+                       $authors = array_map( function( $arr ) {
+                               // If a homepage is set, link to it
+                               if ( isset( $arr['homepage'] ) ) {
+                                       return "[{$arr['homepage']} {$arr['name']}]";
+                               }
+                               return $arr['name'];
+                       }, $info['authors'] );
+                       $authors = $this->listAuthors( $authors, false, "$IP/vendor/$name" );
                        $out .= Html::openElement( 'tr' )
                                . Html::rawElement(
                                        'td',
                                        array(),
-                                       Linker::makeExternalLink( "https://packagist.org/packages/$name", $name )
+                                       Linker::makeExternalLink(
+                                               "https://packagist.org/packages/$name", $name,
+                                               true, '',
+                                               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::rawElement( 'td', array(), $authors )
                                . Html::closeElement( 'tr' );
                }
                $out .= Html::closeElement( 'table' );
@@ -959,7 +977,8 @@ class SpecialVersion extends SpecialPage {
         *   'and others' will be added to the end of the credits.
         *
         * @param string|array $authors
-        * @param string $extName Name of the extension for link creation
+        * @param string|bool $extName Name of the extension for link creation,
+        *   false if no links should be created
         * @param string $extDir Path to the extension root directory
         *
         * @return string HTML fragment
@@ -972,7 +991,7 @@ class SpecialVersion extends SpecialPage {
                        if ( $item == '...' ) {
                                $hasOthers = true;
 
-                               if ( $this->getExtAuthorsFileName( $extDir ) ) {
+                               if ( $extName && $this->getExtAuthorsFileName( $extDir ) ) {
                                        $text = Linker::link(
                                                $this->getPageTitle( "Credits/$extName" ),
                                                $this->msg( 'version-poweredby-others' )->escaped()
@@ -991,7 +1010,7 @@ class SpecialVersion extends SpecialPage {
                        }
                }
 
-               if ( !$hasOthers && $this->getExtAuthorsFileName( $extDir ) ) {
+               if ( $extName && !$hasOthers && $this->getExtAuthorsFileName( $extDir ) ) {
                        $list[] = $text = Linker::link(
                                $this->getPageTitle( "Credits/$extName" ),
                                $this->msg( 'version-poweredby-others' )->escaped()
@@ -1146,9 +1165,9 @@ class SpecialVersion extends SpecialPage {
                        }
 
                        // SimpleXml whines about the xmlns...
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $xml = simplexml_load_file( $entries );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        if ( $xml ) {
                                foreach ( $xml->entry as $entry ) {
index 8a1a6c6..a718aa8 100644 (file)
@@ -52,7 +52,7 @@ class WantedFilesPage extends WantedQueryPage {
                $noForeign = '';
                if ( !$this->likelyToHaveFalsePositives() ) {
                        // Additional messages for grep:
-                       // wantedfiletext-cat-noforeign, wantedfiletext-nocat
+                       // wantedfiletext-cat-noforeign, wantedfiletext-nocat-noforeign
                        $noForeign = '-noforeign';
                }
 
index fb89e4f..0892ce4 100644 (file)
@@ -30,7 +30,8 @@ class MalformedTitleException extends Exception {
        /**
         * @param string $errorMessage Localisation message describing the error (since MW 1.26)
         * @param string $titleText The invalid title text (since MW 1.26)
-        * @param string[] $errorMessageParameters Additional parameters for the error message. $titleText will be appended if it's not null. (since MW 1.26)
+        * @param string[] $errorMessageParameters Additional parameters for the error message.
+        * $titleText will be appended if it's not null. (since MW 1.26)
         */
        public function __construct( $errorMessage = null, $titleText = null, $errorMessageParameters = array() ) {
                $this->errorMessage = $errorMessage;
index d7c19ef..426c752 100644 (file)
@@ -288,7 +288,6 @@ abstract class UploadBase {
                 * If there was no filename or a zero size given, give up quick.
                 */
                if ( $this->isEmptyFile() ) {
-
                        return array( 'status' => self::EMPTY_FILE );
                }
 
@@ -297,7 +296,6 @@ abstract class UploadBase {
                 */
                $maxSize = self::getMaxUploadSize( $this->getSourceType() );
                if ( $this->mFileSize > $maxSize ) {
-
                        return array(
                                'status' => self::FILE_TOO_LARGE,
                                'max' => $maxSize,
@@ -311,7 +309,6 @@ abstract class UploadBase {
                 */
                $verification = $this->verifyFile();
                if ( $verification !== true ) {
-
                        return array(
                                'status' => self::VERIFICATION_ERROR,
                                'details' => $verification
@@ -323,7 +320,6 @@ abstract class UploadBase {
                 */
                $result = $this->validateName();
                if ( $result !== true ) {
-
                        return $result;
                }
 
@@ -331,7 +327,6 @@ abstract class UploadBase {
                if ( !Hooks::run( 'UploadVerification',
                        array( $this->mDestName, $this->mTempPath, &$error ) )
                ) {
-
                        return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
                }
 
@@ -380,7 +375,6 @@ abstract class UploadBase {
                        wfDebug( "mime: <$mime> extension: <{$this->mFinalExtension}>\n" );
                        global $wgMimeTypeBlacklist;
                        if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
-
                                return array( 'filetype-badmime', $mime );
                        }
 
@@ -394,7 +388,6 @@ abstract class UploadBase {
                        $ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
                        foreach ( $ieTypes as $ieType ) {
                                if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
-
                                        return array( 'filetype-bad-ie-mime', $ieType );
                                }
                        }
@@ -413,7 +406,6 @@ abstract class UploadBase {
 
                $status = $this->verifyPartialFile();
                if ( $status !== true ) {
-
                        return $status;
                }
 
@@ -423,7 +415,6 @@ abstract class UploadBase {
                if ( $wgVerifyMimeType ) {
                        # XXX: Missing extension will be caught by validateName() via getTitle()
                        if ( $this->mFinalExtension != '' && !$this->verifyExtension( $mime, $this->mFinalExtension ) ) {
-
                                return array( 'filetype-mime-mismatch', $this->mFinalExtension, $mime );
                        }
                }
@@ -433,7 +424,6 @@ abstract class UploadBase {
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath, false );
                                if ( $svgStatus !== false ) {
-
                                        return $svgStatus;
                                }
                        }
@@ -451,7 +441,6 @@ abstract class UploadBase {
 
                Hooks::run( 'UploadVerifyFile', array( $this, $mime, &$status ) );
                if ( $status !== true ) {
-
                        return $status;
                }
 
@@ -480,20 +469,17 @@ abstract class UploadBase {
                $mime = $this->mFileProps['file-mime'];
                $status = $this->verifyMimeType( $mime );
                if ( $status !== true ) {
-
                        return $status;
                }
 
                # check for htmlish code and javascript
                if ( !$wgDisableUploadScriptChecks ) {
                        if ( self::detectScript( $this->mTempPath, $mime, $this->mFinalExtension ) ) {
-
                                return array( 'uploadscripted' );
                        }
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath, true );
                                if ( $svgStatus !== false ) {
-
                                        return $svgStatus;
                                }
                        }
@@ -509,12 +495,10 @@ abstract class UploadBase {
                                $errors = $zipStatus->getErrorsArray();
                                $error = reset( $errors );
                                if ( $error[0] !== 'zip-wrong-format' ) {
-
                                        return $error;
                                }
                        }
                        if ( $this->mJavaDetected ) {
-
                                return array( 'uploadjava' );
                        }
                }
@@ -522,7 +506,6 @@ abstract class UploadBase {
                # Scan the uploaded file for viruses
                $virus = $this->detectVirus( $this->mTempPath );
                if ( $virus ) {
-
                        return array( 'uploadvirus', $virus );
                }
 
@@ -1076,7 +1059,6 @@ abstract class UploadBase {
                $chunk = strtolower( $chunk );
 
                if ( !$chunk ) {
-
                        return false;
                }
 
@@ -1100,7 +1082,6 @@ abstract class UploadBase {
 
                # check for HTML doctype
                if ( preg_match( "/<!DOCTYPE *X?HTML/i", $chunk ) ) {
-
                        return true;
                }
 
@@ -1108,7 +1089,6 @@ abstract class UploadBase {
                // PHP/expat will interpret the given encoding in the xml declaration (bug 47304)
                if ( $extension == 'svg' || strpos( $mime, 'image/svg' ) === 0 ) {
                        if ( self::checkXMLEncodingMissmatch( $file ) ) {
-
                                return true;
                        }
                }
@@ -1221,9 +1201,9 @@ abstract class UploadBase {
                // detect the encoding in case is specifies an encoding not whitelisted in self::$safeXmlEncodings
                $attemptEncodings = array( 'UTF-16', 'UTF-16BE', 'UTF-32', 'UTF-32BE' );
                foreach ( $attemptEncodings as $encoding ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $str = iconv( $encoding, 'UTF-8', $contents );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $str != '' && preg_match( "!<\?xml\b(.*?)\?>!si", $str, $matches ) ) {
                                if ( preg_match( $encodingRegex, $matches[1], $encMatch )
                                        && !in_array( strtoupper( $encMatch[1] ), self::$safeXmlEncodings )
index fc59ace..4c099b3 100644 (file)
@@ -241,7 +241,7 @@ class UploadFromUrl extends UploadBase {
                        wfDebugLog(
                                'fileupload',
                                'Short write ' . $this->nbytes . '/' . strlen( $buffer ) .
-                                       ' bytes, aborting with '  . $this->mFileSize . ' uploaded so far'
+                                       ' bytes, aborting with ' . $this->mFileSize . ' uploaded so far'
                        );
                        fclose( $this->mTmpHandle );
                        $this->mTmpHandle = false;
index 9cf8cab..7d63156 100644 (file)
@@ -119,13 +119,49 @@ class AutoloadGenerator {
        }
 
        /**
-        * Write out all known classes to autoload.php in
-        * the provided basedir
+        * Updates the AutoloadClasses field at the given
+        * filename.
         *
-        * @param string $commandName Value used in file comment to direct
-        *  developers towards the appropriate way to update the autoload.
+        * @param {string} $filename Filename of JSON
+        *  extension/skin registration file
         */
-       public function generateAutoload( $commandName = 'AutoloadGenerator' ) {
+       protected function generateJsonAutoload( $filename ) {
+               require_once __DIR__ . '/../../includes/json/FormatJson.php';
+               $key = 'AutoloadClasses';
+               $json = FormatJson::decode( file_get_contents( $filename ), true );
+               unset( $json[$key] );
+               // Inverting the key-value pairs so that they become of the
+               // format class-name : path when they get converted into json.
+               foreach ( $this->classes as $path => $contained ) {
+                       foreach ( $contained as $fqcn ) {
+
+                               // Using substr to remove the leading '/'
+                               $json[$key][$fqcn] = substr( $path, 1 );
+                       }
+               }
+               foreach ( $this->overrides as $path => $fqcn ) {
+
+                       // Using substr to remove the leading '/'
+                       $json[$key][$fqcn] = substr( $path, 1 );
+               }
+
+               // Sorting the list of autoload classes.
+               ksort( $json[$key] );
+
+               // Update file, using constants for the required
+               // formatting.
+               file_put_contents( $filename,
+                       FormatJson::encode( $json, true ) . "\n" );
+       }
+
+       /**
+        * Generates a PHP file setting up autoload information.
+        *
+        * @param {string} $commandName Command name to include in comment
+        * @param {string} $filename of PHP file to put autoload information in.
+        */
+       protected function generatePHPAutoload( $commandName, $filename ) {
+               // No existing JSON file found; update/generate PHP file
                $content = array();
 
                // We need to generate a line each rather than exporting the
@@ -163,7 +199,7 @@ class AutoloadGenerator {
 
                $output = implode( "\n\t", $content );
                file_put_contents(
-                       $this->basepath . '/autoload.php',
+                       $filename,
                        <<<EOD
 <?php
 // This file is generated by $commandName, do not adjust manually
@@ -176,8 +212,34 @@ global \${$this->variableName};
 
 EOD
                );
+
        }
 
+       /**
+        * Write out all known classes to autoload.php, extension.json, or skin.json in
+        * the provided basedir
+        *
+        * @param string $commandName Value used in file comment to direct
+        *  developers towards the appropriate way to update the autoload.
+        */
+       public function generateAutoload( $commandName = 'AutoloadGenerator' ) {
+
+               // We need to check whether an extenson.json or skin.json exists or not, and
+               // incase it doesn't, update the autoload.php file.
+
+               $jsonFilename = null;
+               if ( file_exists( $this->basepath . "/extension.json" ) ) {
+                       $jsonFilename = $this->basepath . "/extension.json";
+               } elseif ( file_exists( $this->basepath . "/skin.json" ) ) {
+                       $jsonFilename = $this->basepath . "/skin.json";
+               }
+
+               if ( $jsonFilename !== null ) {
+                       $this->generateJsonAutoload( $jsonFilename );
+               } else {
+                       $this->generatePHPAutoload( $commandName, $this->basepath . '/autoload.php' );
+               }
+       }
        /**
         * Ensure that Unix-style path separators ("/") are used in the path.
         *
index 4441236..dfcbe78 100644 (file)
@@ -375,6 +375,8 @@ class IP {
                                '127.0.0.0/8', # loopback
                                'fc00::/7', # RFC 4193 (local)
                                '0:0:0:0:0:0:0:1', # loopback
+                               '169.254.0.0/16', # link-local
+                               'fe80::/10', # link-local
                        ) );
                }
                return !$privateSet->match( $ip );
index e6c0e78..f223790 100644 (file)
@@ -96,9 +96,9 @@ class MWCryptRand {
                }
 
                foreach ( $files as $file ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $stat = stat( $file );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $stat ) {
                                // stat() duplicates data into numeric and string keys so kill off all the numeric ones
                                foreach ( $stat as $k => $v ) {
@@ -363,9 +363,9 @@ class MWCryptRand {
                        }
                        // /dev/urandom is generally considered the best possible commonly
                        // available random source, and is available on most *nix systems.
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $urandom = fopen( "/dev/urandom", "rb" );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        // Attempt to read all our random data from urandom
                        // php's fread always does buffered reads based on the stream's chunk_size
index cb32357..2d7d932 100644 (file)
@@ -52,7 +52,7 @@ class UIDGenerator {
                }
                // Try to get some ID that uniquely identifies this machine (RFC 4122)...
                if ( !preg_match( '/^[0-9a-f]{12}$/i', $nodeId ) ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        if ( wfIsWindows() ) {
                                // http://technet.microsoft.com/en-us/library/bb490913.aspx
                                $csv = trim( wfShellExec( 'getmac /NH /FO CSV' ) );
@@ -66,7 +66,7 @@ class UIDGenerator {
                                        wfShellExec( '/sbin/ifconfig -a' ), $m );
                                $nodeId = isset( $m[1] ) ? str_replace( ':', '', $m[1] ) : '';
                        }
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( !preg_match( '/^[0-9a-f]{12}$/i', $nodeId ) ) {
                                $nodeId = MWCryptRand::generateHex( 12, true );
                                $nodeId[1] = dechex( hexdec( $nodeId[1] ) | 0x1 ); // set multicast bit
diff --git a/includes/widget/AUTHORS.txt b/includes/widget/AUTHORS.txt
new file mode 100644 (file)
index 0000000..10064b2
--- /dev/null
@@ -0,0 +1,10 @@
+Authors (alphabetically)
+
+Alex Monk <krenair@wikimedia.org>
+Bartosz Dziewoński <bdziewonski@wikimedia.org>
+Ed Sanders <esanders@wikimedia.org>
+James D. Forrester <jforrester@wikimedia.org>
+Roan Kattouw <roan@wikimedia.org>
+Sucheta Ghoshal <sghoshal@wikimedia.org>
+Timo Tijhof <timo@wikimedia.org>
+Trevor Parscal <trevor@wikimedia.org>
diff --git a/includes/widget/LICENSE.txt b/includes/widget/LICENSE.txt
new file mode 100644 (file)
index 0000000..b03ca80
--- /dev/null
@@ -0,0 +1,25 @@
+Copyright (c) 2011-2015 MediaWiki Widgets Team and others under the
+terms of The MIT License (MIT), as follows:
+
+This software consists of voluntary contributions made by many
+individuals (AUTHORS.txt) For exact contribution history, see the
+revision history and logs, available at https://gerrit.wikimedia.org
+
+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/includes/widget/TitleInputWidget.php b/includes/widget/TitleInputWidget.php
new file mode 100644 (file)
index 0000000..7ddc67a
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * MediaWiki Widgets – TitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+use OOUI\TextInputWidget;
+
+/**
+ * Title input widget.
+ */
+class TitleInputWidget extends TextInputWidget {
+
+       protected $namespace = null;
+       protected $relative = 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)
+        */
+       public function __construct( array $config = array() ) {
+               // Parent constructor
+               parent::__construct( array_merge( $config, array( 'infusable' => true ) ) );
+
+               // 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'];
+               }
+
+               // Initialization
+               $this->addClasses( array( 'mw-widget-TitleInputWidget' ) );
+       }
+
+       public function getConfig( &$config ) {
+               if ( $this->namespace !== null ) {
+                       $config['namespace'] = $this->namespace;
+               }
+               if ( $this->relative !== null ) {
+                       $config['relative'] = $this->relative;
+               }
+               return parent::getConfig( $config );
+       }
+}
index e6625c1..e3a4f77 100644 (file)
@@ -155,18 +155,20 @@ class ConverterRule {
                        $to = trim( $v[1] );
                        $v = trim( $v[0] );
                        $u = explode( '=>', $v, 2 );
-                       // if $to is empty, strtr() could return a wrong result
-                       if ( count( $u ) == 1 && $to && in_array( $v, $variants ) ) {
+                       // if $to is empty (which is also used as $from in bidtable),
+                       // strtr() could return a wrong result.
+                       if ( count( $u ) == 1 && $to !== '' && in_array( $v, $variants ) ) {
                                $bidtable[$v] = $to;
                        } elseif ( count( $u ) == 2 ) {
                                $from = trim( $u[0] );
                                $v = trim( $u[1] );
+                               // if $from is empty, strtr() could return a wrong result.
                                if ( array_key_exists( $v, $unidtable )
                                        && !is_array( $unidtable[$v] )
-                                       && $to
+                                       && $from !== ''
                                        && in_array( $v, $variants ) ) {
                                        $unidtable[$v] = array( $from => $to );
-                               } elseif ( $to && in_array( $v, $variants ) ) {
+                               } elseif ( $from !== '' && in_array( $v, $variants ) ) {
                                        $unidtable[$v][$from] = $to;
                                }
                        }
@@ -220,17 +222,17 @@ class ConverterRule {
                        // display current variant in bidirectional array
                        $disp = $this->getTextInBidtable( $variant );
                        // or display current variant in fallbacks
-                       if ( !$disp ) {
+                       if ( $disp === false ) {
                                $disp = $this->getTextInBidtable(
                                        $this->mConverter->getVariantFallbacks( $variant ) );
                        }
                        // or display current variant in unidirectional array
-                       if ( !$disp && array_key_exists( $variant, $unidtable ) ) {
+                       if ( $disp === false && array_key_exists( $variant, $unidtable ) ) {
                                $disp = array_values( $unidtable[$variant] );
                                $disp = $disp[0];
                        }
                        // or display frist text under disable manual convert
-                       if ( !$disp && $this->mConverter->mManualLevel[$variant] == 'disable' ) {
+                       if ( $disp === false && $this->mConverter->mManualLevel[$variant] == 'disable' ) {
                                if ( count( $bidtable ) > 0 ) {
                                        $disp = array_values( $bidtable );
                                        $disp = $disp[0];
@@ -325,7 +327,7 @@ class ConverterRule {
                                && isset( $unidtable[$v] )
                        ) {
                                if ( isset( $this->mConvTable[$v] ) ) {
-                                       $this->mConvTable[$v] = array_merge( $this->mConvTable[$v], $unidtable[$v] );
+                                       $this->mConvTable[$v] = $unidtable[$v] + $this->mConvTable[$v];
                                } else {
                                        $this->mConvTable[$v] = $unidtable[$v];
                                }
@@ -383,9 +385,11 @@ class ConverterRule {
 
                if ( !$this->mBidtable && !$this->mUnidtable ) {
                        if ( isset( $flags['+'] ) || isset( $flags['-'] ) ) {
-                               // fill all variants if text in -{A/H/-|text} without rules
-                               foreach ( $this->mConverter->mVariants as $v ) {
-                                       $this->mBidtable[$v] = $rules;
+                               // fill all variants if text in -{A/H/-|text}- is non-empty but without rules
+                               if ( $rules !== '' ) {
+                                       foreach ( $this->mConverter->mVariants as $v ) {
+                                               $this->mBidtable[$v] = $rules;
+                                       }
                                }
                        } elseif ( !isset( $flags['N'] ) && !isset( $flags['T'] ) ) {
                                $this->mFlags = $flags = array( 'R' => true );
index 0634d9f..fe0bd7e 100644 (file)
@@ -149,6 +149,28 @@ class Language {
         */
        static private $languageNameCache;
 
+       /**
+        * Unicode directional formatting characters, for embedBidi()
+        */
+       static private $lre = "\xE2\x80\xAA"; // U+202A LEFT-TO-RIGHT EMBEDDING
+       static private $rle = "\xE2\x80\xAB"; // U+202B RIGHT-TO-LEFT EMBEDDING
+       static private $pdf = "\xE2\x80\xAC"; // U+202C POP DIRECTIONAL FORMATTING
+
+       /**
+        * Directionality test regex for embedBidi(). 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.
+        *
+        * The form is '/(?:([strong ltr codepoint])|([strong rtl codepoint]))/u' .
+        *
+        * Generated by UnicodeJS (see tools/strongDir) from the UCD; see
+        * https://git.wikimedia.org/summary/unicodejs.git .
+        */
+       // @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
+
        /**
         * Get a cached or new language object for a given language code
         * @param string $code
@@ -1336,7 +1358,7 @@ class Language {
                                case 'xmn':
                                        $usedHijriMonth = true;
                                        if ( !$hijri ) {
-                                               $hijri = self::tsToHijri ( $ts );
+                                               $hijri = self::tsToHijri( $ts );
                                        }
                                        $num = $hijri[1];
                                        break;
@@ -1992,6 +2014,29 @@ class Language {
                return array( $gy_offset, $gm, $gd );
        }
 
+       /**
+        * Gets directionality of the first strongly directional codepoint, for embedBidi()
+        *
+        * 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.
+        *
+        * @param string $text Text to test
+        * @return null|string Directionality ('ltr' or 'rtl') or null
+        */
+       private static function strongDirFromContent( $text = '' ) {
+               if ( !preg_match( self::$strongDirRegex, $text, $matches ) ) {
+                       return null;
+               }
+               if ( $matches[1] === '' ) {
+                       return 'rtl';
+               }
+               return 'ltr';
+       }
+
        /**
         * Roman number formatting up to 10000
         *
@@ -2127,9 +2172,9 @@ class Language {
                $data = explode( '|', $tz, 3 );
 
                if ( $data[0] == 'ZoneInfo' ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $userTZ = timezone_open( $data[2] );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $userTZ !== false ) {
                                $date = date_create( $ts, timezone_open( 'UTC' ) );
                                date_timezone_set( $date, $userTZ );
@@ -2164,7 +2209,7 @@ class Language {
                        return $ts;
                }
 
-               wfSuppressWarnings(); // E_STRICT system time bitching
+               MediaWiki\suppressWarnings(); // E_STRICT system time bitching
                # Generate an adjusted date; take advantage of the fact that mktime
                # will normalize out-of-range values so we don't have to split $minDiff
                # into hours and minutes.
@@ -2177,7 +2222,7 @@ class Language {
                        (int)substr( $ts, 0, 4 ) ); # Year
 
                $date = date( 'YmdHis', $t );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                return $date;
        }
@@ -2626,9 +2671,9 @@ class Language {
                # *input* string. We just ignore those too.
                # REF: http://bugs.php.net/bug.php?id=37166
                # REF: https://bugzilla.wikimedia.org/show_bug.cgi?id=16885
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $text = iconv( $in, $out . '//IGNORE', $string );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                return $text;
        }
 
@@ -3444,7 +3489,7 @@ class Language {
                                // the string does not have any number part. Eg: .12345
                                return $sign . $groupedNumber;
                        }
-                       $start = $end = ($integerPart) ? strlen( $integerPart[0] ) : 0;
+                       $start = $end = ( $integerPart ) ? strlen( $integerPart[0] ) : 0;
                        while ( $start > 0 ) {
                                $match = $matches[0][$numMatches - 1];
                                $matchLen = strlen( $match );
@@ -3966,6 +4011,36 @@ class Language {
                return $forms;
        }
 
+       /**
+        * 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.
+        *
+        * @param string $text Text to wrap
+        * @return string Text, wrapped in LRE...PDF or RLE...PDF or nothing
+        */
+       public function embedBidi( $text = '' ) {
+               $dir = Language::strongDirFromContent( $text );
+               if ( $dir === 'ltr' ) {
+                       // Wrap in LEFT-TO-RIGHT EMBEDDING ... POP DIRECTIONAL FORMATTING
+                       return self::$lre . $text . self::$pdf;
+               }
+               if ( $dir === 'rtl' ) {
+                       // Wrap in RIGHT-TO-LEFT EMBEDDING ... POP DIRECTIONAL FORMATTING
+                       return self::$rle . $text . self::$pdf;
+               }
+               // No strong directionality: do not wrap
+               return $text;
+       }
+
        /**
         * @todo Maybe translate block durations.  Note that this function is somewhat misnamed: it
         * deals with translating the *duration* ("1 week", "4 days", etc), not the expiry time
index a6b687c..7879309 100644 (file)
@@ -502,13 +502,9 @@ class LanguageConverter {
                        }
 
                        if ( $action == 'add' ) {
+                               // More efficient than array_merge(), about 2.5 times.
                                foreach ( $pair as $from => $to ) {
-                                       // to ensure that $from and $to not be left blank
-                                       // so $this->translate() could always return a string
-                                       if ( $from || $to ) {
-                                               // more efficient than array_merge(), about 2.5 times.
-                                               $this->mTables[$variant]->setPair( $from, $to );
-                                       }
+                                       $this->mTables[$variant]->setPair( $from, $to );
                                }
                        } elseif ( $action == 'remove' ) {
                                $this->mTables[$variant]->removeArray( $pair );
@@ -996,7 +992,7 @@ class LanguageConverter {
                if ( $recursive ) {
                        foreach ( $sublinks as $link ) {
                                $s = $this->parseCachedTable( $code, $link, $recursive );
-                               $ret = array_merge( $ret, $s );
+                               $ret = $s + $ret;
                        }
                }
 
index ddd40f1..6d537d3 100644 (file)
        'diq' => 'Zazaki',              # Zazaki
        'dsb' => 'dolnoserbski', # Lower Sorbian
        'dtp' => 'Dusun Bundu-liwan', # Central Dusun
+       'dty' => 'डोटेली', # Doteli
        'dv' => 'ދިވެހިބަސް',         # Dhivehi
        'dz' => 'ཇོང་ཁ',              # Dzongkha (Bhutan)
        'ee' => 'eʋegbe',      # Éwé
        'gl' => 'galego',               # Galician
        'glk' => 'گیلکی',  # Gilaki
        'gn' => 'Avañe\'ẽ',  # Guaraní, Paraguayan
-       'gom-latn' => 'Konknni',        # Goan Konkani (Latin script)
+       'gom' => 'गोवा कोंकणी / Gova Konknni',      # Goan Konkani
+       'gom-deva' => 'गोवा कोंकणी',        # Goan Konkani (Devanagari script)
+       'gom-latn' => 'Gova Konknni',   # Goan Konkani (Latin script)
        'got' => '𐌲𐌿𐍄𐌹𐍃𐌺',    # Gothic
        'grc' => 'Ἀρχαία ἑλληνικὴ', # Ancient Greek
        'gsw' => 'Alemannisch', # Alemannic
        'lmo' => 'lumbaart',    # Lombard
        'ln' => 'lingála',             # Lingala
        'lo' => 'ລາວ',    # Laotian
-       'lrc' => 'لوری مینجایی',     # Northern Luri
+       'lrc' => 'لۊری شومالی',       # Northern Luri
        'loz' => 'Silozi', # Lozi
        'lt' => 'lietuvių',    # Lithuanian
        'ltg' => 'latgaļu',    # Latgalian
index 15fc8c0..1b7dbfa 100644 (file)
@@ -61,7 +61,7 @@ class LanguageEo extends Language {
         */
        function iconv( $in, $out, $string ) {
                if ( strcasecmp( $in, 'x' ) == 0 && strcasecmp( $out, 'utf-8' ) == 0 ) {
-                       return preg_replace_callback (
+                       return preg_replace_callback(
                                '/([cghjsu]x?)((?:xx)*)(?!x)/i',
                                array( $this, 'strrtxuCallback' ), $string );
                } elseif ( strcasecmp( $in, 'UTF-8' ) == 0 && strcasecmp( $out, 'x' ) == 0 ) {
index 2379cac..a96b0a9 100644 (file)
@@ -149,10 +149,10 @@ class LanguageFi extends Language {
                );
 
                $final = '';
-               $tokens = explode ( ' ', $str );
+               $tokens = explode( ' ', $str );
                foreach ( $tokens as $item ) {
                        if ( !is_numeric( $item ) ) {
-                               if ( count ( explode( '-', $item ) ) == 3 && strlen( $item ) == 10 ) {
+                               if ( count( explode( '-', $item ) ) == 3 && strlen( $item ) == 10 ) {
                                        list( $yyyy, $mm, $dd ) = explode( '-', $item );
                                        $final .= ' ' . $this->date( "{$yyyy}{$mm}{$dd}000000" );
                                        continue;
index 6b6c95d..ddd866f 100644 (file)
@@ -91,7 +91,7 @@ class LanguageKsh extends Language {
        function convertGrammar( $word, $case ) {
                $lord = strtolower( $word );
                $gender = 'm'; // Nuutnaarel // default
-               if ( preg_match ( '/wiki$/', $lord ) ) {
+               if ( preg_match( '/wiki$/', $lord ) ) {
                        $gender = 'n';  // Dat xyz-wiki
                }
                if ( isset( self::$familygender[$lord] ) ) {
index 78b5e06..f11d703 100644 (file)
@@ -20,7 +20,8 @@
                        "Xethron",
                        "පසිඳු කාවින්ද",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Fwolff"
                ]
        },
        "tog-underline": "Onderstreep skakels.",
        "resetpass-wrong-oldpass": "Die huidige of tydelike wagwoord is ongeldig.\nU het moontlik reeds u wagwoord gewysig of 'n nuwe tydelike wagwoord aangevra.",
        "resetpass-temp-password": "Tydelike wagwoord:",
        "resetpass-abort-generic": "Wysiging van wagwoord is deur 'n uitbreiding gestop.",
-       "passwordreset": "Wagwoord herstel",
+       "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",
        "preview": "Voorskou",
        "showpreview": "Wys voorskou",
        "showdiff": "Wys veranderings",
-       "anoneditwarning": "'''Waarskuwing:''' u is nie aangemeld nie. U IP-adres sal in die bladsy se wysigingsgeskiedenis gestoor word. As u <strong>[$1 aanmeld]</strong> of <strong>[$2 'n gebruiker skep]</strong verskyn u wysigings, naas andere voordele, onder u gebruikersnaam.",
+       "anoneditwarning": "'''Waarskuwing:''' u is nie aangemeld nie. U IP-adres sal in die bladsy se wysigingsgeskiedenis gestoor word. As u <strong>[$1 aanmeld]</strong> of <strong>[$2 'n rekening skep]</strong> verskyn u wysigings onder u gebruikersnaam, naas andere voordele.",
        "anonpreviewwarning": "''U is nie aangeteken nie.''\n''As u die bladsy stoor sal u IP-adres in die bladsy se geskeidenis aangeteken word.''",
        "missingsummary": "'''Neem kennis''': Geen opsomming van die wysiging is verskaf nie. As \"Stoor\" weer gekliek word, word die wysiging sonder 'n opsomming gestoor.",
        "missingcommenttext": "Tik die opsomming onder.",
        "download": "laai af",
        "unwatchedpages": "Bladsye wat nie dopgehou word nie",
        "listredirects": "Lys aansture",
-       "listduplicatedfiles": "Lys van lrs met duplikate",
+       "listduplicatedfiles": "Lys van lêers met duplikate",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] het [[$3|{{PLURAL:$2|'n duplikaat|$2 duplikate}}]].",
        "unusedtemplates": "Ongebruikte sjablone",
        "unusedtemplatestext": "Hierdie blad lys alle bladsye in die {{ns:template}}-naamruimte wat nêrens in 'n ander blad ingesluit word nie. Onthou om ook ander skakels na die sjablone na te gaan voor verwydering.",
        "watchnologin": "Nie ingeteken nie",
        "addwatch": "Voeg by dophoulys",
        "addedwatchtext": "Die bladsy \"[[:$1]]\" is by u [[Special:Watchlist|dophoulys]] bygevoeg.\nToekomstige wysigings aan hierdie bladsy en sy bybehorende besprekingsblad sal hier gelys word.",
+       "addedwatchtext-short": "Die bladsy \"$1\" is by u dophoulys gevoeg.",
        "removewatch": "Verwyder van dophoulys",
        "removedwatchtext": "Die bladsy \"[[:$1]]\" is van [[Special:Watchlist|u dophoulys]] afgehaal.",
+       "removedwatchtext-short": "Die bladsy \"$1\" is uit die dophoulys verwyder.",
        "watch": "Hou dop",
        "watchthispage": "Hou hierdie bladsy dop",
        "unwatch": "Verwyder van dophoulys",
        "nonfile-cannot-move-to-file": "Net lêers kan na die lêernaamruimte geskuif word",
        "imagetypemismatch": "Die nuwe lêer se uitbreiding pas nie by die lêertipe nie",
        "imageinvalidfilename": "Die nuwe lêernaam is ongeldig",
-       "fix-double-redirects": "Opdateer alle aansture wat na die oorspronklike titel wys",
+       "fix-double-redirects": "Dateer alle aansture op wat na die oorspronklike titel wys",
        "move-leave-redirect": "Los 'n aanstuur agter",
        "protectedpagemovewarning": "'''Waarskuwing:''' Hierdie bladsy kan slegs deur administrateurs geskuif word. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
        "semiprotectedpagemovewarning": "'''Let wel:''' Hierdie bladsy kan slegs deur geregistreerde gebruikers geskuif word. Die nuutste logboekinskrywing word hieronder ter verwysing vertoon:",
        "pageinfo-header-edits": "Wysigingsgeskiedenis",
        "pageinfo-header-restrictions": "Bladsybeskerming",
        "pageinfo-header-properties": "Bladsy-eienskappe",
-       "pageinfo-display-title": "Wys titel",
+       "pageinfo-display-title": "Vertoontitel",
        "pageinfo-default-sort": "Standaard sorteerwyse",
-       "pageinfo-length": "Bldasylengte (in grepe)",
+       "pageinfo-length": "Bladsylengte (in grepe)",
        "pageinfo-article-id": "Bladsy-ID",
        "pageinfo-language": "Taal vir die bladsy",
        "pageinfo-robot-policy": "Status vir soekenjins",
        "redirect-revision": "Bladsy-weergawe",
        "redirect-file": "Lêernaam",
        "redirect-not-exists": "Waarde nie gevind nie",
-       "fileduplicatesearch": "Soek duplikaat lêers",
-       "fileduplicatesearch-summary": "Soek na duplikaat lêers volgends hul hashwaardes.",
+       "fileduplicatesearch": "Soek duplikaatlêers",
+       "fileduplicatesearch-summary": "Soek na duplikaatlêers volgens hul hutswaardes.",
        "fileduplicatesearch-legend": "Soek vir 'n duplikaat",
        "fileduplicatesearch-filename": "Lêernaam:",
        "fileduplicatesearch-submit": "Soek",
        "api-error-copyuploaddisabled": "Oplaai via URL is gedeaktiveer op hierdie bediener.",
        "api-error-duplicate": "Daar {{PLURAL:$1|is al [$2 'n lêer]|is al [$2 lêers]}} met dieselfde inhoud op die wiki.",
        "api-error-duplicate-archive": "Daar {{PLURAL:$1|was [$2 'n ander lêer]|was [$2 ander lêers]}} op hierdie webtuiste met dieselfde inhoud, maar {{PLURAL:$1|dit is|dit is}} geskrap.",
-       "api-error-duplicate-archive-popup-title": "Duplikaat {{PLURAL:$1|lêer|lêers}} wat al verwyder is.",
-       "api-error-duplicate-popup-title": "Duplikaat {{PLURAL:$1|lêer|lêers}}",
+       "api-error-duplicate-archive-popup-title": "Duplikaat{{PLURAL:$1|lêer|lêers}} wat al verwyder is.",
+       "api-error-duplicate-popup-title": "Duplikaat{{PLURAL:$1|lêer|lêers}}",
        "api-error-empty-file": "Die lêer wat u probeer oplaai is leeg.",
        "api-error-emptypage": "Die skep van leë nuwe bladsye word nie toegelaat nie.",
        "api-error-fetchfileerror": "Interne fout: Iets het verkeerd gegaan met die haal van die lêer.",
index aa137c3..c8667e9 100644 (file)
        "no-null-revision": "تعذر إنشاء مراجعة جديدة فارغة لصفحة \"$1\"",
        "badtitle": "عنوان سيء",
        "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الرابط بين اللغات أو بين المشاريع خاطئ.\nربما يحوي محارف لا تصلح للاستخدام في العناوين.",
+       "title-invalid-empty": "عنوان الصفحة المطلوبة فارغ أو يحتوي اسم النطاق فقط.",
+       "title-invalid-interwiki": "عنوان الصفحة المطلوب يتضمن وصلة لحلقة لغة وهو ما لا يمكن استخدامه في العناوين.",
+       "title-invalid-talk-namespace": "عنوان الصفحة المطلوبة يشير إلى صفحة نقاش غير موجودة.",
+       "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن محارف غير صالحة: \"$1\"",
        "perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
        "perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.",
        "querypage-no-updates": "تحديثات هذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
        "passwordreset": "إعادة ضبط كلمة السر",
        "passwordreset-text-one": "أكمل هذا النموذج لإعادة ضبط كلمة السر الخاصة بك.",
        "passwordreset-text-many": "{{PLURAL:$1||املأ الحقل لتستعيد كلمة السر|املأ أحد الحقلين لتستعيد كلمة السر|املأ أحد الحقول لتستعيد كلمة السر}}.",
-       "passwordreset-legend": "إعادة تعيين كلمة السر",
        "passwordreset-disabled": "عُطّلت إعادة تعيين كلمة السر على هذه الويكي.",
        "passwordreset-emaildisabled": "تم تعطيل ميزات البريد الإلكتروني على هذه الويكي.",
        "passwordreset-username": "اسم المستخدم:",
        "resettokens": "غير المفاتيح",
        "resettokens-text": " يمكن تغيير المفاتيح من الاطلاع على البيانات الخصوصية المتعلقة بحسابك.\nغير المفاتيح إذا أطلعت عليها أحدهم عن طريف الخطأ أو إذا كان حسابك قد اخترق.",
        "resettokens-no-tokens": "ما من مفاتيح للتغيير.",
-       "resettokens-legend": "غير المفاتيح",
        "resettokens-tokens": "مفاتيح:",
        "resettokens-token-label": "$1 (القيمة الحالية: $2)",
        "resettokens-watchlist-token": "رمز تغذية الوب (آتوم/آس إس إس) [[Special:Watchlist|للتغيرات التي على قائمة مراقبتك]]",
        "missingcommentheader": "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق.\nإذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
        "summary-preview": "معاينة الملخص:",
        "subject-preview": "معاينة للموضوع/العنوان:",
+       "previewerrortext": "حدث خطأ أثناء محاولة معاينة تغييراتك.",
        "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من فضلك اذكر كل التفاصيل بالأعلى في أي استعلامات تقوم بها.",
        "creating": "إنشاء «$1»",
        "editingsection": "تعديل $1 (قسم)",
        "editingcomment": "إنشاء قسم من «$1»",
-       "editconflict": "تضارب في التحرير: $1",
+       "editconflict": "تضارب تحرير: $1",
        "explainconflict": "لقد عدل شخص آخر هذه الصفحة بعد أن بدأت أنت بتحريرها.\nصندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.\nالتعديلات التي أجريتها أنت معروضة في الصندوق أسفله.\nويلزم دمجها في النص الموجود حاليا.\n'''لن يحفظ''' بعد الضغط على زر \"احفظ الصفحة\" '''إلا''' ما هو موجود في الصندوق العلوي.",
        "yourtext": "نصك",
        "storedversion": "النسخة المخزنة",
        "right-override-export-depth": "تصدير الصفحات متضمنة الصفحات الموصولة حتى عمق 5",
        "right-sendemail": "إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين",
        "right-passwordreset": "عرض رسائل إعادة ضبط كلمات السر",
+       "right-managechangetags": "إنشاء وحذف [[Special:Tags|الوسوم]] من قاعدة البيانات",
+       "right-applychangetags": "تطبيق [[Special:Tags|الوسوم]]  مع التغييرات التي أجريتها.",
        "newuserlogpage": "سجل إنشاء المستخدمين",
        "newuserlogpagetext": "هذا سجل بعمليات إنشاء المستخدمين.",
        "rightslog": "سجل صلاحيات المستخدمين",
        "action-viewmyprivateinfo": "مشاهدة معلوماتك الخاصة",
        "action-editmyprivateinfo": "تعديل معلوماتك الخاصة",
        "action-editcontentmodel": "عدل عدل طريقة محتوى صفحة",
+       "action-managechangetags": "إنشاء وحذف الوسوم من قاعدة البيانات",
+       "action-applychangetags": "تطبيق الوسوم مع تغييراتك",
        "nchanges": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|منذ الزيارة الأخيرة}}",
        "enhancedrc-history": "تاريخ",
        "listfiles-delete": "حذف",
        "listfiles-summary": "هذه الصفحة الخاصة تعرض كل الملفات المرفوعة.",
        "listfiles_search_for": "ابحث عن اسم الميديا:",
+       "listfiles-userdoesnotexist": "حساب المستخدم \"$1\" غير مسجل.",
        "imgfile": "ملف",
        "listfiles": "قائمة الملفات",
        "listfiles_thumb": "تصغير",
        "randomincategory-nopages": "لا توجد صفحات في التصنيف [[:Category:$1|$1]].",
        "randomincategory-category": "التصنيف:",
        "randomincategory-legend": "صفحة عشوائية في التصنيف",
+       "randomincategory-submit": "اذهب",
        "randomredirect": "تحويلة عشوائية",
        "randomredirect-nopages": "لا توجد تحويلات في النطاق \"$1\".",
        "statistics": "إحصاءات",
        "nmembers": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|عضو|أعضاء}}",
        "nrevisions": "{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}",
-       "nviews": "{{PLURAL:$1|مشاهدة واحدة|مشاهدتان|$1 مشاهدات|$1 مشاهدة}}",
        "nimagelinks": "مستخدم في {{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}}",
        "ntransclusions": "مستخدم في {{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}}",
        "specialpage-empty": "لا توجد نتائج لهذا التقرير.",
        "logempty": "لا توجد مدخلات مطابقة في السجل.",
        "log-title-wildcard": "ابحث عن عناوين تبدأ بهذا النص",
        "showhideselectedlogentries": "غير رؤية مدخلات السجل المختارة",
+       "log-edit-tags": "عدل وسوم مدخلات السجل المختار",
        "allpages": "كل الصفحات",
        "nextpage": "الصفحة التالية ($1)",
        "prevpage": "الصفحة السابقة ($1)",
        "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]]\"",
        "import-interwiki-history": "انسخ كل نسخ التاريخ لهذه الصفحة",
        "import-interwiki-templates": "ضمن كل القوالب",
        "import-interwiki-submit": "استيراد",
+       "import-mapping-namespace": "استورد إلى نطاق:",
        "import-upload-filename": "اسم الملف:",
        "import-comment": "تعليق:",
        "importtext": "من فضلك صدر الملف من الويكي المصدر باستخدام [[Special:Export|أداة التصدير]].\nاحفظها على حاسوبك ثم ارفعها هنا.",
        "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": "النسخ السابقة لهذه الصفحة",
        "deletedwhileediting": "'''تحذير''': هذه الصفحة تم حذفها بعد أن بدأت أنت بتعديلها!",
        "confirmrecreate": "حذف المستخدم [[User:$1|$1]] ([[User talk:$1|نقاش]]) هذه الصفحة بعد أن بدأت أنت بتحريرها للسبب التالي:\n:''$2''\nالرجاء التأكد من أنك تريد إعادة إنشاء هذه الصفحة.",
        "confirmrecreate-noreason": "حذف المستخدم [[User:$1|$1]] ([[User talk:$1|نقاش]]) هذه الصفحة بعد أن بدأت أنت بتحريرها. الرجاء التأكد من أنك تريد إعادة إنشاء هذه الصفحة.",
-       "recreate": "أعد Ø§Ù\84إنشاء",
+       "recreate": "إعادة إنشاء",
        "unit-pixel": "بك",
        "confirm_purge_button": "موافق",
        "confirm-purge-top": "امسح مختزن هذه الصفحة؟",
        "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/Example.jpg]] أو [[{{#Special:Redirect}}/revision/328429]] أو [[{{#Special:Redirect}}/user/101]].",
        "tags-activate": "نشط",
        "tags-deactivate": "تعطيل",
        "tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
+       "tags-manage-no-permission": "ليس لديك صلاحية إدارة وسوم التغيير.",
+       "tags-create-heading": "إنشاء وسم جديد",
+       "tags-create-explanation": "في الوضع الافتراضي، الوسوم الجديدة المنشأة سيتاح استخدامها للبوتات والمستخدمين.",
        "tags-create-tag-name": "اسم الوسم:",
        "tags-create-reason": "السبب:",
        "tags-create-submit": "أنشئ",
+       "tags-create-no-name": "عليك أن تحدد اسم الوسم.",
        "tags-create-already-exists": "الوسم \"$1\" موجود بالفعل.",
+       "tags-create-warnings-below": "هل تود متابعة إنشاء الوسم؟",
        "tags-delete-title": "احذف الوسم",
        "tags-delete-explanation-initial": "أنت على وشك حذف الوسم \"$1\" من قاعدة البيانات.",
        "tags-delete-reason": "سبب:",
+       "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-reason": "سبب",
+       "tags-deactivate-not-allowed": "من غير الممكن تعطيل الوسم \"$1\".",
+       "tags-deactivate-submit": "عطل",
+       "tags-update-remove-not-allowed-one": "من غير المسموح بإزالة وسم \"$1\".",
        "tags-edit-title": "تعديل الوسوم",
        "tags-edit-manage-link": "التحكم بالوسوم",
        "tags-edit-existing-tags": "الوسوم الموجودة:",
        "tags-edit-chosen-placeholder": "اختر بعض الوسوم",
        "tags-edit-chosen-no-results": "لا وسوم مطابقة",
        "tags-edit-reason": "السبب:",
+       "tags-edit-success": "طبقت التغييرات بنجاح.",
+       "tags-edit-failure": "التغييرات لم تطبق: $1",
+       "tags-edit-nooldid-title": "مراجعة هدف غير صالحة",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
        "revdelete-unrestricted": "أزال الضوابط لمديري النظام",
        "logentry-block-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
        "logentry-suppress-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|استورد|استوردت}} $3 من ويكي أخرى",
        "logentry-merge-merge": "{{GENDER:$2|دمج|دمجت}} $1 $3 إلى $4 (المراجعات حتى $5).",
        "logentry-move-move": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4",
        "logentry-move-move-noredirect": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4 دون ترك تحويلة",
        "logentry-upload-overwrite": "{{GENDER:$2|رفع|رفعت}} $1 نسخة جديدة من  $3",
        "logentry-upload-revert": "{{GENDER:$2|رفع|رفعت}} $1 $3",
        "log-name-managetags": "سجل إدارة الوسوم",
+       "logentry-managetags-create": "$1 {{GENDER:$2|أنشأ|أنشأت}} الوسم \"$4\"",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|فعل|فعلت}} الوسم \"$4\" للاستخدام بواسطة البوتات والمستخدمين",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|ألغى تفعيل|ألغت تفعيل}} الوسم \"$4\" للاستخدام بواسطة البوتات والمستخدمين",
        "log-name-tag": "سجل الوسوم",
        "rightsnone": "(لا شيء)",
        "revdelete-summary": "ملخص التعديل",
        "feedback-bugornote": "إن كنت مستعدا لشرح  مشكلة تقنية بالتفصيل، رجاءا [$1 قدم تقريرا بالخلل].\nبخلاف ذلك، يمكنك أستخدام الطريقة الأسهل أسفله، سيتم إضافة تعليقك للصفحة \"[$3 $2]\"، بالإضافة إلى اسم المستخدم و نوع المتصفح الذي تستخدمه حاليا.",
        "feedback-cancel": "إلغاء",
        "feedback-close": "تم",
+       "feedback-external-bug-report-button": "أرسل تقرير علة تقنية",
        "feedback-error-title": "خطأ",
        "feedback-error1": "خطأ: لا يمكن التعرف عليها من API",
        "feedback-error2": "خطأ: فشل في تحرير",
        "feedback-subject": "الموضوع:",
        "feedback-submit": "إرسال",
        "feedback-thanks": "شكرا! أُرسلت ملاحظاتك لصفحة \"[$2 $1]\".",
+       "feedback-thanks-title": "شكرا لك!",
+       "feedback-useragent": "وكيل المستخدم:",
        "searchsuggest-search": "بحث",
        "searchsuggest-containing": "يحتوي...",
        "api-error-badaccess-groups": "لا يسمح لك بتحميل الملفات إلى هذه الويكي.",
        "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 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 d5916eb..4563057 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)",
        "newarticle": "(নতুন)",
        "newarticletext": "আপুনি বিচৰা প্ৰবন্ধটো বিচাৰি পোৱা নগ'ল।\n\nইচ্ছা কৰিলে আপুনিয়েই এই প্ৰবন্ধটো লিখা আৰম্ভ কৰিব পাৰে। [$1 ইয়াত] সহায় পাব।\n\nআপুনি যদি ইয়ালৈ ভুলতে আহিছে, তেনেহলে আপোনাৰ ব্ৰাওজাৰৰ '''BACK''' বুটামত টিপা মাৰক।",
        "anontalkpagetext": "----''এইখন আলোচনা পৃষ্ঠা বেনামী সদস্যৰ বাবে, যিয়ে নিজা একাউণ্ট  সৃষ্টি কৰা নাই বা যিয়ে সেই একাউণ্ট ব্যৱহাৰ নকৰে।\nএতেকে আমি তেখেতসকলক আই-পি ঠিকনাৰে চিনাক্ত কৰিবলৈ বাধ্য।\nসেই একেই আই-পি ঠিকনা অনেকেই ব্যৱহাৰ কৰিব পাৰে।\nআপুনি যদি এজন বেনামী সদস্য আৰু যদি আপুনি অনুভৱ কৰে যে আপোনাৰ প্ৰতি অপ্ৰাসঙ্গিক মন্তব্য কৰা হৈছে, তেনেহলে আন বেনামী সদস্যৰ পৰা পৃথক কৰিবলৈ \n[[Special:UserLogin/signup|একাউন্ট সৃষ্টি কৰক]] বা [[Special:UserLogin|প্ৰৱেশ কৰক]] ।''",
-       "noarticletext": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাত à¦¬à§°à§\8dতমান à¦\95à§\8bনà§\8b à¦ªà¦¾à¦ à§\8dয à¦¨à¦¾à¦\87 à¥¤\nà¦\86পà§\81নি à¦\86ন à¦ªà§\83ষà§\8dঠাত [[Special:Search/{{PAGENAME}}| à¦\8fà¦\87 à¦¶à¦¿à§°à§\8bনামা à¦\85নà§\81সনà§\8dধান à¦\95ৰিব à¦ªà¦¾à§°à§\87]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¦¸à¦®à§\8dপৰà§\8dà¦\95à§\80য় à¦\85ভিলà§\87à¦\96 à¦\85নà§\81সন্ধান কৰিব পাৰে],\nবা [{{fullurl:{{FULLPAGENAME}}|action=edit}} এই পৃষ্ঠা সম্পাদনা কৰিব পাৰে]</span>",
-       "noarticletext-nopermission": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাত à¦¬à§°à§\8dতমান à¦\95à§\8bনà§\8b à¦ªà¦¾à¦ à§\8dয à¦¨à¦¾à¦\87।\nà¦\86পà§\81নি à¦\86ন à¦ªà§\83ষà§\8dঠাত [[Special:Search/{{PAGENAME}}|à¦\8fà¦\87 à¦¶à¦¿à§°à§\8bনামা à¦\85নà§\81সনà§\8dধান à¦\95ৰিব à¦ªà¦¾à§°à§\87]],\nবা <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¦¸à¦®à§\8dপৰà§\8dà¦\95à§\80য় à¦\85ভিলà§\87à¦\96 à¦\85নà§\81সন্ধান কৰিব পাৰে]</span>, কিন্তু এই পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।",
+       "noarticletext": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাত à¦¬à§°à§\8dতমান à¦\95à§\8bনà§\8b à¦ªà¦¾à¦ à§\8dয à¦¨à¦¾à¦\87 à¥¤\nà¦\86পà§\81নি à¦\86ন à¦ªà§\83ষà§\8dঠাত [[Special:Search/{{PAGENAME}}| à¦\8fà¦\87 à¦¶à¦¿à§°à§\8bনামা à¦¸à¦¨à§\8dধান à¦\95ৰিব à¦ªà¦¾à§°à§\87]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¦¸à¦®à§\8dপৰà§\8dà¦\95à§\80য় à¦\85ভিলà§\87à¦\96 সন্ধান কৰিব পাৰে],\nবা [{{fullurl:{{FULLPAGENAME}}|action=edit}} এই পৃষ্ঠা সম্পাদনা কৰিব পাৰে]</span>",
+       "noarticletext-nopermission": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাত à¦¬à§°à§\8dতমান à¦\95à§\8bনà§\8b à¦ªà¦¾à¦ à§\8dয à¦¨à¦¾à¦\87।\nà¦\86পà§\81নি à¦\86ন à¦ªà§\83ষà§\8dঠাত [[Special:Search/{{PAGENAME}}|à¦\8fà¦\87 à¦¶à¦¿à§°à§\8bনামা à¦¸à¦¨à§\8dধান à¦\95ৰিব à¦ªà¦¾à§°à§\87]],\nবা <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¦¸à¦®à§\8dপৰà§\8dà¦\95à§\80য় à¦\85ভিলà§\87à¦\96 সন্ধান কৰিব পাৰে]</span>, কিন্তু এই পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।",
        "missing-revision": "\"{{FULLPAGENAME}}\" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল'গ]ত অধিক তথ্য পাব।",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" নামৰ সদস্য একাউন্ট নিবন্ধিত নহয় ।\nঅনুগ্ৰহ কৰি চাওক আপুনি এই পৃষ্ঠা সৃষ্টি/সম্পাদনা কৰিব বিচাৰিছে নেকি ।",
        "userpage-userdoesnotexist-view": "সদস্য একাউন্ট ''$1'' পঞ্জীভূত নহয়",
        "searchprofile-advanced": "উচ্চতৰ",
        "searchprofile-articles-tooltip": "$1-ত অনুসন্ধান কৰক",
        "searchprofile-images-tooltip": "ফাইলৰ বাবে অনুসন্ধান",
-       "searchprofile-everything-tooltip": "সà¦\95লà§\8b à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦\85নà§\81সনà§\8dধান à¦\95ৰà¦\95 (à¦\95থা-বতৰা পৃষ্ঠা সহ)",
+       "searchprofile-everything-tooltip": "সà¦\95লà§\8b à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦¸à¦¨à§\8dধান à¦\95ৰà¦\95 (à¦\86লà§\8bà¦\9aনা পৃষ্ঠা সহ)",
        "searchprofile-advanced-tooltip": "স্বনিৰ্ধাৰিত নামস্থানত অনুসন্ধান কৰক",
        "search-result-size": "$1 ({{PLURAL:$2|1 শব্দ|$2 শব্দসমূহ}})",
        "search-result-category-size": "{{PLURAL:$1|১ জন সদস্য|$1 জন সদস্য}} ({{PLURAL:$2|এটা উপশ্ৰেণী|$2 টা উপশ্ৰেণী}}, {{PLURAL:$3|এটা ফাইল|$3 টা ফাইল}})",
        "powersearch-togglenone": "একো নাই",
        "powersearch-remember": "ভৱিষ্যতৰ সন্ধানৰ বাবে বাছনি মনত ৰাখক।",
        "search-external": "বাহ্যিক সন্ধান",
-       "searchdisabled": "{{SITENAME}} à¦¤ à¦\85নà§\81সনà§\8dধান à¦\95ৰা à¦¸à¦¾à¦®à¦¯à¦¼à¦¿à¦\95 à¦­à¦¾à¦¬à§\87 à¦¨à¦¿à¦·à§\8dà¦\95à§\8dৰিয় à¦\95ৰা à¦¹à§\88à¦\9bà§\87।\nতà§\87তিয়ালà§\88à¦\95à§\87 à¦\97à§\81à¦\97লত à¦\85নà§\81সন্ধান কৰক।\nমনত ৰাখিব যে তেঁওলোকৰ {{SITENAME}}ৰ ইণ্ডেক্স পুৰণি হব পাৰে।",
+       "searchdisabled": "{{SITENAME}} à¦¤ à¦¸à¦¨à§\8dধান à¦\95ৰা à¦¸à¦¾à¦®à¦¯à¦¼à¦¿à¦\95 à¦­à¦¾à¦¬à§\87 à¦¨à¦¿à¦·à§\8dà¦\95à§\8dৰিয় à¦\95ৰা à¦¹à§\88à¦\9bà§\87।\nতà§\87তিয়ালà§\88à¦\95à§\87 à¦\97à§\81à¦\97লত সন্ধান কৰক।\nমনত ৰাখিব যে তেঁওলোকৰ {{SITENAME}}ৰ ইণ্ডেক্স পুৰণি হব পাৰে।",
        "search-error": "অনুসন্ধানৰ সময়ত এটা ত্ৰুটি হৈছে: $1",
        "preferences": "পছন্দসমূহ",
        "mypreferences": "পছন্দসমূহ",
        "prefs-editing": "সম্পাদন",
        "rows": "পথালী শাৰী:",
        "columns": "ঠিয় শাৰী:",
-       "searchresultshead": "à¦\85নà§\81সনà§\8dধান",
+       "searchresultshead": "সনà§\8dধান à¦\95ৰà¦\95",
        "stub-threshold": "<a href=\"#\" class=\"stub\">আধাৰ সংযোগ</a> ৰ সৰ্বোচ্চ আকাৰ (বাইটত):",
        "stub-threshold-disabled": "নিষ্ক্ৰিয়",
        "recentchangesdays": "শেহতীয়া সাল-সলনিত দেখুৱাব লগা দিন:",
        "right-passwordreset": "পাছৱৰ্ড ৰি-চেটৰ ই-মেইলসমূহ দেখুৱাওক",
        "newuserlogpage": "সদস্যৰ সৃষ্টি অভিলেখ",
        "newuserlogpagetext": "এইখন এখন সদস্য সৃষ্টিৰ ল’গ।",
-       "rightslog": "সভ্যৰ অধিকাৰৰ লেখ",
+       "rightslog": "সদস্যৰ অধিকাৰৰ লেখ",
        "rightslogtext": "সদস্য অধিকাৰৰ পৰিৱৰ্তনসমূহৰ ল’গ",
        "action-read": "এই পৃষ্ঠা পঢ়ক",
        "action-edit": "এই পৃষ্ঠা সম্পাদনা কৰক",
        "upload_directory_read_only": "আপল’ড ডিৰেক্টৰি ($1) ৱেবচাৰ্ভাৰৰ দ্বাৰা লিখনযোগ্য নহয় ।",
        "uploaderror": "আপল’ডত সমস্যা হৈছে",
        "upload-recreate-warning": "'''সতৰ্কবাণী: এই নামৰ এটা ফাইল বিলোপ বা স্থানান্তৰ কৰা হৈছে । '''\n\nএই পৃষ্ঠাৰ অৱলুপ্তি ল’গ আৰু স্থানান্তৰ ল’গ আপোনাৰ সুবিধাৰ্থে তলত দিয়া হ’ল:",
-       "uploadtext": "ফাà¦\87ল à¦\86পলâ\80\99ড à¦\95ৰাৰ à¦¬à¦¾à¦¬à§\87 à¦¤à¦²à§° à¦ªà§\8dৰপতà§\8dৰ à¦¬à§\8dযৱহাৰ à¦\95ৰà¦\95। à¦ªà§\82ৰà§\8dবà§\87 à¦\86পলâ\80\99ড à¦\95ৰা à¦«à¦¾à¦\87ল à¦\9aাবলà§\88 à¦¬à¦¾ à¦\85নà§\81সনà§\8dধান à¦\95ৰিবলà§\88 [[Special:FileList|à¦\86পলâ\80\99ড à¦\95ৰা à¦«à¦¾à¦\87লৰ à¦¤à¦¾à¦²à¦¿à¦\95া]] à¦²à§\88 à¦¯à¦¾à¦\93à¦\95 à¥¤ (পà§\81নà¦\83) à¦\86পলâ\80\99ড à¦\95ৰা à¦«à¦¾à¦\87লৰ à¦¨à¦¾à¦® [[Special:Log/upload|à¦\86পলâ\80\99ড à¦\85ভিলà§\87à¦\96ত]] à¦­à§°à§\8dতি à¦¹à¦¯à¦¼, à¦¬à¦¿à¦²à§\8bপ à¦\95ৰা à¦«à¦¾à¦\87লৰ à¦¨à¦¾à¦® [[Special:Log/delete|à¦\85ৱলà§\81পà§\8dতি à¦\85ভিলà§\87à¦\96ত]] à¦ªà¦¾à¦¬ à¥¤\n\nà¦\95à§\8bনà§\8b à¦ªà§\83ষà§\8dঠাত à¦\9aিতà§\8dৰ à¦¬à¦¾ à¦«à¦¾à¦\87ল à¦¸à¦¨à§\8dনিবিষà§\8dà¦\9f à¦\95ৰিবৰ à¦¬à¦¾à¦¬à§\87 à¦¤à¦²à§° à¦ªà§\8dৰপতà§\8dৰসমà§\82হত à¦¥à¦\95া à¦¸à¦\82যà§\8bà¦\97 à¦¬à§\8dযৱহাৰ à¦\95ৰà¦\95: \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>''' à¦\85থবা\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''",
+       "uploadtext": "ফাইল আপল’ড কৰাৰ বাবে তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক। পূৰ্বে আপল’ড কৰা ফাইল চাবলৈ বা সন্ধান কৰিবলৈ [[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|alt text]]</nowiki></code>''' অথবা\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''",
        "upload-permitted": "অনুমোদিত ফাইল ধৰণ: $1",
        "upload-preferred": "বাঞ্ছিত ফাইল ধৰণ: $1",
        "upload-prohibited": "বঞ্চিত ফাইল ধৰণ: $1",
        "upload_source_file": "(আপোনাৰ কম্পিউটাৰৰ এটা ফাইল)",
        "listfiles-delete": "বিলোপ কৰক",
        "listfiles-summary": "এই বিশেষ পৃষ্ঠাত সকলো আপল’ড হোৱা ফাইল দেখা পাব।",
-       "listfiles_search_for": "মিডিয়াৰ à¦¨à¦¾à¦® à¦\85নà§\81সনà§\8dধান:",
+       "listfiles_search_for": "মিডিয়াৰ নাম সন্ধান:",
        "imgfile": "ফাইল",
        "listfiles": "ফাইলৰ তালিকা",
        "listfiles_thumb": "ক্ষুদ্ৰ প্ৰতিকৃতি",
        "filedelete-edit-reasonlist": "বিলোপৰ কাৰণ সম্পাদনা",
        "filedelete-maintenance": "চোৱা-চিতাৰ সময়ত ফাইলৰ বিলুপ্তি আৰু পুনৰুদ্ধাৰ সাময়িকভাৱে নিষ্ক্ৰিয় কৰা হৈছে ।",
        "filedelete-maintenance-title": "ফাইল বিলোপ কৰিব নোৱাৰি",
-       "mimesearch": "MIME à¦\85নà§\81সনà§\8dধান",
+       "mimesearch": "MIME সন্ধান",
        "mimesearch-summary": "এই পৃষ্ঠাৰ জৰিয়তে ফাইলসমূহক MIME প্ৰকাৰ অনুসৰি চেকিব পৰা যায় ।\nইনপুট: contenttype/subtype, যেনে- <code>image/jpeg</code> ।",
        "mimetype": "MIME প্ৰকাৰ:",
        "download": "ডাউনল’ড কৰক",
        "nmembers": "{{PLURAL:|$1 টা প্ৰবন্ধ বা উপশ্ৰেণী|$1 টা প্ৰবন্ধ বা উপশ্ৰেণী}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|জন সদস্য}}",
        "nrevisions": "$1টা {{PLURAL:$1|সংশোধন|সংশোধন}}",
-       "nviews": "$1 {{PLURAL:$1|টা দৰ্শন|টা দৰ্শন}}",
        "nimagelinks": "$1 {{PLURAL:$1|টা পৃষ্ঠাত}} ব্যৱহৃত",
        "ntransclusions": "$1 {{PLURAL:$1|টা পৃষ্ঠাত}} ব্যৱহৃত",
        "specialpage-empty": "এই বিৱৰণৰ কোনো ফলাফল নাই ।",
        "suppress": "অমনোযোগ",
        "querypage-disabled": "কাৰ্য্যগত কাৰণত এই বিশেষ পৃষ্ঠাটো নিষ্ক্ৰিয় কৰা হৈছে।",
        "booksources": "গ্ৰন্থৰ উৎস সমূহ",
-       "booksources-search-legend": "à¦\97à§\8dৰনà§\8dথ à¦\89à§\8eস à¦\85নà§\81সনà§\8dধান",
+       "booksources-search-legend": "গ্ৰন্থ উৎস সন্ধান",
        "booksources-search": "সন্ধান",
        "booksources-text": "নতুন আৰু পুৰণি কিতাপ বেচা চাইটসমূহৰ সংযোগ তলত দিয়া হৈছে, তাত আপুনি বিচৰা কিতাপসমূহৰ বিষয়ে অধিক তথ্যও পাব পাৰে:",
        "booksources-invalid-isbn": "আপুনি দিয়া ISBN সম্ভৱতঃ অবৈধ; মূল উৎসৰ পৰা তুলি লওঁতে হ’ব পৰা ভুলৰ বাবে পৰীক্ষা কৰক ।",
        "deletedcontributions": "ৰদ কৰা সদস্যৰ বৰঙণিসমূহ",
        "deletedcontributions-title": "ৰদ কৰা সদস্যৰ বৰঙণিসমূহ",
        "sp-deletedcontributions-contribs": "বৰঙণিসমূহ",
-       "linksearch": "বাহà§\8dযিà¦\95 à¦¸à¦\82যà§\8bà¦\97 à¦\85নà§\81সনà§\8dধান",
-       "linksearch-pat": "à¦\85নà§\81সনà§\8dধান à¦\86ৰà§\8dহি:",
+       "linksearch": "বাহ্যিক সংযোগ সন্ধান",
+       "linksearch-pat": "সন্ধান আৰ্হি:",
        "linksearch-ns": "নামস্থান:",
-       "linksearch-ok": "à¦\85নà§\81সনà§\8dধান",
+       "linksearch-ok": "সনà§\8dধান à¦\95ৰà¦\95",
        "linksearch-text": "ৱাইল্ডকাৰ্ডসমূহ যেনে \"*.wikipedia.org\" ব্যৱহাৰ কৰিব পাৰি।\nঅন্তত এটা উচ্চ-স্তৰৰ ডমেইনৰ প্ৰয়োজন, উদাহৰণস্বৰূপ \"*.org\"। <br />\nসমৰ্থিত {{PLURAL:$2|প্ৰ'ট'ক'ল|প্ৰ'ট'ক'লসমূহ}} : <code>$1</code> (কোনো প্ৰ'ট'ক'ল নিৰ্দিষ্ট নকৰিলে http:// সূচাব)।",
        "linksearch-line": "$2 পৰা $1 সংযোগ কৰা হৈছে",
        "linksearch-error": "ৱাইল্ডকাৰ্ড কেৱল হ'ষ্টনামৰ আৰম্ভণিতহে দেখা যাব ।",
        "sp-contributions-userrights": "সদস্যৰ অধিকাৰ ব্যৱস্থাপনা",
        "sp-contributions-blocked-notice": "এই সদস্যজনক সদ্যহতে বাৰণ কৰা হৈছে ।\nআপোনাৰ সুবিধাৰ্থে শেহতীয়া প্ৰতিবন্ধক অভিলেখ ভৰ্তি তলত দিয়া হ’ল:",
        "sp-contributions-blocked-notice-anon": "এই আই.পি. ঠিকনা সদ্যহতে বাৰণ কৰা হৈছে ।\nআপোনাৰ সুবিধাৰ্থে শেহতীয়া প্ৰতিবন্ধক অভিলেখ ভৰ্তি তলত দিয়া হ’ল:",
-       "sp-contributions-search": "বৰà¦\99ণিসমà§\82হৰ à¦\95াৰণà§\87 à¦\85নà§\81সনà§\8dধান à¦\95ৰà¦\95",
+       "sp-contributions-search": "বৰঙণিসমূহৰ কাৰণে সন্ধান কৰক",
        "sp-contributions-username": "আই.পি. ঠিকনা অথবা ব্যৱহাৰকৰ্তাৰ নাম:",
        "sp-contributions-toponly": "কেৱল সাম্প্ৰতিক সংস্কৰণৰ অন্তৰ্গত সম্পাদনাসমূহ দেখুৱাওক",
        "sp-contributions-submit": "সন্ধান কৰক",
        "blocklist-by": "প্ৰশাসকক বাধাপ্ৰদান",
        "blocklist-params": "অৱৰোধ পাৰামিটাৰসমূহ",
        "blocklist-reason": "কাৰণ:",
-       "ipblocklist-submit": "à¦\85নà§\81সনà§\8dধান",
+       "ipblocklist-submit": "সনà§\8dধান à¦\95ৰà¦\95",
        "ipblocklist-localblock": "স্থানীয় বাৰণ",
        "ipblocklist-otherblocks": "অন্যান্য {{PLURAL:$1|বাৰণ|বাৰণসমূহ}}",
        "infiniteblock": "অসীম",
        "tooltip-t-print": "এই পৃষ্ঠাৰ ছপা উপযোগী সংস্কৰণ",
        "tooltip-t-permalink": "পৃষ্ঠাৰ এই সংস্কৰণৰ স্থায়ী সংযোগ",
        "tooltip-ca-nstab-main": "এই ৱিকিৰ সূচী চাওক",
-       "tooltip-ca-nstab-user": "সভà§\8dযৰ à¦¬à§\8dযà¦\95à§\8dতিà¦\97ত à¦ªà§\83ষà§\8dঠালà§\88",
+       "tooltip-ca-nstab-user": "সদসà§\8dয à¦ªà§\83ষà§\8dঠা à¦\9aাà¦\93à¦\95",
        "tooltip-ca-nstab-media": "মিডিয়া পৃষ্ঠাটো চাওক",
        "tooltip-ca-nstab-special": "এইটো এটা বিশেষ পৃষ্ঠা, আপুনি সম্পাদনা কৰিব নোৱাৰে",
        "tooltip-ca-nstab-project": "প্ৰকল্প পৃষ্ঠা চাওক",
        "dberr-again": "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
        "dberr-info": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)",
        "dberr-info-hidden": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি)",
-       "dberr-usegoogle": "à¦\8fà¦\87 à¦ªà§°à¦¿à¦¸à§\8dথিতিত à¦\86পà§\81নি à¦\97à§\81à¦\97লৰ à¦®à¦¾à¦§à§\8dযমà§\87ৰà§\87 à¦\85নà§\81সনà§\8dধান à¦\95ৰিব à¦ªà¦¾à§°à§\87 ।",
+       "dberr-usegoogle": "à¦\8fà¦\87 à¦ªà§°à¦¿à¦¸à§\8dথিতিত à¦\86পà§\81নি à¦\97à§\81à¦\97লৰ à¦®à¦¾à¦§à§\8dযমà§\87ৰà§\87 à¦¸à¦¨à§\8dধান à¦\95ৰিব à¦ªà¦¾à§°à§\87।",
        "dberr-outofdate": "মন কৰক যে, আমাৰ বিষয়বস্তু সম্পৰ্কে তেওঁলোকৰ সূচী পুৰণা হ'ব পাৰে ।",
        "dberr-cachederror": "এইখন অনুৰোধ কৰা পৃষ্ঠাৰ কেচ্‌ড লিপি, যিখন নবীকৰণ নকৰাও হ'ব পাৰে ।",
        "htmlform-invalid-input": "আপোনাৰ কিছুমান অন্তৰ্ভুক্তিত সমস্যা হৈছে",
        "htmlform-cloner-create": "আৰু যোগ কৰক",
        "htmlform-cloner-delete": "আঁতৰাওক",
        "sqlite-has-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন সহ",
-       "sqlite-no-fts": "$1 à¦¸à¦®à§\8dপà§\82ৰà§\8dণ-পাঠ à¦\85নà§\81সনà§\8dধান à¦¸à¦®à§°à§\8dথন à¦\85বিহনà§\87",
+       "sqlite-no-fts": "$1 সম্পূৰ্ণ-পাঠ সন্ধান সমৰ্থন অবিহনে",
        "logentry-delete-delete": "$3 পৃষ্ঠাটো $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}",
        "logentry-delete-restore": "$1-এ $3 পৃষ্ঠাটো {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰিলে}}",
        "logentry-delete-event": "$3: $4 -ত {{PLURAL:$5|এটা লগ ঘটনা|$5 লগ ঘটনাসমূহ}} -ৰ $1 পৰিৱৰ্তন কৰা দৃশ্যমানতা",
index 61acb97..79b1fca 100644 (file)
        "versionrequiredtext": "Necesítase la versión $1 de MediaWiki pa usar esta páxina. Ver la [[Special:Version|páxina de versión]].",
        "ok": "Aceutar",
        "retrievedfrom": "Sacáu de «$1»",
-       "youhavenewmessages": "Tienes $1 ($2).",
-       "youhavenewmessagesfromusers": "Tienes $1 {{PLURAL:$3|d'otru usuariu|de $3 usuarios}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Tienes}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tienes}} $1 {{PLURAL:$3|d'otru usuariu|de $3 usuarios}} ($2).",
        "youhavenewmessagesmanyusers": "Tienes $1 de munchos usuarios ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|un mensaxe nuevu|999=mensaxes nuevos}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|cambéu postreru|999=cambeos postreros}}",
        "no-null-revision": "Nun pudo crease una nueva revisión nula pa la páxina «$1»",
        "badtitle": "Títulu incorreutu",
        "badtitletext": "El títulu de páxina solicitáu nun ye válidu, ta baleru o tien enllaces interllingua o interwiki incorreutos.\nPue contener un caráuter o más que nun puen usase nos títulos.",
+       "title-invalid-empty": "El títulu de páxina solicitáu ta baleru o sólo contien el nome d'un espaciu de nomes.",
+       "title-invalid-utf8": "El títulu de páxina solicitáu contien una secuencia UTF-8 inválida.",
+       "title-invalid-interwiki": "El títulu de páxina solicitáu contien un enllaz interwiki que nun puede usase nos títulos.",
+       "title-invalid-talk-namespace": "El títulu de páxina solicitáu fai referencia a una páxina d'alderique que nun puede esistir.",
        "title-invalid-characters": "El títulu de la páxina solicitada contien calteres non válidos: «$1»",
+       "title-invalid-relative": "El títulu contien un camín relativu. Los títulos de páxina relativos (./, ../) son inválidos porque de vezu nun se puede llegar al pasalos a los restoladores web.",
+       "title-invalid-magic-tilde": "El títulu de páxina solicitáu contien una secuencia máxica de tildes (<nowiki>~~~</nowiki>) inválida.",
+       "title-invalid-too-long": "El títulu de páxina solicitáu ye llargu enforma. Nun tien de pasar de $1 {{PLURAL:$1|byte|bytes}} en codificación UTF-8.",
+       "title-invalid-leading-colon": "El títulu de páxina solicitáu contién un caráuter dos puntos inválidu al principiu.",
        "perfcached": "Los datos siguientes tán na caché y seique nun tean anovaos. Hai un máximu {{PLURAL:$1|d'un resultáu disponible|de $1 resultaos disponibles}} na caché.",
        "perfcachedts": "Los datos siguientes tán na caché y anovaronse por última vegada'l $1. Hai un máximu {{PLURAL:$4|d'un resultáu disponible|de $4 resultaos disponibles}} na caché.",
        "querypage-no-updates": "Anguaño los anovamientos d'esta páxina tán desactivaos.\nEstos datos nun van refrescase nestos momentos.",
        "passwordreset": "Reaniciar contraseña",
        "passwordreset-text-one": "Complete esti formulariu pa reaniciar la contraseña.",
        "passwordreset-text-many": "{{PLURAL:$1|Rellene unu de los campos pa recibir una contraseña temporal per corréu.}}",
-       "passwordreset-legend": "Reaniciar contraseña",
        "passwordreset-disabled": "Los reanicios de contraseña tán desactivaos nesta wiki.",
        "passwordreset-emaildisabled": "Les funciones de corréu electrónicu tan desactivaes nesta wiki.",
        "passwordreset-username": "Nome d'usuariu:",
        "resettokens": "Reaniciar los pases",
        "resettokens-text": "Equí pue reaniciar los pases que permiten l'accesu a ciertos datos privaos asociaos cola so cuenta.\n\nTendría de facelo si los compartió con alguién de mou accidental o si la so cuenta quedó comprometida.",
        "resettokens-no-tokens": "Nun hai dengún pase que reaniciar.",
-       "resettokens-legend": "Reaniciar los pases",
        "resettokens-tokens": "Pases:",
        "resettokens-token-label": "$1 (valor actual: $2)",
        "resettokens-watchlist-token": "Pase pa la canal de noticies web (Atom/RSS) de los [[Special:Watchlist|cambios en páxines de la llista de vixilancia]]",
        "yourdiff": "Diferencies",
        "copyrightwarning": "Por favor, ten en cuenta que toles collaboraciones de {{SITENAME}} considérense espublizaes baxo la $2 (ver $1 pa más detalles). Si nun quies que'l to trabayu s'edite ensin midida y se distribuya al debalu, nun lu pongas equí.<br />\nAmás tas prometiéndonos qu'escribisti esto tu mesmu, o que lo copiasti d'una fonte llibre, de dominiu públicu o asemeyada.\n<strong>¡Nun unvies obres con drechos d'autor ensin permisu!</strong>",
        "copyrightwarning2": "Por favor, ten en cuenta que toles contribuciones de {{SITENAME}} se puen editar, alterar o desaniciar por otros usuarios. Si nun quies que'l to trabayu s'edite ensin midida, nun lu pongas equí.<br />\nAmás tas dexándonos afitao qu'escribisti esto tu mesmu, o que lo copiasti d'una fonte llibre de dominiu públicu o asemeyao (ver $1 pa más detalles).\n'''¡Nun pongas trabayos con drechos d'autor ensin permisu!'''",
+       "editpage-cannot-use-custom-model": "El modelu de conteníu d'esta páxina nun pue cambiase.",
        "longpageerror": "'''ERROR: El testu qu'unviasti tien {{PLURAL:$1|un quilobyte|$1 quilobytes}}, que pasa del máximu de {{PLURAL:$2|un quilobyte|$2 quilobytes}}.'''\nNun se pue grabar.",
        "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:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oxetu baleru",
        "content-json-empty-array": "Matriz balera",
+       "duplicate-args-warning": "<strong>Avisu:</strong> [[:$1]] llama a [[:$2]] con más d'un valor pal parámetru «$3». Sólo va usase l'últimu valor dau.",
        "duplicate-args-category": "Páxines con argumentos duplicaos nes llamaes a plantíes",
        "duplicate-args-category-desc": "La páxina contien llamaes a plantíes qu'usen argumentos duplicaos, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Avisu:''' Esta páxina contien demasiaes llamaes costoses a funciones d'análisis sintácticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
        "badsig": "Firma cruda non válida; comprueba les etiquetes HTML.",
        "badsiglength": "La to robla ye demasiao llarga.\nHa tener menos de $1 {{PLURAL:$1|caráuter|carauteres}}.",
        "yourgender": "¿Qué descripción prefieres?",
-       "gender-unknown": "Prefiero nun dar detalles",
+       "gender-unknown": "Al mentate, el software usará palabres de xéneru neutru siempre que seya posible",
        "gender-male": "Él edita páxines wiki",
        "gender-female": "Ella edita páxines wiki",
        "prefs-help-gender": "Configurar esta preferencia ye opcional. El software usa esti valor pa dirixise a ti y pa mentate a terceros col xéneru gramatical correchu.\nEsta información sedrá pública.",
        "userrights-lookup-user": "Xestión de grupos del usuariu",
        "userrights-user-editname": "Escribi un nome d'usuariu:",
        "editusergroup": "Modificar grupos d'usuariu",
-       "editinguser": "Camudando los permisos del usuariu '''[[User:$1|$1]]''' $2",
+       "editinguser": "Camudando los permisos {{GENDER:$1|del usuariu|de la usuaria}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Editar los grupos d'usuariu",
        "saveusergroups": "Guardar los grupos d'usuariu",
        "userrights-groupsmember": "Miembru de:",
        "uploaddisabledtext": "Les xubíes de ficheros tán desactivaes.",
        "php-uploaddisabledtext": "Les xubíes de ficheros tan desactivaes en PHP.\nPor favor, comprueba la configuración de file_uploads.",
        "uploadscripted": "Esti ficheru contien códigu HTML o scripts que pueden interpretase de mou equivocáu por un navegador.",
+       "upload-scripted-pi-callback": "Nun puede xubise un ficheru que contien instrucciones de procesamientu XML de fueya d'estilu.",
+       "uploaded-script-svg": "Alcontróse l'elementu «$1» que puede recibir scripts nel ficheru SVG xubíu.",
+       "uploaded-hostile-svg": "Alcontróse CSS inseguru nel elementu d'estilu del ficheru SVG xubíu.",
+       "uploaded-event-handler-on-svg": "Nun se permite configurar los atributos de controladores de socesos <code>$1=\"$2\"</code> nos ficheros SVG.",
+       "uploaded-href-attribute-svg": "Nun se permiten los atributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con destín nun llocal (p. ex. http://, javascript:, etc) nos ficheros SVG.",
+       "uploaded-href-unsafe-target-svg": "Alcontróse un \"href\" a un destín inseguru <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-animate-svg": "Alcontróse la etiqueta \"animate\" que puede cambiar href, usando l'atributu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-setting-event-handler-svg": "Ta torgada la configuración d'atributos del xestor de socesos. Alcontróse <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-setting-href-svg": "Usar la etiqueta «set» p'amestar l'atributu «href» al elementu padre ta torgao.",
+       "uploaded-wrong-setting-svg": "Ta torgao usar la etiqueta «set» p'amestar un destín remote/data/script a cualquier atributu. Se alcontróse <code>&lt;set to=\"$1\"&gt;</code> nel ficheru SVG cargáu.",
+       "uploaded-setting-handler-svg": "Tán bloquiaos los ficheros SVG que configuren l'atributu «handler» con remote/data/script. Alcontróse <code>$1=\"$2\"</code> nel ficheru SVG xubíu.",
+       "uploaded-remote-url-svg": "Tán bloquiaos los ficheros SVG que configuren atributos d'estilu con URL remotes. Alcontróse <code>$1=\"$2\"</code> nel ficheru SVG xubíu.",
+       "uploaded-image-filter-svg": "Alcontróse un filtru d'imaxe con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploadscriptednamespace": "Esti ficheru SVG contien l'espaciu de nomes illegal «$1»",
        "uploadinvalidxml": "Nun pudo interpretase'l XML del ficheru cargáu.",
        "uploadvirus": "¡El ficheru tien un virus!\nDetalles: $1",
        "randomincategory-nopages": "Nun hai páxines en [[:Category:$1]].",
        "randomincategory-category": "Categoría:",
        "randomincategory-legend": "Páxina al debalu de la categoría",
+       "randomincategory-submit": "Dir",
        "randomredirect": "Redireición al debalu",
        "randomredirect-nopages": "Nun hai redireiciones nel espaciu de nomes \"$1\".",
        "statistics": "Estadístiques",
        "nmembers": "$1 {{PLURAL:$1|miembru|miembros}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|miembru|miembros}}",
        "nrevisions": "$1 {{PLURAL:$1|revisión|revisiones}}",
-       "nviews": "$1 {{PLURAL:$1|vista|vistes}}",
        "nimagelinks": "Usao en $1 {{PLURAL:$1|páxina|páxines}}",
        "ntransclusions": "usao en $1 {{PLURAL:$1|páxina|páxines}}",
        "specialpage-empty": "Nun hai resultaos nestos momentos.",
        "unusedimages": "Imáxenes non usaes",
        "wantedcategories": "Categoríes buscaes",
        "wantedpages": "Páxines buscaes",
-       "wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, escluyendo les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, sacante les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}|la llista de redireiciones frañaes]].",
        "wantedpages-badtitle": "Títulu inválidu nel conxuntu de resultaos: $1",
        "wantedfiles": "Archivos buscaos",
        "wantedfiletext-cat": "Los ficheros siguientes tan usándose, pero nun esisten. Ye posible qu'apaezan ficheros de repositorios esternos ensin qu'esistan. Cualesquier falsu positivu tará <del>tacháu</del>. Amás, les páxines qu'inxerten ficheros que nun esisten apaecen na llista de [[:$1]].",
        "rollback-success": "Revertíes les ediciones de $1; camudáu a la última versión de $2.",
        "sessionfailure-title": "Fallu de sesión",
        "sessionfailure": "Paez qu'hai un problema cola to sesión; por precaución\ncancelóse l'aición que pidisti. Da-y al botón \"Atrás\" del\nnavegador pa cargar otra vuelta la páxina y vuelve a intentalo.",
+       "changecontentmodel": "Cambiar el modelu de conteníu d'una páxina",
+       "changecontentmodel-legend": "Cambiar el modelu de conteníu",
+       "changecontentmodel-title-label": "Títulu de la páxina",
+       "changecontentmodel-model-label": "Nuevu modelu de conteníu",
+       "changecontentmodel-reason-label": "Motivu:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambió}}'l modelu de conteníu de la páxina $3 dende «$4» a «$5»",
+       "logentry-contentmodel-change-revertlink": "revertir",
+       "logentry-contentmodel-change-revert": "revertir",
        "protectlogpage": "Rexistru de proteiciones",
        "protectlogtext": "Darréu ta un rexistru de les protecciones de páxines.\nConsulta la [[Special:ProtectedPages|llista de páxines protexíes]] pa ver les proteiciones actives nestos momentos.",
        "protectedarticle": "protexó «[[$1]]»",
        "tooltip-pt-logout": "Salir",
        "tooltip-pt-createaccount": "Encamentámoste que crees una cuenta y qu'anicies sesión; sicasí, nun ye obligatorio",
        "tooltip-ca-talk": "Alderique tocante al conteníu de la páxina",
-       "tooltip-ca-edit": "Pues editar esta páxina. Por favor usa'l botón de vista previa enantes de guardar los cambios.",
+       "tooltip-ca-edit": "Editar esta páxina",
        "tooltip-ca-addsection": "Emprima una seición nueva",
        "tooltip-ca-viewsource": "Esta páxina ta protexida.\nPues ver el so códigu fonte.",
        "tooltip-ca-history": "Versiones antigües d'esta páxina",
        "pageinfo-robot-index": "Permitío",
        "pageinfo-robot-noindex": "Torgao",
        "pageinfo-watchers": "Númberu de vixilantes de la páxina",
+       "pageinfo-visiting-watchers": "Númberu d'usuarios que vixilen la páxina que visitaron ediciones recientes",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixilante|vixilantes}}",
+       "pageinfo-few-visiting-watchers": "Puede haber, o non, un usuariu que vixila páxines que visita les ediciones recientes",
        "pageinfo-redirects-name": "Númberu de redireiciones a esta páxina",
        "pageinfo-subpages-name": "Subpáxines d'esta páxina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redireición|redireiciones}}; $3 {{PLURAL:$3|non-redireición|non-redireiciones}})",
        "version-libraries": "Biblioteques instalaes",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versión",
+       "version-libraries-license": "Llicencia",
+       "version-libraries-description": "Descripción",
+       "version-libraries-authors": "Autores",
        "redirect": "Redireición por ficheru, usuariu, páxina o ID de revisión",
        "redirect-legend": "Redirixir a un ficheru o una páxina",
        "redirect-summary": "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión o de páxina) o una páxina d'usuariu (dando un númberu d'ID d'usuariu). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],  [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "log-name-pagelang": "Rexistru de cambios de llingua",
        "log-description-pagelang": "Esti ye un rexistru de los cambios de llingua de les páxines.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} la llingua de la páxina $3 del $4 al $5.",
-       "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye {{PLURAL:$4|el siguiente aspeutu|los siguientes aspeutos}}. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo {{PLURAL:$4|activalu|activalos y escoyer el predetermináu}}.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar {{PLURAL:$5|la llinia siguiente|les llinies siguientes}} en <code>LocalSettings.php</code> p'activar {{PLURAL:$5|l'aspeutu instaláu|tolos aspeutos instalaos}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
-       "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
+       "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye {{PLURAL:$4|el siguiente aspeutu|los siguientes aspeutos}}. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo {{PLURAL:$4|activalu|activalos y escoyer el predetermináu}}.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar {{PLURAL:$5|la llinia siguiente|les llinies siguientes}} en <code>LocalSettings.php</code> p'activar {{PLURAL:$5|l'aspeutu instaláu|tolos aspeutos instalaos}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
+       "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*  [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activáu)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')",
        "mediastatistics": "Estadístiques de multimedia",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "guión curtiu",
        "special-characters-title-emdash": "guión llargu",
-       "special-characters-title-minus": "signu menos"
+       "special-characters-title-minus": "signu menos",
+       "mw-widgets-titleinput-description-new-page": "la páxina inda nun esiste",
+       "mw-widgets-titleinput-description-redirect": "redirixir a $1"
 }
index c5158a4..d5fe7a2 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "1AnuraagPandey"
+                       "1AnuraagPandey",
+                       "राम प्रसाद जोशी"
                ]
        },
        "tog-underline": "कड़ि अधोरेखन:",
        "aboutpage": "Project:परिचय",
        "copyright": "उपलब्ध चिज $1 कय अधीन है जब तक अलग से उल्लेख नाई कई गा है।",
        "copyrightpage": "{{ns:project}}:कॉपीराइट",
-       "currentevents": "à¤\85भिन à¤\95य à¤\98à¤\9fना à¤¸à¤¬",
-       "currentevents-url": "Project:à¤\85भिन à¤\95य à¤\98à¤\9fना à¤¸à¤¬",
+       "currentevents": "नà¤\81वा à¤\98à¤\9fना",
+       "currentevents-url": "Project:नà¤\81वा à¤\98à¤\9fना",
        "disclaimers": "अस्वीकरण",
        "disclaimerpage": "Project:साधारण अस्वीकरण",
        "edithelp": "सम्पादन सहायता",
        "no-null-revision": "\"$1\" पृष्ठ के लिए बिना बदलावों का नया अवतरण बनाने में असफल।",
        "badtitle": "खराब शीर्षक",
        "badtitletext": "आप कय द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जोड़ान अंतर-भाषीय या अंतर-विकि शीर्षक होय।\nएहमा एक या एक से ढेर अईसन कॅरेक्टर होई सकत हैं जवन शीर्षक में प्रयोग नाई कई  सका जात अहै।",
+       "title-invalid-empty": "निवेदित पन्ना कय शीर्षक खाली है या खाली नामस्थान है।",
+       "title-invalid-utf8": "निवेदित पन्ना कय शीर्षक अवैध यू०टी०एफ़-८ कय सिलसिला राखत है।",
+       "title-invalid-interwiki": "निवेदित पन्ना कय शीर्षक एकठु अंतर-विकी कड़ी रक्खत है जवने कय शीर्षक मा प्रयोग नाइ कै सका जात है।",
        "perfcached": "नीचे दिया हुआ डेटा कैशे मेमोरी से लिया हुआ है, अतः हो सकता है कि इसका पूर्ण अद्यतन न हुआ हो। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजे}} उपलब्ध हैं।",
        "perfcachedts": "नीचे दिया हुआ डेटा कैशे मेमोरी से है, और इसका अंतिम अद्यतन $1 को हुआ था। कैशे मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजे}} उपलब्ध हैं।",
        "querypage-no-updates": "इस पृष्ठ का नवीनीकरण करना मना है। अभी यहाँ के डाटा को ताज़ा नहीं कर सकते।",
        "virus-badscanner": "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
        "virus-scanfailed": "जाँच विफल (कूट $1)",
        "virus-unknownscanner": "अज्ञात ऐंटीवायरस:",
-       "logouttext": "'''à¤\85ब à¤\86प à¤²à¥\89à¤\97 à¤\86à¤\89à¤\9f à¤\95à¤\88 à¤\9aà¥\81à¤\95ा à¤¹à¤µà¥¤'''\nधà¥\8dयान à¤¦à¥\87वा à¤\9cाय à¤\95ि à¤\9cब à¤¤à¤\95 à¤\86प à¤\86पन à¤¬à¥\8dराà¤\89à¤\9c़र à¤\95à¥\88शà¥\87 à¤\96ालà¥\80 à¤¨à¤¾à¤\88 à¤\95रा à¤\9cाà¤\88, à¤\95à¥\81à¤\9b à¤ªà¤¨à¥\8dना à¤\85भà¥\80नà¥\8b à¤\85à¤\88सन à¤¦à¥\87à¤\96ाय à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82 à¤\9cà¥\88सय à¤\95ि à¤\86प à¤\85भà¥\80नà¥\8b à¤²à¥\89à¤\97िन à¤\95रà¥\87 à¤¹à¤µ।",
+       "logouttext": "'''à¤\85ब à¤\86प à¤\96ाता à¤¸à¥\87 à¤¬à¤¹à¤°à¥\87 à¤\86à¤\87 à¤\97वा à¤\97य।'''\nधà¥\8dयान à¤¦à¤¿à¤¹à¤¾ à¤\9cाय à¤\95ि à¤\9cब à¤¤à¤\95 à¤\86प à¤\86पन à¤¬à¥\8dराà¤\89à¤\9c़र à¤\95à¥\88शà¥\87 à¤\96ालà¥\80 à¤¨à¤¾à¤\88 à¤\95रा à¤\9cाà¤\88, à¤\95à¥\81à¤\9b à¤ªà¤¨à¥\8dना à¤\85à¤\88सन à¤¦à¥\87à¤\96ाà¤\87 à¤\9cà¥\88सय à¤\95ि à¤\86प à¤\85बहिनà¥\8b à¤²à¥\89à¤\97िन à¤\95रा à¤\97ा à¤¹à¥\88।",
        "welcomeuser": "आप कय स्वागत है, $1!",
        "welcomecreation-msg": "आप कय खाता बनी गए।\nआपन [[Special:Preferences|{{SITENAME}} वरीयता]] बदलेक ना भूलावा जाइ।",
        "yourname": "सदस्यनावँ:",
        "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)कय नाते टोकन",
        "content-json-empty-object": "खाली चिज",
        "content-json-empty-array": "खाली एरे",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
-       "duplicate-args-category-desc": "पà¥\87à¤\9c à¤\9cà¥\88सà¥\87 à¤¤à¤°à¥\8dà¤\95à¥\8bà¤\82 à¤\95à¥\87 à¤¡à¥\81पà¥\8dलिà¤\95à¥\87à¤\9f à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f à¤\95à¥\89ल, à¤\9cà¥\88सà¥\87 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> à¤\93à¥\88र <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "duplicate-args-category-desc": "पà¥\87à¤\9c à¤\9cà¥\88सà¥\87 à¤¤à¤°à¥\8dà¤\95à¥\8bà¤\82 à¤\95à¥\87 à¤¡à¥\81पà¥\8dलिà¤\95à¥\87à¤\9f à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f à¤\95à¥\89ल, à¤\9cà¥\88सà¥\87 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> à¤\94र <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''चेतावनी:''' इ पन्ना पे बहुत ढेर संख्या में कीमती पार्सर फ़ंक्शनों कय प्रयोग कई गा है।\n\nएकर प्रयोग $2 से कम दाइ होएक चाहि, इ समय प्रयोग $1 दाइ कै गा {{PLURAL:$1|है}}।",
        "expensive-parserfunction-category": "अईसन पन्ना जवन महङा पार्सर फ़ंक्शनन् कय ढेर प्रयोग करत हैं",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचा जोडे कय सीमा पार होई चुका है।\nकवनो-कवनो साँचा नाई जुड़ी।",
        "prefs-help-signature": "बातचीत पन्नन पे करल टिप्पणिन् पे \"<nowiki>~~~~</nowiki>\" से हस्ताक्षर करेक परि, इ आप कय हस्ताक्षर अव समय में परिवर्तित होई जाइ।",
        "badsig": "गलत कच्चा हस्ताक्षर।\nHTML टैग कय जाँच करा जाय।",
        "badsiglength": "ई हस्ताक्षर बहुत बड़ा है।\nई $1 {{PLURAL:$1|कैरैक्टर}} से ढेर कय नाई होएक चाहि।",
-       "yourgender": "à¤\86प à¤\85पनà¥\87 à¤\86प à¤\95य à¤\95à¥\88सन à¤¬à¤¤à¤¾à¤µà¥\87 à¤\9aाहा à¤\9cाà¤\87?",
-       "gender-unknown": "हम à¤\95à¥\81à¤\9b à¤¨à¤¾à¤\88 à¤\95हय à¤\9aाहित à¤\85हन",
-       "gender-male": "à¤\8fन à¤¸à¤®à¥\8dपादन à¤\95रत à¤¹à¤\81य।",
-       "gender-female": "à¤\8fन à¤¸à¤®à¥\8dपादन à¤\95रत à¤\85हिन।",
+       "yourgender": "à¤\86प à¤\95य à¤\95ाव à¤\95हा à¤\9cाय ?",
+       "gender-unknown": "हम à¤¨à¤¾à¤\87 à¤¬à¤¤à¤¾à¤\87ब",
+       "gender-male": "यन à¤¸à¤®à¥\8dपादन à¤\95रा à¤²à¤\81य ।",
+       "gender-female": "यन à¤¸à¤®à¥\8dपादन à¤\95रा à¤²à¤¿à¤¨ ।",
        "prefs-help-gender": "ई जानकारी देब वैकल्पिक होय।\nई सॉफ़्टवेयर में लिंग कय आधार पे आप कय लिए सही संबोधन कय नाते प्रयुक्त होत है।\nई जानकारी सार्वजनिक होइ।",
        "email": "ई-मेल",
        "prefs-help-realname": "असली नाँव कय कवनो जरुरत नाइ है।यकर इस्तेमाल आप कय काम कय बडाइ करय में होइ सकत है ।",
        "nmembers": "$1 {{PLURAL:$1|सदस्य}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्य}}",
        "nrevisions": "$1 {{PLURAL:$1|अवतरण}}",
-       "nviews": "{{PLURAL:$1|एक|$1}} दाइ देखि गा है",
        "nimagelinks": "$1 {{PLURAL:$1|पन्ना|पन्नन्}} पे प्रयुक्त",
        "ntransclusions": "$1 {{PLURAL:$1|पन्ना|पन्नन}} पे प्रयुक्त",
        "specialpage-empty": "इ ब्यौरा कय खर्तीन कवनो परिणाम नाई है।",
index ad81625..82a3c73 100644 (file)
        "nmembers": "$1 {{PLURAL:$1|member|اعضا}}",
        "nmemberschanged": "$1 → $2   {{PLURAL:$2| عضو|عضو}}",
        "nrevisions": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
-       "nviews": "$1 {{PLURAL:$1|دیستن|دیستن}}",
        "nimagelinks": "$1 × $2, $3 {{PLURAL:$3|صفحه|صفحات}}",
        "ntransclusions": "بی $1 {{PLURAL:$1|تاکدیم|تاکدیم}} استپاده بوته",
        "specialpage-empty": "په ای گزارش هچ نتیجه ای نیست ان.",
        "confirm_purge_button": "هوبنت",
        "confirm-purge-top": "ذخیره ای صفحه پهک کنت؟",
        "confirm-purge-bottom": "خالک کتن میانگیر یک صفحه باعث بیتن که آخرین نسخهٔ آی پیش دارگ بیت.",
-       "semicolon-separator": ";",
+       "semicolon-separator": "؛&#32;",
        "colon-separator": ":&#32;",
        "imgmultipageprev": "← پیشگین صفحه",
        "imgmultipagenext": "صفحه بعدی →",
index b867071..8b36734 100644 (file)
        "passwordreset": "Ачыстка паролю",
        "passwordreset-text-one": "Запоўніце гэтую форму, каб скінуць пароль.",
        "passwordreset-text-many": "{{PLURAL:$1|Запоўніце адно з палёў, каб атрымаць часовы пароль праз электронную пошту.}}",
-       "passwordreset-legend": "Ачысьціць пароль",
        "passwordreset-disabled": "Магчымасьць ачысткі паролю была забароненая ў {{GRAMMAR:месны|{{SITENAME}}}}.",
        "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|зьменаў у вашым сьпісе назіраньня]]",
        "creating": "Стварэньне «$1»",
        "editingsection": "Рэдагаваньне: $1 (сэкцыя)",
        "editingcomment": "Рэдагаваньне: $1 (новая сэкцыя)",
-       "editconflict": "Канфлікт рэдагаваньня: $1",
+       "editconflict": "Канфлікт рэдагаваньняў: $1",
        "explainconflict": "Нехта зьмяніў старонку падчас Вашага рэдагаваньня.\nУ верхнім тэкставым акне знаходзіцца цяперашні зьмест старонкі.\nВашыя зьмены паказаныя ў ніжнім акне.\nВам трэба перанесьці Вашыя зьмены ў цяперашні тэкст.\nКалі Вы націсьніце «{{int:savearticle}}», будзе захаваны '''толькі''' тэкст верхняга вакна.",
        "yourtext": "Ваш тэкст",
        "storedversion": "Захаваная вэрсія",
        "yourdiff": "Адрозьненьні",
        "copyrightwarning": "Калі ласка, зьвярніце ўвагу на тое, што ўсе дадаткі і зьмены ў {{GRAMMAR:месны|{{SITENAME}}}} разглядаюцца як выдадзеныя ў адпаведнасьці з умовамі ліцэнзіі $2 (глядзіце падрабязнасьці на $1). Калі Вы супраць таго, каб Вашыя матэрыялы неабмежавана рэдагавалася і распаўсюджвалася, не дадавайце іх.<br />\nВы таксама абавязуецеся, што Ваш матэрыял напісаны асабіста Вамі або зьяўляецца грамадзкім набыткам, альбо ўзяты з падобных вольных крыніцаў.\n'''НЕЛЬГА БЕЗ ДАЗВОЛУ ДАДАВАЦЬ МАТЭРЫЯЛЫ, АБАРОНЕНЫЯ АЎТАРСКІМ ПРАВАМ!'''",
        "copyrightwarning2": "Калі ласка, заўважце, што ўвесь унёсак ў {{GRAMMAR:вінавальны|{{SITENAME}}}} можа рэдагавацца, зьмяняцца і выдаляцца іншымі ўдзельнікамі.\nКалі Вы з гэтым ня згодныя, калі ласка, не зьмяшчайце сюды Вашыя тэксты.<br />\nРазьмяшчэньнем тут тэкстаў, Вы дэкляруеце, што Вы зьяўляецеся іх аўтарам, ці Вы скапіявалі іх з крыніцы, якая дазваляе вольнае выкарыстаньне сваіх тэкстаў (дзеля падрабязнасьцяў глядзіце $1).\n\n'''КАЛІ ЛАСКА, НЕ ЗЬМЯШЧАЙЦЕ ТУТ БЕЗ ДАЗВОЛУ МАТЭРЫЯЛЫ, ЯКІЯ АХОЎВАЮЦЦА АЎТАРСКІМ ПРАВАМ!'''",
+       "editpage-cannot-use-custom-model": "Мадэль зьместу гэтай старонкі ня можа быць зьмененая.",
        "longpageerror": "'''Памылка: Аб’ём тэксту, які Вы спрабуеце запісаць складае $1 {{PLURAL:$1|кілябайт|кілябайты|кілябайтаў}}, што болей устаноўленага абмежаваньня на $2 {{PLURAL:$2|кілябайт|кілябайты|кілябайтаў}}.'''\nСтаронка ня можа быць захаваная.",
        "readonlywarning": "'''ПАПЯРЭДЖАНЬНЕ: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма зараз захаваць Вашыя зьмены.'''\nВы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.\n\nАдміністратар, які заблякаваў базу зьвестак, прапанаваў наступнае тлумачэньне: $1",
        "protectedpagewarning": "'''Папярэджаньне: Гэтая старонка была абароненая, таму толькі адміністратары могуць рэдагаваць яе.'''\nАпошні запіс з журнала пададзены ніжэй для даведкі:",
        "badsig": "Няслушны неапрацаваны подпіс; праверце HTML-тэгі.",
        "badsiglength": "Ваш подпіс занадта доўгі.\nПодпіс мусіць быць не даўжэй за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "yourgender": "Як пра вас пісаць?",
-       "gender-unknown": "Ð\9dе Ð¶Ð°Ð´Ð°Ñ\8e Ð¿Ð°Ð·Ð½Ð°Ñ\87аÑ\86Ñ\8c",
+       "gender-unknown": "Ð\9aалÑ\96 Ð²Ñ\8b Ð±Ñ\83дзеÑ\86е Ð·Ð³Ð°Ð´Ð²Ð°Ñ\86Ñ\86а, Ð¿Ñ\80агÑ\80амнае Ð·Ð°Ð±ÐµÑ\81Ñ\8cпÑ\8fÑ\87Ñ\8dнÑ\8cне Ð±Ñ\83дзе ÐºÐ¾Ð¶Ð½Ñ\8b Ñ\80аз Ð¿Ñ\80Ñ\8b Ð¼Ð°Ð³Ñ\87Ñ\8bмаÑ\81Ñ\8cÑ\86Ñ\96 Ñ\9eжÑ\8bваÑ\86Ñ\8c Ð³ÐµÐ½Ð´Ñ\8dÑ\80на Ð½Ñ\8dÑ\9eÑ\82Ñ\80алÑ\8cнÑ\8bÑ\8f Ñ\81ловÑ\8b",
        "gender-male": "Ён рэдагуе вікістаронкі",
        "gender-female": "Яна рэдагуе вікістаронкі",
        "prefs-help-gender": "Вызначаць гэта неабавязкова.\nАпраграмаваньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.",
        "uploaded-script-svg": "У загружаным SVG-файле знойдзены небясьпечны элемэнт з падтрымкай сцэнароў «$1».",
        "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-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": "У загружаным SVG-файле знойдзены тэг «animate», які можа зьмяняць спасылку з дапамогай атрыбуту «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-event-handler-svg": "Усталёўка атрыбутаў апрацоўкі падзеяў заблякаваная, у загружаным SVG-файле знойдзены код <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-href-svg": "Выкарыстаньне тэгу «set» для дадаваньня атрыбуту «href» у бацькоўскі элемэнт заблякаванае.",
+       "uploaded-wrong-setting-svg": "Ужываньне тэгу «set» для дадаваньня ў якасьці мэты аддаленага адрасу/зьвестак/сцэнару для любога атрыбуту заблякаванае. У загружаным SVG-файле знойдзена <code>&lt;set to=\"$1\"&gt;</code>.",
+       "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»",
        "uploadinvalidxml": "Не атрымалася прааналізаваць XML у загружаным файле.",
        "uploadvirus": "Файл утрымлівае вірус! Падрабязнасьці: $1",
        "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": "Гэтая старонка — пустая.",
        "rollback-success": "Адмененыя рэдагаваньні $1;\nвернутая папярэдняя вэрсія $2.",
        "sessionfailure-title": "Памылка сэсіі",
        "sessionfailure": "Магчыма ўзьніклі праблемы ў Вашым цяперашнім сэансе працы;\nгэта дзеяньне было скасавана для прадухіленьня перахопу сэансу.\nКалі ласка, націсьніце «назад» і перазагрузіце старонку, зь якой Вы прыйшлі, і паспрабуйце ізноў.",
+       "changecontentmodel": "Зьмена мадэлі зьместу старонкі",
+       "changecontentmodel-legend": "Зьмена мадэлі зьместу",
+       "changecontentmodel-title-label": "Назва старонкі",
+       "changecontentmodel-model-label": "Новая мадэль зьместу",
        "protectlogpage": "Журнал абаронаў",
        "protectlogtext": "Ніжэй пададзены сьпіс зьменаў абароны старонкі.\nГлядзіце [[Special:ProtectedPages|сьпіс абароненых старонак на цяперашні момант]].",
        "protectedarticle": "абароненая «[[$1]]»",
        "tooltip-pt-logout": "Выйсьці",
        "tooltip-pt-createaccount": "Мы прапануем вам стварыць рахунак і ўвайсьці, але гэта не абавязкова",
        "tooltip-ca-talk": "Абмеркаваньне зьместу старонкі",
-       "tooltip-ca-edit": "Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ñ\80Ñ\8dдагаваÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83. Ð\9aалÑ\96 Ð»Ð°Ñ\81ка, Ñ\83жÑ\8bвайÑ\86е ÐºÐ½Ð¾Ð¿ÐºÑ\83 Ð¿Ñ\80аглÑ\8fдÑ\83 Ð¿ÐµÑ\80ад Ð·Ð°Ñ\85аванÑ\8cнем.",
+       "tooltip-ca-edit": "РÑ\8dдагаваÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83",
        "tooltip-ca-addsection": "Пачаць новую сэкцыю",
        "tooltip-ca-viewsource": "Гэтая старонка абароненая. \nАле можна паглядзець яе крынічны тэкст",
        "tooltip-ca-history": "Мінулыя вэрсіі гэтай старонкі.",
        "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/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].",
        "tags-delete-explanation-active": "<strong>Метка «$1» яшчэ актыўная і будзе па-ранейшаму ўжывацца ў будучыні.</strong> Каб спыніць гэта, перайдзіце туды, дзе ўсталяванае выкарыстаньне меткі і адключыце яе там.",
        "tags-delete-reason": "Прычына:",
        "tags-delete-submit": "Незваротна выдаліць гэтую метку",
+       "tags-delete-not-allowed": "Меткі, вызначаныя пашырэньнем, ня могуць быць выдаленыя, акрамя выпадку, калі пашырэньне дазваляе гэта.",
+       "tags-delete-not-found": "Метка «$1» не існуе.",
+       "tags-delete-too-many-uses": "Метка «$1» выкарыстаная ў больш чым $2 {{PLURAL:$2|вэрсіі|вэрсіях}}, адпаведна, яна ня можа быць выдаленая.",
+       "tags-delete-warnings-after-delete": "Метка «$1» была пасьпяхова выдаленая, але {{PLURAL:$2|1=атрыманае наступнае папярэджаньне|атрыманыя наступныя папярэджаньні}}:",
+       "tags-activate-title": "Актываваць метку",
        "comparepages": "Параўнаньне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
        "logentry-upload-upload": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|загрузіў|загрузіла}} новую вэрсію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|дадаў|дадала}} {{PLURAL:$7|1=цэтлік|цэтлікі}} $6 да вэрсіі $4 старонкі $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|дадаў|дадала}} {{PLURAL:$7|1=цэтлік|цэтлікі}} $6 да запісу журналу $5 старонкі $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|выдаліў|выдаліла}} {{PLURAL:$9|1=цэтлік|цэтлікі}} $8 з вэрсіі $4 старонкі $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|выдаліў|выдаліла}} {{PLURAL:$9|1=цэтлік|цэтлікі}} $8 з запісу журналу $5 старонкі $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|абнавіў|абнавіла}} цэтлікі на вэрсіі $4 старонкі $3 ({{PLURAL:$7|дададзена}} $6; {{PLURAL:$9|выдалена}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|абнавіў|абнавіла}} цэтлікі на запісе журналу $5 старонкі $3 ({{PLURAL:$7|дададзена}} $6; {{PLURAL:$9|выдалена}} $8)",
        "rightsnone": "(няма)",
        "revdelete-summary": "кароткае апісаньне зьменаў",
        "feedback-adding": "Даданьне водгуку на старонку…",
+       "feedback-back": "Назад",
        "feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
        "feedback-bugnew": "Я праверыў. Гэта новая памылка",
        "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": "Памылка рэдагаваньня",
        "feedback-error3": "Памылка: няма адказу ад API",
        "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": "старонка яшчэ не існуе"
 }
index 5b3ab20..8dc411f 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Baloch Afghanistan",
                        "Ibrahim khashrowdi",
-                       "Rachitrali"
+                       "Rachitrali",
+                       "Mjbmr"
                ]
        },
        "tog-underline": "لینکانی جهلگا خط کشیتین",
        "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": "نتیجه په راپور ئا موجود نه اینت.",
        "confirm-watch-top": "ای دیم بئ شمی دیدارلیست ئا ایزاپه بیئت؟",
        "confirm-unwatch-button": "قبول داشتین",
        "confirm-unwatch-top": "ای دیم شه شمئ دیدارلیست ئا پاک بیئت؟",
+       "semicolon-separator": "؛&#32;",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "&rarr; دیمتیری تاکدیم",
        "imgmultipagenext": "بئدین تاکدیم &larr;",
index b22502f..f5189a1 100644 (file)
        "revdelete-reasonotherlist": "अन्य कारण",
        "revdelete-edit-reasonlist": "हटावे के कारण बदलीं",
        "revdelete-offender": "संशोधन सम्पादक:",
+       "mergehistory": "पन्नवन के इतिहास विलय करीं",
+       "mergehistory-box": "दू गो पन्नवन के अवतरण विलय करीं",
        "mergehistory-from": "स्रोत पन्ना:",
+       "mergehistory-into": "लक्ष्य पन्ना:",
+       "mergehistory-list": "विलय जोग्य संपादन इतिहास",
+       "mergehistory-submit": "अवतरण विलय करीं",
+       "mergehistory-empty": "कौनों अवतरण विलय नइखे कइल जा सकत।",
+       "mergehistory-success": " [[:$1]] के $3 {{PLURAL:$3|अवतरण|अवतरण सभ}} सफलता से [[:$2]] में विलय भइल।",
+       "mergehistory-fail": "इतिहास विलय करे में अक्षम, पन्ना आ एकर टाइम पैरामीटर चेक करीं।",
        "mergehistory-reason": "कारण:",
        "revertmerge": "अलग करीं",
        "mergelogpagetext": "एक पन्ना इतिहास के दुसर पन्ना इतिहास में तुरंत विलय भइले के एगो सूची नीचे दिहल बा।",
        "yourgender": "रउआँ के का बोलावल जाय?",
        "gender-unknown": "हम न बताइब",
        "email": "ईमेल",
+       "prefs-help-email-required": "ईमेल पता चाहत बाटे।",
        "prefs-info": "बेसिक जानकारी",
        "prefs-i18n": "वैश्वीकरण",
        "prefs-signature": "दसखत",
        "prefs-editor": "संपादक",
        "prefs-preview": "पूर्वावलोकन",
        "prefs-advancedrc": "एडवांस बिकल्प",
+       "prefs-advancedrendering": "एडवांस बिकल्प",
+       "prefs-advancedsearchoptions": "एडवांस बिकल्प",
+       "prefs-advancedwatchlist": "एडवांस बिकल्प",
+       "prefs-displayrc": "डिस्प्ले बिकल्प",
+       "prefs-displaywatchlist": "डिस्प्ले बिकल्प",
+       "prefs-tokenwatchlist": "टोकन",
+       "prefs-diffs": "अंतर",
+       "prefs-help-prefershttps": "राउर ई पसंद के सेटिंग अगिला बेर लॉग इन कइले पर लागू होई।",
        "group": "मंडली (ग्रुप):",
        "group-user": "सदस्य",
        "group-autoconfirmed": "खुद परीक्षित सदस्य",
        "group-bureaucrat": "ब्यूरोक्रेट",
        "group-suppress": "ओवरसाइटर",
        "group-all": "(सब)",
+       "group-user-member": "{{GENDER:$1|सदस्य}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|खुद अस्थापित सदस्य}}",
+       "group-bot-member": "{{GENDER:$1|बॉट}}",
+       "group-sysop-member": "{{GENDER:$1|प्रबंधक}}",
+       "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}",
+       "group-suppress-member": "{{GENDER:$1|ओवरसाइट}}",
+       "grouppage-user": "{{ns:project}}:सदस्य सभ",
+       "grouppage-autoconfirmed": "{{ns:project}}:खुद अस्थापित सदस्य सभ",
+       "grouppage-bot": "{{ns:project}}:बॉट सभ",
+       "grouppage-sysop": "{{ns:project}}:प्रबंधक सभ",
+       "grouppage-bureaucrat": "{{ns:project}}:प्रशासक सभ",
+       "grouppage-suppress": "{{ns:project}}:ओवरसाइटर सभ",
        "right-read": "पन्ना पढ़ीं",
+       "right-edit": "पन्नवन के संपादन करीं",
        "right-createpage": "पन्ना बनाईं (बातचीत पन्ना की अलावा)",
        "right-createtalk": "बातचीत पन्ना बनाईं",
        "right-createaccount": "नया सदस्य खाता बनाईं",
        "right-upload": "फाइल अपलोड करीं",
        "right-reupload": "पुरान फाइल की ऊपर नया लादीं",
        "right-reupload-own": "खुदे लादल फाइल पर नया फाइल लादीं",
+       "right-reupload-shared": "लोकल में साझा मीडिया भण्डार के फाइल सभ के ओवरराइड करीं",
+       "right-upload_by_url": "यूआरयल से फाइल अपलोड करीं",
+       "right-purge": "बिना पुछले कौनों पन्ना के साइट कैश के फिर लोड करीं",
+       "right-autoconfirmed": "आइ पी आधारित रेट के सीमा से प्रभावित ना होखे",
+       "right-bot": "ऑटोमेटेड प्रोसेस मानल जाय",
        "right-writeapi": "API लेखन के इस्तेमाल",
        "right-delete": "पन्ना हटाईं",
        "right-bigdelete": "लंबा इतिहास वाला पन्ना हटाईं",
        "ignorewarnings": "चेतावनी छोड़ीं",
        "minlength1": "फाइलनाँव कमसेकम एक अच्छर के चाही",
        "unknown-error": "अज्ञात त्रुटि उत्पन्न हो गईल बा।",
+       "upload-source": "सोर्स फाइल",
+       "sourcefilename": "सोर्स फाइलनाँव:",
+       "sourceurl": "सोर्स यूआरयल:",
+       "destfilename": "लक्ष्य फाइलनाँव:",
+       "upload-maxfilesize": "अधिक से अधिक फाइल साइज: $1",
+       "upload-description": "फाइल के विवरण",
+       "upload-options": "अपलोड बिकल्प",
+       "watchthisupload": "ई फाइल के धियान रखीं",
+       "filewasdeleted": "एही नाँव के एगो फाइल पहिले अपलोड भइल रहे आ बाद में हटावल गइल। पहिले आप $1 के जाँच लीं फिर अपलोड करे खातिर आगे बढ़ीं।",
+       "upload-success-subj": "सफलता से अपलोड भइल",
+       "upload-failure-subj": "अपलोड समस्या",
+       "upload-warning-subj": "अपलोड चेतावनी",
+       "upload-proto-error": "गलत प्रोटोकाल",
+       "upload-file-error": "इंटरनल खराबी",
+       "upload-misc-error": "नामालूम अपलोड खराबी",
+       "backend-fail-alreadyexists": "फाइल $1 पहिले से मौजूद बाटे",
+       "backend-fail-store": "फाइल $1 के $2 पर सहेजल ना जा सकल।",
+       "backend-fail-copy": "फाइल $1 के $2 पर कॉपी ना कइल जा सकल।",
+       "backend-fail-move": "फाइल $1 के $2 पर स्थानांतरण ना हो सकल।",
+       "backend-fail-opentemp": "टेम्परेरी फाइल के ना खोलल जा सकल।",
+       "backend-fail-writetemp": "टेम्परेरी फाइल में ना राइट कइल जा सकल।",
+       "backend-fail-closetemp": "टेम्परेरी फाइल के बंद ना कइल जा सकल।",
        "license": "लाइसेंस जानकारी:",
        "license-header": "लाइसेंसिंग",
        "nolicense": "कौनों नइखे",
index 360802a..242bfa7 100644 (file)
@@ -24,7 +24,8 @@
                        "לערי ריינהארט",
                        "Aftabuzzaman",
                        "Wikisagnik",
-                       "Aashaa"
+                       "Aashaa",
+                       "Sayma Jahan"
                ]
        },
        "tog-underline": "সংযোগগুলির নিচে দাগ দেখানো হোক:",
        "page-rss-feed": "\"$1\" আরএসএস ফিড",
        "page-atom-feed": "\"$1\" অ্যাটম ফিড",
        "feed-atom": "অ্যাটম",
-       "red-link-title": "$1 (পাতা নেই)",
+       "red-link-title": "$1 (পাতার অস্তিত্ব নেই)",
        "sort-descending": "উল্টো বর্ণক্রমে সাজাও",
        "sort-ascending": "বর্ণানুক্রমে সাজাও",
        "nstab-main": "পাতা",
        "title-invalid-characters": "অনুরোধকৃত পাতার শিরোনামে অবৈধ অক্ষর রয়েছে: \"$1\"।",
        "title-invalid-relative": "শিরনামে রিলেটিভ পাথ ব্যবহার করা হয়েছে (./, ../), রিলেটিভ পাথ ব্যবহার উপযোগী নয়, কারণ ব্যবহারকারীর ব্রাউজারে এটি সঠিকভাবে কাজ করে না।",
        "title-invalid-magic-tilde": "অনুরোধকৃত পাতার শিরোনামে অবৈধ জাদু টিল্ডা অনুক্রম (<nowiki>~~~</nowiki>) রয়েছে।",
-       "title-invalid-too-long": "পাতার à¦¶à¦¿à¦°à¦¨à¦¾à¦®à¦\9fি à¦\85তà§\8dযাধিà¦\95 à¦¦à§\80রà§\8dà¦\98। à¦\87à¦\89নিà¦\95à§\8bড à¦\8fনà¦\95à§\8bডিà¦\82 à¦\85নà§\81যায়à§\80 à¦¶à¦¿à¦°à¦¨à¦¾à¦® à¦¸à¦°à§\8dবà§\8bà¦\9aà§\8dà¦\9a  $1 à¦¬à¦¾à¦\87à¦\9f à¦¦à§\80রà§\8dà¦\98 à¦¹à¦¤à§\87 à¦ªà¦¾à¦°à¦¬à§\87।",
+       "title-invalid-too-long": "পাতার à¦¶à¦¿à¦°à§\8bনামà¦\9fি à¦\85তà§\8dযাধিà¦\95 à¦¦à§\80রà§\8dà¦\98। à¦\87à¦\89à¦\9fিà¦\8fফ-৮ à¦\8fনà¦\95à§\8bডিà¦\82 à¦\85নà§\81যায়à§\80 à¦\8fà¦\9fি $1 {{PLURAL:$1|বাà¦\87à¦\9fà§\87র}} à¦¥à§\87à¦\95à§\87 à¦¦à§\80রà§\8dà¦\98 à¦¹à¦¤à§\87 à¦ªà¦¾à¦°à¦¬à§\87 à¦¨à¦¾।",
        "title-invalid-leading-colon": "অনুরোধকৃত পাতার শিরোনামের শুরুতে একটি অবৈধ কোলন রয়েছে।",
        "perfcached": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সম্পূর্ণ হালনাগাদকৃত না-ও হতে পারে। সর্বোচ্চ {{PLURAL:$1|একটি ফলাফল|$1 টি ফলাফল}} ক্যাশে থাকতে পারে।",
        "perfcachedts": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং $1 তারিখে হালনাগাদ করা হয়েছে। সর্বোচ্চ {{PLURAL:$4|একটি ফলাফল|$4 টি ফলাফল}} ক্যাশে থাকতে পারে।",
        "passwordreset": "পাসওয়ার্ড রিসেট",
        "passwordreset-text-one": "আপনার পাসওয়ার্ড পুনরায় সেট করতে এই ফর্মটি পূরণ করুন।",
        "passwordreset-text-many": "{{PLURAL:$1|ইমেইলের মাধ্যমে একটি অস্থায়ী পাসওয়ার্ড পেতে ঘরগুলির একটি পূরণ করুন।}}",
-       "passwordreset-legend": "পাসওয়ার্ড রিসেট",
        "passwordreset-disabled": "এই উইকিতে পাসওয়ার্ড রিসেটের সুবিধা নিষ্ক্রিয় রয়েছে।",
        "passwordreset-emaildisabled": "এই উইকিতে ইমেইল অপশনটি বন্ধ করা হয়েছে।",
        "passwordreset-username": "ব্যবহারকারী নাম:",
        "resettokens": "রিসেট টোকেন",
        "resettokens-text": "আপনি টোকেন রিসেট করতে পারেন, যা অ্যাকাউন্টের সাথে সম্পর্কিত আপনার ব্যক্তিগত তথ্য দেখার কাজে ব্যবহার করা হয়।",
        "resettokens-no-tokens": "রিসেট করার মত কোনো টোকেন নেই।",
-       "resettokens-legend": "রিসেট টোকেন",
        "resettokens-tokens": "টোকেন:",
        "resettokens-token-label": "$1 (বর্তমান: $2)",
        "resettokens-watchlist-token": "ওয়েব ফিড (Atom/RSS) টোকেন পরিবর্তনের জন্য [[Special:Watchlist|নজরতালিকায় থাকা পাতাগুলোতে পরিবর্তন এসেছে]]",
        "yourdiff": "পার্থক্য",
        "copyrightwarning": "অনুগ্রহ করে লক্ষ্য করুন {{SITENAME}}-তে সমস্ত অবদান $2-এর আওতায় প্রাপ্য (বিস্তারিত $1-তে দেখুন)। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে পুনর্বিতরণ করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না।<br />\nআপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন, বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন।\n'''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না!'''",
        "copyrightwarning2": "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''",
+       "editpage-cannot-use-custom-model": "এই পাতার বিষয়বস্তুর মডেল পরিবর্তন করা যাবে না।",
        "longpageerror": "'''ত্রুটি:  আপনার জমা দেয়া টেক্সটের পরিমাণ {{PLURAL:$1|এক কিলোবাইট|$1 কিলোবাইট}}, যা সর্বোচ্চ সীমা {{PLURAL:$2|এক কিলোবাইটের|$2 কিলোবাইটের}} চেয়ে বেশি।'''\nএটি সংরক্ষণ করা সম্ভব নয়।",
        "readonlywarning": "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।'''\nআপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।\n\nযে প্রশাসক এই ডাটাবেজটি অবরুদ্ধ করেছেন তিনি যা ব্যাখ্যা দিয়েছেন: $1",
        "protectedpagewarning": "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "content-model-css": "সিএসএস",
        "content-json-empty-object": "খালি অবজেক্ট",
        "content-json-empty-array": "খালি অ্যারে",
+       "duplicate-args-warning": "<strong>সতর্কীকরণ:</strong> \"$3\" প্যারামিটারের জন্য একের অধিক মানসহ [[:$1]] [[:$2]] কে আহ্বান করছে। শুধুমাত্র প্রদত্ত শেষ মান ব্যবহৃত হবে।",
        "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|বর্তমানে $1}}।",
        "badsig": "অবৈধ স্বাক্ষর; এইচটিএমএল ট্যাগ পরীক্ষা করুন।",
        "badsiglength": "আপনার স্বাক্ষরটি বেশ লম্বা।\nযা অবশ্যই $1 {{PLURAL:$1|অক্ষরের|অক্ষরের}} বেশী হতে পারবে না।",
        "yourgender": "আপনি কিভাবে নিজের বিবরণ দিতে পছন্দ করেন?",
-       "gender-unknown": "à¦\86মি à¦¬à¦¿à¦¸à§\8dতারিত à¦¬à¦²à¦¤à§\87 à¦ªà¦\9bনà§\8dদ à¦\95রি à¦¨à¦¾",
+       "gender-unknown": "যà¦\96ন à¦\86পনাà¦\95à§\87 à¦\89লà§\8dলà§\87à¦\96 à¦\95রা à¦¹à¦¬à§\87, à¦¸à¦«à¦\9fà¦\93য়à§\8dযার à¦¯à¦\96নà¦\87 à¦¸à¦®à§\8dভব à¦²à¦¿à¦\99à§\8dà¦\97 à¦¨à¦¿à¦°à¦ªà§\87à¦\95à§\8dষ à¦¶à¦¬à§\8dদ à¦¬à§\8dযবহার à¦\95রবà§\87",
        "gender-male": "তিনি (পুরুষ) উইকি পাতা সম্পাদনা করেন",
        "gender-female": "তিনি (মহিলা) উইকি পাতা সম্পাদনা করেন",
        "prefs-help-gender": "সেটিংসের এই পরিবর্তন ঐচ্ছিক।\nসফটওয়্যারে মাধ্যমে লিঙ্গ অনুযায়ী সম্বধনের ক্ষেত্রে এটি ব্যবহৃত হয়।\nএই তথ্য সকলের জন্য উন্মুক্ত থাকেবে।",
        "userrights-lookup-user": "ব্যবহারকারী দল ব্যবস্থাপনা করুন",
        "userrights-user-editname": "ব্যবহারকারীর নাম লিখুন:",
        "editusergroup": "ব্যবহারকারীর দল সম্পাদনা করো",
-       "editinguser": "'''[[User:$1|$1]]''' $2 ব্যবহারকারীর জন্য ব্যবহারকারী অধিকার পরিবর্তন করছেন",
+       "editinguser": "<strong>[[User:$1|$1]]</strong> $2 {{GENDER:$1|ব্যবহারকারীর}} জন্য ব্যবহারকারী অধিকার পরিবর্তন করছেন",
        "userrights-editusergroup": "ব্যবহারকারীর দল সম্পাদনা করো",
        "saveusergroups": "ব্যবহারকারীর দল সংরক্ষণ করো",
        "userrights-groupsmember": "সদস্য:",
        "uploaddisabledtext": "ফাইল আপলোড নিষ্ক্রিয়।",
        "php-uploaddisabledtext": "পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।\nঅনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।",
        "uploadscripted": "এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।",
+       "uploaded-hostile-svg": "আপলোড করা SVG ফাইলের শৈলী উপাদানে অনিরাপদ সিএসএস পাওয়া গেছে।",
        "uploadscriptednamespace": "এই SVG ফাইলে অবৈধ নামস্থান \"$1\" রয়েছে",
        "uploadinvalidxml": "আপলোডকৃত ফাইলে XML পার্স করা যাবে না।",
        "uploadvirus": "এই ফাইলটিতে ভাইরাস আছে! ব্যাখ্যা: $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": "এই রিপোর্টের জন্য কোন ফলাফল নেই।",
        "protectedpages-unknown-timestamp": "অজানা",
        "protectedpages-unknown-performer": "অজানা ব্যবহারকারী",
        "protectedtitles": "সুরক্ষিত শিরোনামগুলি",
+       "protectedtitles-summary": "এই পাতায় বর্তমানে সৃষ্টি করা থেকে সুরক্ষিত পাতার শিরোনামের তালিকা রয়েছে। বিদ্যমান সুরক্ষিত পাতার একটি তালিকা দেখার জন্য, [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] দেখুন।",
        "protectedtitlesempty": "কোন শিরোনাম বর্তমানে এই প্যারামিটারগুলিসহ সুরক্ষিত নয়।",
        "listusers": "ব্যবহারকারীর তালিকা",
        "listusers-editsonly": "শুধুমাত্র এমন ব্যবহারকারীদের দেখাও যাদের অবদান আছে",
        "rollback-success": "$1-এর সম্পাদনাগুলি পূর্বাবস্থায় ফিরিয়ে নেওয়া হয়েছে; $2-এর করা শেষ সংস্করণে পাতাটি ফেরত নেওয়া হয়েছে।",
        "sessionfailure-title": "সেশন পরিত্যক্ত",
        "sessionfailure": "আপনার লগ ইন সেশনে একটি সমস্যা হয়েছে বলে মনে হচ্ছে;\nসেশন হাইজ্যাক প্রতিরোধের উপায় হিসেবে এই কাজটি বাতিল করা হয়েছে।\nঅনুগ্রহ ব্রাউজারের \"back\" বোতাম চাপুন এবং যে পাতা থেকে এসেছিলেন, তা রিলোড করুন এবং আবার চেষ্টা করুন।",
+       "logentry-contentmodel-change": "$1 $3 পাতার বিষয়বস্তুর মডেল \"$4\" থেকে \"$5\"-এ {{GENDER:$2|পরিবর্তন করেছেন}}",
        "protectlogpage": "সুরক্ষা লগ",
        "protectlogtext": "নিচে সুরক্ষিত পাতার  একটি তালিকা দেয়া হল। \nবর্তমানে সক্রিয় পাতার সুরক্ষাগুলির তালিকা দেখতে [[Special:ProtectedPages|সুরক্ষিত পাতার তালিকা]] দেখুন।",
        "protectedarticle": "সুরক্ষিত \"[[$1]]\"",
        "movepagetalktext": "পাতাটির সাথে সাথে সংশ্লিষ্ট আলোচনা পাতাটিও স্বয়ংক্রিয়ভাবে সরানো হবে '''যদি না:'''\n*খালি নয় এমন একটি আলাপ পাতা নতুন শিরোনামটির অধীনে ইতিমধ্যেই বিদ্যমান থাকে, অথবা\n*আপনি নিচের বাক্সটি থেকে টিক সরিয়ে নিতে পারেন।\n\nএসব ক্ষেত্রে আপনি চাইলে নিজের হাতে পাতাটিকে সরাতে বা একত্রীকরণ করতে পারেন।",
        "movearticle": "যে পাতা সরিয়ে ফেলা হবে",
        "moveuserpage-warning": "'''সতর্কতা:''' আপনি একটি ব্যবহারকারী পাতা স্থানান্তর করছেন। অনুগ্রহ করে লক্ষ্য করুন যে এর মাধ্যমে কেবলমাত্র পাতাটি স্থানান্তর হবে, কিন্তু পাতার নাম পরিবর্তন হবে ''না''।",
+       "movecategorypage-warning": "<strong>সতর্কীকরণ:</strong> আপনি একটি বিষয়শ্রেণীর পাতা স্থানান্তর করতে চলেছেন। দয়া করে মনে রাখবেন যে এতে শুধুমাত্র পাতাটি স্থানান্তরিত হবে এবং পুরাতন বিষয়শ্রেণীতে থাকা কোন পাতা নতুনটিতে পুনঃশ্রেণীকরণ করা হবে <em>না</em>।",
        "movenologintext": "কোন পাতা সরিয়ে ফেলতে চাইলে আপনাকে অবশ্যই একজন নিবন্ধিত ব্যবহারকারী হতে হবে ও অ্যাকাউন্টে [[Special:UserLogin|প্রবেশ]] করতে হবে।",
        "movenotallowed": "আপনার {{SITENAME}}-তে পাতা স্থানান্তরের অনুমতি নেই।",
        "movenotallowedfile": "আপনার এই ফাইলটি স্থানান্তরের অনুমতি নেই।",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|আলাপ]])",
        "timezone-utc": "ইউটিসি",
        "duplicate-defaultsort": "' ' ' সাবধান: ' ' '  ডিফল্ট সাজানোর কীঃ \"$2\" পূর্বে ডিফল্ট সাজানোর কীঃ \"$1\" কে অগ্রাহ্য করে।",
+       "invalid-indicator-name": "<strong>ত্রুটি:</strong> পাতার অবস্থা নির্দেশক <code>name</code> অ্যাট্রিবিউট খালি হতে পারবে না।",
        "version": "সংস্করণ",
        "version-extensions": "ইন্সটলকৃত এক্সটেনশনসমূহ",
        "version-skins": "ইনস্টল করা স্কিনসমূহ",
        "tags-actions-header": "কার্যসমূহ",
        "tags-active-yes": "হ্যাঁ",
        "tags-active-no": "না",
+       "tags-source-extension": "একটি এক্সটেনশন দ্বারা সংজ্ঞায়িত",
+       "tags-source-manual": "ব্যবহারকারী এবং বট দ্বারা ম্যানুয়ালি প্রয়োগ",
        "tags-source-none": "আর ব্যবহার করা হচ্ছে না",
        "tags-edit": "সম্পাদনা",
        "tags-delete": "অপসারণ",
        "tags-create-tag-name": "ট্যাগের নাম:",
        "tags-create-reason": "কারণ:",
        "tags-create-submit": "তৈরি করুন",
+       "tags-create-no-name": "আপনাকে একটি ট্যাগের নাম অবশ্যই উল্লেখ করতে হবে।",
        "tags-delete-title": "ট্যাগ অপসারণ",
        "tags-delete-reason": "কারণ:",
        "tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
        "tags-edit-manage-link": "ট্যাগ পরিচালনা করুন",
        "tags-edit-revision-selected": "[[:$2]] পাতার {{PLURAL:$1|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|নির্বাচিত লগ ইভেন্ট}}:",
+       "tags-edit-existing-tags": "বিদ্যমান ট্যাগ:",
        "tags-edit-new-tags": "নতুন ট্যাগ:",
        "tags-edit-reason": "কারণ:",
+       "tags-edit-success": "পরিবর্তন সফলভাবে প্রয়োগ করা হয়েছে।",
+       "tags-edit-failure": "পরিবর্তন প্রয়োগ করা যায়নি: $1",
        "tags-edit-nooldid-title": "লক্ষ্য সংশোধন অবৈধ",
+       "tags-edit-none-selected": "যোগ করতে অথবা অপসারণ করতে অন্ততপক্ষে একটি ট্যাগ দয়া করে নির্বাচন করুন।",
        "comparepages": "পাতার তুলনা",
        "compare-page1": "পাতা ১",
        "compare-page2": "পাতা ২",
        "revdelete-unrestricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-এর উপর থেকে বাধা তুলে {{GENDER:$2|নিয়েছেন}}",
+       "logentry-import-upload": "$1 ফাইল আপলোড দ্বারা $3 {{GENDER:$2|আমদানি করেছেন}}",
        "logentry-import-interwiki": "$1 অন্য একটি উইকিতে থেকে $3 {{GENDER:$2|আমদানি করেছে}}",
        "logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{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-titleinput-description-new-page": "পাতা এখনো বিদ্যমান নয়",
+       "mw-widgets-titleinput-description-redirect": "$1-এ পুনঃনির্দেশিত"
 }
index 98cd52e..c9da4e7 100644 (file)
        "passwordreset": "Adderaouekaat ar ger-tremen",
        "passwordreset-text-one": "Leugnit ar furmskrid-mañ evit adderaouekaat ho ker-tremen.",
        "passwordreset-text-many": "{{PLURAL:$1|Leugnit unan eus ar maeziennoù da adderaouekaat ho ker-tremen.}}",
-       "passwordreset-legend": "Adsevel ar ger-tremen",
        "passwordreset-disabled": "Diweredekaet eo bet an adsevel gerioù-tremen war ar wiki-mañ.",
        "passwordreset-emaildisabled": "Ne c'haller ket ober gant posteloù er wiki-mañ.",
        "passwordreset-username": "Anv implijer :",
        "changeemail-throttled": "Betek re hoc'h heus klasket kevreañ en aner.\nGortozit $1, mar plij, a-raok esaeañ en-dro.",
        "resettokens": "Adderaouekaat ar jedoueroù",
        "resettokens-no-tokens": "N'eus jedouer ebet da adderaouekaat.",
-       "resettokens-legend": "Adderaouekaat ar jedoureoù",
        "resettokens-tokens": "Jedoueroù :",
        "resettokens-token-label": "$1 (talvoud bremañ : $2)",
        "resettokens-done": "Jedoueroù adderaouekaet.",
        "notextmatches": "N'emañ ar ger(ioù) goulennet e testenn pennad ebet",
        "prevn": "{{PLURAL:$1|$1}} kent",
        "nextn": "{{PLURAL:$1|$1}} war-lerc'h",
+       "prev-page": "pajenn gent",
+       "next-page": "pajenn war-lerc'h",
        "prevn-title": "$1 {{PLURAL:$1|disoc'h|disoc'h}} kent",
        "nextn-title": "$1 {{PLURAL:$1|disoc'h|disoc'h}} war-lerc'h",
        "shown-title": "Diskouez $1 {{PLURAL:$1|disoc'h|disoc'h}} dre bajenn",
        "randomincategory-nopages": "N'eus pajenn ebet e [[:Category:$1]].",
        "randomincategory-category": "Rummad :",
        "randomincategory-legend": "Ur bajenn dre zegouezh er rummad",
+       "randomincategory-submit": "Mont",
        "randomredirect": "Ur bajenn adkas dre zegouezh",
        "randomredirect-nopages": "N'eus pajenn adkas ebet en esaouenn anv \"$1\".",
        "statistics": "Stadegoù",
        "nmembers": "$1 {{PLURAL:$1|elfenn|elfenn}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|ezel}}",
        "nrevisions": "$1 {{PLURAL:$1|stumm|stumm}}",
-       "nviews": "$1 {{PLURAL:$1|selladenn|selladenn}}",
        "nimagelinks": "Implijet e $1 {{PLURAL:$1|pajenn|pajenn}}",
        "ntransclusions": "implijet e $1 {{PLURAL:$1|pajenn|pajenn}}",
        "specialpage-empty": "Goullo eo ar bajenn-mañ.",
index baa7e08..de5f247 100644 (file)
@@ -20,7 +20,8 @@
                        "아라",
                        "Milicevic01",
                        "Macofe",
-                       "Emir Mujadzic"
+                       "Emir Mujadzic",
+                       "Srdjan m"
                ]
        },
        "tog-underline": "Podvuci veze:",
@@ -35,7 +36,7 @@
        "tog-editsectiononrightclick": "Uključite 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 pomjerim 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",
@@ -43,8 +44,8 @@
        "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-enotifusertalkpages": "Pošalji mi e-poštu kad se promijeni moja korisnička stranica za razgovor",
-       "tog-enotifminoredits": "Pošalji mi e-poštu također za male izmjene u stranicama i datotekama",
-       "tog-enotifrevealaddr": "Otkrij adresu moje e-pošte u porukama obaviještenja",
+       "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)",
@@ -56,7 +57,7 @@
        "tog-watchlisthideliu": "Sakrij promjene prijavljenih korisnika sa liste praćenja",
        "tog-watchlisthideanons": "Sakrij promjene anonimnih korisnika sa liste praćenja",
        "tog-watchlisthidepatrolled": "Sakrij patrolirane izmjene sa spiska praćenja",
-       "tog-ccmeonemails": "Pošalji mi kopije emailova koje pošaljem drugim korisnicima",
+       "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-showhiddencats": "Prikaži skrivene kategorije",
        "tog-norollbackdiff": "Nakon vraćanja zanemari prikaz razlika",
@@ -68,8 +69,8 @@
        "editfont-style": "Stil slova područja uređivanja:",
        "editfont-default": "Po postavkama preglednika",
        "editfont-monospace": "Slova sa jednostrukim razmakom",
-       "editfont-sansserif": "Slova bez serifa",
-       "editfont-serif": "Slova serif",
+       "editfont-sansserif": "Beserifni font",
+       "editfont-serif": "Serifni font",
        "sunday": "nedjelja",
        "monday": "ponedjeljak",
        "tuesday": "utorak",
        "category-empty": "''Ova kategorija trenutno ne sadrži članke ni medije.''",
        "hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}",
        "hidden-category-category": "Skrivene kategorije",
-       "category-subcat-count": "{{PLURAL:$2|Ova kategorija ima sljedeću podkategoriju.|Ova kategorija ima {{PLURAL:$1|sljedeću podkategoriju|sljedeće $1 podkategorije|sljedećih $1 podkategorija}}, od $2 ukupno.}}",
-       "category-subcat-count-limited": "Ova kategorija sadrži {{PLURAL:$1|slijedeću $1 podkategoriju|slijedeće $1 podkategorije|slijedećih $1 podkategorija}}.",
+       "category-subcat-count": "{{PLURAL:$2|Ova kategorija samo ima sljedeću potkategoriju.|Ova kategorija ima {{PLURAL:$1|sljedeću potkategoriju|sljedeće $1 potkategorije|sljedećih $1 potkategorija}}, od $2 ukupno.}}",
+       "category-subcat-count-limited": "Ova kategorija sadrži {{PLURAL:$1|sljedeću $1 potkategoriju|sljedeće $1 potkategorije|sljedećih $1 potkategorija}}.",
        "category-article-count": "{{PLURAL:$2|U ovoj kategoriji nalazi se $1 članak.|{{PLURAL:$1|Prikazan je $1 članak|Prikazana su $1 članka|Prikazano je $1 članaka}} od ukupno $2 u ovoj kategoriji.}}",
        "category-article-count-limited": "{{PLURAL:$1|Slijedeća $1 stranica je|Slijedeće $1 stranice su|Slijedećih $1 stranica je}} u ovoj kategoriji.",
        "category-file-count": "{{PLURAL:$2|Ova kategorija ima slijedeću $1 datoteku.|{{PLURAL:$1|Prikazana je $1 datoteka|Prikazane su $1 datoteke|Prikazano je $1 datoteka}} u ovoj kategoriji, od ukupno $2.}}",
        "newwindow": "(otvara se u novom prozoru)",
        "cancel": "Poništite",
        "moredotdotdot": "Više...",
-       "morenotlisted": "Ovaj spisak nije kompletan.",
+       "morenotlisted": "Ovaj spisak nije potpun.",
        "mypage": "Korisnička stranica",
        "mytalk": "Razgovor",
        "anontalk": "Razgovor za ovu IP adresu",
        "disclaimers": "Odricanje odgovornosti",
        "disclaimerpage": "Project:Uslovi korištenja, pravne napomene i odricanje odgovornosti",
        "edithelp": "Pomoć pri uređivanju stranice",
+       "helppage-top-gethelp": "Pomoć",
        "mainpage": "Početna strana",
        "mainpage-description": "Početna strana",
        "policy-url": "Project:Pravila",
        "no-null-revision": "Ne mogu napraviti novu ništavnu reviziju za stranicu \"$1\"",
        "badtitle": "Loš naslov",
        "badtitletext": "Zahtjevani naslov stranice je bio neispravan, prazan ili neispravno povezan međujezički ili interviki naslov.",
+       "title-invalid-empty": "Zatraženo ime stranice je prazno ili samo sadrži naziv imenskog prostora.",
+       "title-invalid-utf8": "Vaš zatraženi naziv stranice sadrži nevažeći UTF-8 znak.",
        "title-invalid-interwiki": "Traženi naslov stranice sadrži interwiki link koji ne može biti korišten u naslovima.",
-       "perfcached": "Slijedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.",
+       "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-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",
        "passwordreset": "Poništavanje šifre",
        "passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}",
-       "passwordreset-legend": "Poništi šifru",
        "passwordreset-disabled": "Poništavanje šifre  je onemogućeno na ovoj wiki.",
        "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom wikiju.",
        "passwordreset-username": "Korisničko ime:",
        "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.",
        "resettokens-no-tokens": "Nema žetona za resetovanje.",
-       "resettokens-legend": "Resetovanje žetona",
        "resettokens-tokens": "Žetoni:",
        "resettokens-token-label": "$1 (trenutna vrijednost: $2)",
        "resettokens-watchlist-token": "Token za web niz (Atom/RSS) [[Special:Watchlist|promjena na stranicama sa vašeg spiska praćenja]]",
        "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.",
        "summary-preview": "Pregled sažetka:",
        "subject-preview": "Pregled tema/naslova:",
+       "previewerrortext": "Dogodila se greška prilikom prikazivanja vaših izmjena.",
        "blockedtitle": "Korisnik je blokiran",
-       "blockedtext": "'''Vaše korisničko ime ili IP adresa je blokirana.'''\n\nBlokada izvršena od strane $1.\nDati razlog je slijedeći: ''$2''.\n\n*Početak blokade: $8\n*Kraj perioda blokade: $6\n*Ime blokiranog korisnika: $7\n\nMožete kontaktirati $1 ili nekog drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] 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 je automatski blokirana jer je korištena od strane drugog korisnika, a blokirao ju je $1.\nNaveden je slijedeći razlog:\n\n:''$2''\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Blokirani korisnik: $7\n\nMožete kontaktirati $1 ili nekog drugog 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]] te Vas ne spriječava ga 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.",
+       "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.",
        "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 preusmjerena ili obrisana dok ste pregledavali stranicu.",
+       "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.",
        "creating": "Pravljenje stranice $1",
        "editingsection": "Uređujete $1 (dio)",
        "editingcomment": "Uređujete $1 (nova sekcija)",
-       "editconflict": "Sukobljenje izmjene: $1",
+       "editconflict": "Vaše izmjene se nisu mogle sačuvati zbog sukoba uređivanja. Da li bi ste sukob {{GENDER:|mogli}} razriješiti ručno?",
        "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",
        "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 poslate na projekat {{SITENAME}} smatramo da su objavljeni pod $2 (konsultujte $1 za detalje).\nUkoliko ne želite da vaši članci budu podložni izmjenama i slobodnom rasturanju i objavljivanju,\nnemojte ih slati ovdje. Takođe, 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!'''",
+       "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!'''",
        "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",
        "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:",
-       "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 preusmjeravanja s obrazloženjem:",
+       "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.",
        "log-fulllog": "Vidi potpuni zapisnik",
        "edit-hook-aborted": "Izmjena je poništena putem interfejsa.\nNije ponuđeno nikakvo objašnjenje.",
        "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-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}}.",
        "history-feed-description": "Historija promjena ove stranice na wikiju",
        "history-feed-item-nocomment": "$1 u $2",
        "history-feed-empty": "Tražena stranica ne postoji.\nMoguće da je izbrisana sa wikija, ili preimenovana.\nPokušajte [[Special:Search|pretražiti wiki]] za slične stranice.",
+       "history-edit-tags": "Uredi oznake izabranih verzija",
        "rev-deleted-comment": "(sažetak izmjene uklonjen)",
        "rev-deleted-user": "(korisničko ime uklonjeno)",
        "rev-deleted-event": "(stavka zapisa obrisana)",
        "mergehistory-comment": "Spojeno [[:$1]] u [[:$2]]: $3",
        "mergehistory-same-destination": "Izvorne i odredišne stranice ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
-       "mergelog": "Zapis spajanja",
+       "mergelog": "Zapisnik spajanja",
        "revertmerge": "Vrati spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
        "history-title": "Historija revizija \"$1\"",
        "textmatches": "Tekst stranice odgovara",
        "notextmatches": "Tekst članka ne odgovara",
        "prevn": "{{PLURAL:$1|prethodni $1|prethodnih $1}}",
-       "nextn": "{{PLURAL:$1|slijedeći $1|slijedećih $1}}",
+       "nextn": "{{PLURAL:$1|sljedeći $1|sljedećih $1}}",
+       "prev-page": "prethodna stranica",
+       "next-page": "sljedeća stranica",
        "prevn-title": "{{PLURAL:$1|Prethodni $1 rezultat|Prethodna $1 rezultata|Prethodnih $1 rezultata}}",
-       "nextn-title": "{{PLURAL:$1|Slijedeći $1 rezultat|Slijedeća $1 rezultata|Slijedećih $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).",
        "searchmenu-exists": "'''Postoji stranica pod nazivom \"[[:$1]]\" na ovoj wiki'''",
        "searchprofile-everything-tooltip": "Pretraži sve sadržaje (ukljujući i stranice za razgovor)",
        "searchprofile-advanced-tooltip": "Traži u ostalim imenskim prostorima",
        "search-result-size": "$1 ({{PLURAL:$2|$2 riječ|$2 riječi}})",
-       "search-result-category-size": "{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 podkategorija|$2 podkategorije|$2 podkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})",
+       "search-result-category-size": "{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 potkategorija|$2 potkategorije|$2 potkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})",
        "search-redirect": "(preusmjeravanje $1)",
        "search-section": "(sekcija $1)",
        "search-category": "(kategorija $1)",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dolje {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
+       "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-legend": "Napredna pretraga",
        "datedefault": "Nije bitno",
        "prefs-labs": "Eksperimentalne mogućnosti",
        "prefs-user-pages": "Korisničke stranice",
-       "prefs-personal": "Korisnički podaci",
-       "prefs-rc": "Podešavanja nedavnih izmjena",
-       "prefs-watchlist": "Moji praćeni članci",
+       "prefs-personal": "Korisnički profil",
+       "prefs-rc": "Nedavne izmjene",
+       "prefs-watchlist": "Praćeni članci",
        "prefs-editwatchlist": "Uredi spisak praćenja",
+       "prefs-editwatchlist-label": "Uredi unose na spisku praćenja:",
+       "prefs-editwatchlist-edit": "Pregledaj i ukloni članke sa spiska praćenja",
+       "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-edits": "Najveći broj izmjena za prikaz u proširenom spisku praćenja:",
        "prefs-rendering": "Izgled",
        "saveprefs": "Sačuvaj",
        "restoreprefs": "Vrati sve pretpostavljene postavke (u svim sekcijama)",
-       "prefs-editing": "Veličine tekstualnog polja",
+       "prefs-editing": "Uređivanje",
        "rows": "Redova",
        "columns": "Kolona",
        "searchresultshead": "Podešavanja rezultata pretrage",
        "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.",
+       "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:",
        "localtime": "Lokalno vrijeme:",
        "default": "standardno",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođeni CSS",
-       "prefs-custom-js": "Prilagođeni JS",
+       "prefs-custom-js": "Prilagođeni JavaScript",
        "prefs-common-css-js": "Dijeljeni CSS/JS za sve kože:",
        "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:",
        "prefs-tokenwatchlist": "Žeton",
        "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.",
        "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:",
        "editusergroup": "Uredi korisničke grupe",
-       "editinguser": "Mijenjate korisnička prava korisnika '''[[User:$1|$1]]''' $2",
+       "editinguser": "Mijenjate korisnička prava korisnika <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Uredi korisničke grupe",
        "saveusergroups": "Sačuvaj korisničke grupe",
        "userrights-groupsmember": "Član:",
        "right-createtalk": "Pravljenje stranica za razgovor",
        "right-createaccount": "Pravljenje korisničkog računa",
        "right-minoredit": "Označavanje izmjena kao malih",
-       "right-move": "Preusmjeravanje stranica",
+       "right-move": "Premještanje stranica",
        "right-move-subpages": "Preusmjeravanje stranica sa svim podstranicama",
        "right-move-rootuserpages": "Premještanje stranica osnovnih korisnika",
        "right-move-categorypages": "Pomakni stranice kategorije",
        "right-browsearchive": "Pretraživanje obrisanih stranica",
        "right-undelete": "Vraćanje obrisanih stranica",
        "right-suppressrevision": "Pregled, sakrivanje i povratak određenih revizija stranice od svih korisnika",
+       "right-viewsuppressed": "Pregledaj izmjene skrivene od svih korisnika",
        "right-suppressionlog": "Gledanje privatnih zapisa",
        "right-block": "Blokiranje uređivanja drugih korisnika",
        "right-blockemail": "Blokiranje korisnika da šalje e-mail",
        "right-editmyusercss": "Uredite svoje vlastite korisničke CSS datoteke",
        "right-editmyuserjs": "Uredite vlastite korisničke JavaScript datoteke",
        "right-viewmywatchlist": "Pogledaj svoj spisak praćenih stranica",
+       "right-editmywatchlist": "Uredite vlastiti spisak praćenja. Važno je spomenuti da će neke radnje dodati stranice na spisak, čak i bez ovog prava.",
        "right-viewmyprivateinfo": "Pogledajte Vaše privatne podatke (npr, adresa e-pošte, pravo ime)",
        "right-editmyprivateinfo": "Uredite svoje privatne podatke (npr. adresa e-pošte, pravo ime)",
        "right-editmyoptions": "Uredite svoje postavke",
        "right-override-export-depth": "Izvoz stranica uključujući povezane stranice do dubine od 5 linkova",
        "right-sendemail": "Slanje e-maila drugim korisnicima",
        "right-passwordreset": "Pogledaj e-mailove za obnavljanje šifre",
-       "newuserlogpage": "Zapis novih korisnika",
+       "right-managechangetags": "Napravi i briši [[Special:Tags|oznake]] iz baze podataka",
+       "right-applychangetags": "Primijeni [[Special:Tags|oznake]] na nečije izmjene",
+       "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.",
        "action-createpage": "napravite stranicu",
        "action-createtalk": "kreirate stranice za razgovor",
        "action-createaccount": "napravite ovaj korisnički račun",
+       "action-history": "gledate historiju ove stranice",
        "action-minoredit": "da označite ovu izmjenu kao malu",
-       "action-move": "pomjerite ovu stranicu",
-       "action-move-subpages": "pomjerite ovu stranicu, i njene podstranice",
-       "action-move-rootuserpages": "pomjerite stranice osnovnog korisnika",
+       "action-move": "premjestite ovu stranicu",
+       "action-move-subpages": "premjestite ovu stranicu, i njene podstranice",
+       "action-move-rootuserpages": "premjestite stranice osnovnog korisnika",
        "action-move-categorypages": "pomakni stranice kategorije",
-       "action-movefile": "pomjeri ovu datoteku",
+       "action-movefile": "premjesti ovu datoteku",
        "action-upload": "postavljate ovu datoteku",
        "action-reupload": "stavite novu verziju postojeće datoteke",
        "action-reupload-shared": "postavite ovu datoteku iz zajedničke ostave",
        "action-viewmywatchlist": "pogledajte svoj spisak praćenih stranica",
        "action-viewmyprivateinfo": "pogledajte svoje privatne informacije",
        "action-editmyprivateinfo": "uredite svoje privatne podatke",
+       "action-managechangetags": "napravite i uklonite oznake iz baze podataka",
        "nchanges": "$1 {{PLURAL:$1|promjena|promjene|promjena}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmjena od Vaše posljedne posjete}}",
        "enhancedrc-history": "historija",
        "recentchanges": "Nedavne izmjene",
        "recentchanges-legend": "Postavke nedavnih izmjena",
        "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",
        "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": "'''Upozorenje: Datoteka s tim imenom obrisana je ili preusmjerena.'''\nZapisnik brisanja i preusmjeravanja za ovu stranicu dostupan je ovdje:",
+       "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.",
-       "uploadlogpage": "Protokol postavljanja",
-       "uploadlogpagetext": "Ispod je spisak najskorijih slanja.",
+       "uploadlogpage": "Zapisnik postavljanja",
+       "uploadlogpagetext": "Ispod je spisak nedavno postavljenih datoteka.\nZa vizualni pregled datoteka, [[Special:NewFiles|pogledajte galeriju novih slika]].",
        "filename": "Ime datoteke",
        "filedesc": "Sažetak",
        "fileuploadsummary": "Sažetak:",
        "backend-fail-create": "Ne mogu napraviti datoteku $1.",
        "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}}.",
        "license": "Licenca:",
        "license-header": "Licenciranje",
        "nolicense": "Ništa nije odabrano",
+       "licenses-edit": "Uredi izbor licenci",
        "license-nopreview": "(Pregled nije dostupan)",
        "upload_source_url": "(vaša izabrana datoteka od validnih, javno dostupnih URL-a)",
        "upload_source_file": "(vaša odabrana datoteka sa Vašeg računara)",
        "listfiles-delete": "obriši",
        "listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.",
        "listfiles_search_for": "Traži medije po imenu:",
+       "listfiles-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "imgfile": "datoteka",
        "listfiles": "Spisak slika",
        "listfiles_thumb": "Smanjeni pregled",
        "filehist-comment": "Komentar",
        "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}} je povezano s ovom datotekom.\nSlijedeć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]].",
+       "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.",
        "morelinkstoimage": "Vidi [[Special:WhatLinksHere/$1|ostale linkove]] prema ovoj datoteci.",
        "linkstoimage-redirect": "$1 (preusmjerenje datoteke) $2",
        "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 preusmjerenje",
        "randomredirect-nopages": "Ne postoje preusmjerenja u imenskom prostoru \"$1\".",
        "statistics": "Statistike",
        "statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
        "statistics-users-active": "Aktivni korisnici",
        "statistics-users-active-desc": "Korisnici koji su izvršili akciju u toku {{PLURAL:$1|posljednjeg dana|posljednja $1 dana|posljednjih $1 dana}}",
+       "pageswithprop": "Stranice sa svojstvom stranice",
+       "pageswithprop-legend": "Stranice sa svojstvom stranice",
+       "pageswithprop-text": "Ova stranica prikazuje stranice koje imaju određeno svojstvo.",
        "pageswithprop-prop": "Naziv svojstva:",
        "pageswithprop-submit": "Idi",
        "doubleredirects": "Dvostruka preusmjerenja",
        "nlinks": "$1 {{PLURAL:$1|veza|veze}}",
        "nmembers": "$1 {{PLURAL:$1|član|članova}}",
        "nrevisions": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
-       "nviews": "$1 {{PLURAL:$1|pregled|pregleda}}",
        "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.",
        "newpages": "Nove stranice",
        "newpages-username": "Korisničko ime:",
        "ancientpages": "Najstarije stranice",
-       "move": "Preusmjeri",
+       "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.",
        "unusedcategoriestext": "Sljedeće stranice kategorija postoje iako ih nijedan drugi članak ili kategorija ne koriste.",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
        "speciallogtitlelabel": "Cilj (naslov ili korisnik):",
-       "log": "Protokoli",
-       "all-logs-page": "Svi javni registri",
-       "alllogstext": "Zajednički prikaz svih dostupnih zapisa sa {{SITENAME}}.\nMožete specificirati prikaz izabiranjem specifičnog spiska, korisničkog imena ili promjenjenog članka (razlikovati velika slova).",
-       "logempty": "Ne postoji takav zapis.",
+       "log": "Zapisnici",
+       "all-logs-page": "Svi javni zapisnici",
+       "alllogstext": "Zajednički prikaz svih dostupnih zapisnika sa {{SITENAME}}.\nMožete specificirati prikaz izabiranjem specifičnog spiska, korisničkog imena ili promjenjenog članka (razlikovati velika slova).",
+       "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",
        "allpages": "Sve stranice",
        "watchlistanontext": "Molimo logujte se da vidite ili uredite stavke na Vašem spisku praćenja.",
        "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 ovde.",
+       "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.",
+       "addedwatchtext-short": "Stranica \"$1\" je dodana na vaš spisak praćenja.",
        "removewatch": "Ukloni sa spiska praćenja",
        "removedwatchtext": "Stranica \"[[:$1]]\" je uklonjena iz [[Special:Watchlist|vašeg spiska praćenih članaka]].",
+       "removedwatchtext-short": "Stranica \"$1\" je uklonjena sa vašeg spiska praćenja.",
        "watch": "Prati članak",
        "watchthispage": "Prati ovu stranicu",
        "unwatch": "Ukinite praćenje",
        "actioncomplete": "Akcija završena",
        "actionfailed": "Akcija nije uspjela",
        "deletedtext": "Članak \"$1\" je obrisan.\nPogledajte $2 za zapisnik nedavnih brisanja.",
-       "dellogpage": "Protokol brisanja",
+       "dellogpage": "Zapisnik brisanja",
        "dellogpagetext": "Ispod je spisak najskorijih brisanja.",
-       "deletionlog": "zapis brisanja",
+       "deletionlog": "zapisnik brisanja",
        "reverted": "Vraćeno na prijašnju reviziju",
        "deletecomment": "Razlog:",
        "deleteotherreason": "Ostali/dodatni razlozi:",
        "delete-edit-reasonlist": "Uredi razloge brisanja",
        "delete-toobig": "Ova stranica ima veliku historiju promjena, preko $1 {{PLURAL:$1|revizije|revizija}}.\nBrisanje takvih stranica nije dopušteno da bi se spriječilo slučajno preopterećenje servera na kojem je {{SITENAME}}.",
        "delete-warning-toobig": "Ova stranica ima veliku historiju izmjena, preko $1 {{PLURAL:$1|izmjene|izmjena}}.\nNjeno brisanje može dovesti do opterećenja operacione baze na {{SITENAME}};\nnastavite s oprezom.",
+       "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",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
        "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.",
-       "protectlogpage": "Protokol zaključavanja",
+       "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]]\"",
        "restriction-level-all": "svi nivoi",
        "undelete": "Pogledaj izbrisane stranice",
        "undeletepage": "Pogledaj i vrati izbrisane stranice",
-       "undeletepagetitle": "'''Slijedeći sadržaj prikazuje obrisane revizije od [[:$1|$1]]'''.",
+       "undeletepagetitle": "'''Sljedeći sadržaj prikazuje obrisane revizije od [[:$1|$1]]'''.",
        "viewdeletedpage": "Pogledaj izbrisane stranice",
        "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",
        "contributions-title": "Doprinosi korisnika $1",
        "mycontris": "Doprinos",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "nocontribs": "Nisu nađene promjene koje zadovoljavaju ove uslove.",
        "uctop": "(trenutno)",
        "month": "Od mjeseca (i ranije):",
        "contribslink": "doprinosi",
        "emaillink": "pošalji e-mail",
        "autoblocker": "Automatski ste blokirani jer dijelite IP-adresu sa \"[[User:$1|$1]]\".\nRazlog za blokiranje korisnika $1 je ''$2''",
-       "blocklogpage": "Evidencija blokiranja",
+       "blocklogpage": "Zapisnik blokiranja",
        "blocklog-showlog": "Ovaj korisnik je ranije blokiran. Zapisnik blokiranja je prikazan ispod kao referenca:",
        "blocklog-showsuppresslog": "Ovaj korisnik je ranije blokiran i sakriven. Zapisnik sakrivanja je prikazan ispod kao referenca:",
        "blocklogentry": "je blokirao [[$1]] sa vremenom isticanja blokade od $2 $3",
        "reblock-logentry": "promjena postavki blokiranja za [[$1]] sa vremenom isteka u $2 $3",
-       "blocklogtext": "Ovo je historija akcija blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene ovdje.\nPogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih zabrana i blokiranja.",
+       "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",
        "lockfilenotwritable": "Datoteka zaključavanja baze je zaštićena za pisanje.\nAko želite otključati ili zaključati bazu, ova datoteka mora biti omogućena za pisanje od strane web servera.",
        "databasenotlocked": "Baza podataka nije zaključana.",
        "lockedbyandtime": "(od $1 dana $2 u $3)",
-       "move-page": "Preusmjeravanje $1",
-       "move-page-legend": "Premjestite stranicu",
-       "movepagetext": "Korištenjem ovog formulara možete preimenovati stranicu, premještajući cijelu historiju na novo ime.\nČlanak pod starim imenom postat će stranica koja preusmjerava na članak pod novim imenom. \nMožete automatski izmijeniti preusmjerenje do izvornog naslova.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da svi linkovi i dalje nastave voditi na prave stranice.\n\nImajte na umu da članak '''neće''' biti preusmjeren ako već postoji članak pod imenom na koje ga namjeravate preusmjeriti osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači da možete vratiti stranicu na prethodno mjesto ako pogriješite, ali ne možete zamijeniti postojeću stranicu.\n\n'''Pažnja!'''\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice.\nMolimo da dobro razmislite prije no što preimenujete stranicu.",
-       "movepagetext-noredirectfixer": "Koristeći donji obrazac, preimenovat ćete stranicu i premjestiti cijelu njenu historiju na novi naziv.\nStari naziv postat će preusmjerenje na novi naziv.\nMolimo da provjerite postoje li [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]].\nVi ste za to odgovorni te morate provjeriti jesu li linkovi ispravni i vode li tamo kamo bi trebali voditi.\n\nImajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije.\nOvo znači da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili, ali ne možete ponovo preimenovati postojeću stranicu.\n\n'''Pažnja!'''\nImajte na umu da preusmjeravanje popularnog članka može biti\ndrastična i neočekivana promjena za korisnike; molimo da budete sigurni da ste shvatili posljedice prije no što nastavite.",
-       "movepagetalktext": "Odgovarajuća stranica za razgovor, ako postoji, će automatski biti premještena istovremeno '''osim:'''\n*Ako premještate stranicu preko imenskih prostora,\n*Neprazna stranica za razgovor već postoji pod novim imenom, ili\n*Odčekirajte donju kutiju.\n\nU tim slučajevima, moraćete ručno da premjestite stranicu ukoliko to želite.",
-       "movearticle": "Premjestite stranicu",
+       "move-page": "Premjesti $1",
+       "move-page-legend": "Premjesti stranicu",
+       "movepagetext": "Korištenjem ovog formulara možete preimenovati stranicu, premještajući cijelu historiju na novo ime.\nČlanak pod starim imenom postat će stranica koja preusmjerava na članak pod novim imenom. \nMožete automatski izmijeniti preusmjerenje do izvornog naslova.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da svi linkovi i dalje nastave voditi na prave stranice.\n\nImajte na umu da članak '''neće''' biti premješten ako već postoji članak pod imenom na koje ga namjeravate preusmjeriti osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači da možete vratiti stranicu na prethodno mjesto ako pogriješite, ali ne možete zamijeniti postojeću stranicu.\n\n'''Pažnja!'''\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice.\nMolimo da dobro razmislite prije no što premjestite stranicu.",
+       "movepagetext-noredirectfixer": "Koristeći donji obrazac, preimenovat ćete stranicu i premjestiti cijelu njenu historiju na novi naziv.\nStari naziv postat će preusmjerenje na novi naziv.\nMolimo da provjerite postoje li [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]].\nVi ste za to odgovorni te morate provjeriti jesu li linkovi ispravni i vode li tamo kamo bi trebali voditi.\n\nImajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije.\nOvo znači da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili, ali ne možete ponovo preimenovati postojeću stranicu.\n\n'''Pažnja!'''\nImajte na umu da premještanje popularnog članka može biti\ndrastična i neočekivana promjena za korisnike; molimo da budete sigurni da ste shvatili posljedice prije no što nastavite.",
+       "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.",
        "movenologintext": "Morate biti registrovani korisnik i [[Special:UserLogin|prijavljeni]] da biste premjestili stranicu.",
        "movenotallowed": "Nemate dopuštenje za premještanje stranica.",
        "cant-move-to-user-page": "Nemate dopuštenje da premjestite stranicu na korisničku stranicu (osim na korisničku podstranicu).",
        "newtitle": "Novi naslov",
        "move-watch": "Prati ovu stranicu",
-       "movepagebtn": "pomjerite stranicu",
+       "movepagebtn": "Premjesti stranicu",
        "pagemovedsub": "Premještanje uspjelo",
        "movepage-moved": "'''\"$1\" je premještena na \"$2\"'''",
        "movepage-moved-redirect": "Preusmjerenje je napravljeno.",
        "movepage-page-moved": "Stranica $1 je premještena na $2.",
        "movepage-page-unmoved": "Stranica $1 ne može biti premještena na $2.",
        "movepage-max-pages": "Maksimum od $1 {{PLURAL:$1|stranice|stranice|stranica}} je premješteno i više nije moguće premjestiti automatski.",
-       "movelogpage": "Protokol premještanja",
+       "movelogpage": "Zapisnik premještanja",
        "movelogpagetext": "Ispod je spisak stranica koje su premještene.",
        "movesubpage": "{{PLURAL:$1|Podstranica|Podstranice}}",
        "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstranicu|podstranice|podstranica}} prikazanih ispod.",
        "selfmove": "Izvorni i ciljani naziv su isti; strana ne može da se premjesti preko same sebe.",
        "immobile-source-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
        "immobile-target-namespace": "Ne mogu se premjestiti stranice u imenski prostor \"$1\"",
-       "immobile-target-namespace-iw": "Međuwiki link nije validno odredište premještanja stranice.",
+       "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 preusmjeriti na taj odredišni naslov.",
+       "immobile-target-page": "Ne može se premjestiti na taj odredišni naslov.",
        "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",
        "tooltip-ca-unprotect": "Promijeni zaštitu za ovu stranicu",
        "tooltip-ca-delete": "Izbrišite ovu stranicu",
        "tooltip-ca-undelete": "Vratite izmjene koje su načinjene prije brisanja stranice",
-       "tooltip-ca-move": "Pomjerite stranicu",
+       "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-search": "Pretraži projekat {{SITENAME}}",
        "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": "Slijedeći tekst je izazvao naš filter za neželjene poruke: $1",
+       "spamprotectionmatch": "Sljedeći tekst aktivirao je 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-contentpage-yes": "Da",
        "pageinfo-protect-cascading-yes": "Da",
        "pageinfo-category-info": "Informacije o kategoriji",
+       "pageinfo-category-total": "Ukupan broj članova",
        "pageinfo-category-pages": "Broj stranica",
-       "pageinfo-category-subcats": "Broj podkategorija",
+       "pageinfo-category-subcats": "Broj potkategorija",
        "pageinfo-category-files": "Broj datoteka",
        "markaspatrolleddiff": "Označi kao patrolirano",
        "markaspatrolledtext": "Označi ovaj članak kao patroliran",
        "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",
-       "watchlisttools-view": "Pregled promjena praćenih stranica",
-       "watchlisttools-edit": "Pogledaj i uredi listu praćenih članaka.",
-       "watchlisttools-raw": "Uređivanje praćenih stranica u okviru 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",
        "iranian-calendar-m1": "Farvardin (Iranski kalendar)",
        "iranian-calendar-m2": "Ordibehesht",
        "iranian-calendar-m3": "Khordad",
        "version-entrypoints": "URL Adrese ulazne tačke",
        "version-entrypoints-header-entrypoint": "Ulazna tačka",
        "version-entrypoints-header-url": "URL",
+       "version-libraries-version": "Verzija",
        "redirect-submit": "Idi",
        "redirect-value": "Vrijednost:",
        "redirect-user": "Korisnički ID",
        "tags-tag": "Naziv oznake",
        "tags-display-header": "Vidljivost na spisku izmjena",
        "tags-description-header": "Puni opis značenja",
+       "tags-source-header": "Izvor",
        "tags-active-header": "Aktivna?",
        "tags-hitcount-header": "Označene izmjene",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
+       "tags-source-extension": "Definirano preko proširenja",
+       "tags-source-none": "Više se ne koristi",
        "tags-edit": "uređivanje",
+       "tags-delete": "izbriši",
+       "tags-activate": "aktiviraj",
+       "tags-deactivate": "dekativiraj",
        "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-tag-name": "Naziv oznake:",
+       "tags-create-reason": "Razlog:",
+       "tags-create-submit": "Napravi",
+       "tags-create-no-name": "Morate navesti ime oznake.",
+       "tags-create-already-exists": "Oznaka \"$1\" već postoji.",
+       "tags-delete-title": "Izbriši oznaku",
+       "tags-delete-reason": "Razlog:",
+       "tags-delete-not-found": "Oznaka \"$1\" ne postoji.",
+       "tags-activate-reason": "Razlog:",
+       "tags-activate-not-found": "Oznaka \"$1\" ne postoji.",
        "comparepages": "Usporedi stranice",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "dberr-info": "(ne može se spojiti server baze podataka: $1)",
        "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": "Slijedeći tekst je keširana kopija zahtjevane stranice i možda nije potpuno ažurirana.",
+       "dberr-cachederror": "Sljedeći tekst je keširana kopija zahtijevane stranice, koja možda nije potpuno ažurirana.",
        "htmlform-invalid-input": "Postoje određeni problemi s Vašim unosom",
        "htmlform-select-badoption": "Vrijednost koju ste naveli nije valjana opcija.",
        "htmlform-int-invalid": "Vrijednost koju ste naveli nije cijeli broj.",
        "revdelete-uname-unhid": "korisničko ime je otkriveno",
        "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-suppress-block": "$1 {{GENDER:$2|blokirao|blokirala}} je {{GENDER:$4|$3}} sa vremenom isticanja blokade od $5 $6",
        "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-rights-rights": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
-       "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
+       "logentry-upload-upload": "$1 {{GENDER:$2|postavio|postavila}} je $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|postavio|postavila}} је novu verziju $3",
+       "log-name-managetags": "Zapisnik upravljanja oznaka",
+       "log-name-tag": "Zapisnik oznaka",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak",
        "feedback-adding": "Dodajem povratne informacije na stranicu...",
+       "feedback-back": "Nazad",
        "feedback-bugcheck": "Odlično! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
        "feedback-bugnew": "Provjereno. Prijavi novu grešku",
        "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-dialog-title": "Pošalji povratne informacije",
+       "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-subject": "Tema:",
        "feedback-submit": "Pošalji",
        "feedback-thanks": "Hvala! Vaša povratna informacija postavljena je na stranicu \"[$2 $1]\".",
+       "feedback-thanks-title": "Hvala!",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "expand_templates_preview": "Pregled",
        "pagelang-name": "Stranica",
        "pagelang-language": "Jezik",
+       "pagelang-use-default": "Koristi podrazumijevani jezik",
        "pagelang-select-lang": "Izaberi jezik",
+       "log-name-pagelang": "Zapisnik promjene jezika",
        "mediastatistics-table-count": "Broj datoteka",
+       "mediastatistics-table-totalbytes": "Kombinirana veličina",
        "mediastatistics-header-unknown": "Nepoznato",
        "mediastatistics-header-drawing": "Crteži (vektorske slike)",
        "mediastatistics-header-audio": "Zvuk",
index 531b9a5..bb14cfc 100644 (file)
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
        "retrievedfrom": "Obtingut de «$1»",
-       "youhavenewmessages": "Tens $1 ($2).",
-       "youhavenewmessagesfromusers": "Tens $1 {{PLURAL:$3|d'un altre usuari|de $3 usuaris}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Tens}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tens}} $1 {{PLURAL:$3|d'un altre usuari|de $3 usuaris}} ($2).",
        "youhavenewmessagesmanyusers": "Tens $1 de molts usuaris ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|un nou missatge|999=nous missatges}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|darrer canvi|999=darrers canvis}}",
        "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.",
        "title-invalid-magic-tilde": "El títol de la pàgina sol·licitada conté una seqüència de titlles no vàlida (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "El títol de la pàgina sol·licitada és massa llarg. No ha d’excedir $1 bytes en codificació UTF-8.",
+       "title-invalid-too-long": "El títol de la pàgina sol·licitada és massa llarg. No ha d’excedir $1 {{PLURAL:$1|byte|bytes}} en codificació UTF-8.",
        "title-invalid-leading-colon": "El títol de la pàgina sol·licitada conté dos punts a l’inici.",
        "perfcached": "Les dades següents es troben a la memòria cau i podrien no estar al dia. Hi ha un màxim {{PLURAL:$1|d'un resultat|de $1 resultats}} disponibles a la memòria cau.",
        "perfcachedts": "Les dades següents es troben a la memòria cau i es van actualitzar per darrera vegada el $1. Hi ha un màxim {{PLURAL:$4|d'un resultat|de $4 resultats}} disponibles a la memòria cau.",
        "passwordreset": "Restablir contrasenya",
        "passwordreset-text-one": "Cal completar aquest formulari per reiniciar la contrasenya",
        "passwordreset-text-many": "{{PLURAL:$1|Ompliu un dels camps per a rebre una contrasenya temporal al vostre correu electrònic.}}",
-       "passwordreset-legend": "Restablir contrasenya",
        "passwordreset-disabled": "S'ha desactivat el restabliment de contranyes en aquest wiki.",
        "passwordreset-emaildisabled": "Les opcions de correu electrònic no estan habilitades en aquest wiki.",
        "passwordreset-username": "Nom d'usuari:",
        "resettokens": "Reinicia els testimonis",
        "resettokens-text": "Des d'aquí podeu reiniciar els testimonis que permeten l'accés a certes dades privades associades amb el vostre compte.\n\nHo hauríeu de fer si accidentalment els heu compartit amb algú o si el vostre compte ha estat compromès.",
        "resettokens-no-tokens": "No hi ha testimonis per reiniciar.",
-       "resettokens-legend": "Reinicia els testimonis",
        "resettokens-tokens": "Testimonis:",
        "resettokens-token-label": "$1 (valor actual: $2)",
        "resettokens-watchlist-token": "Testimoni del canal web (Atom/RSS) dels [[Special:Watchlist|canvis a la llista de seguiment]]",
        "filedelete-reason-dropdown": "*Motius d'eliminació comuns\n** Violació dels drets d'autor / copyright\n** Fitxer duplicat",
        "filedelete-edit-reasonlist": "Edita els motius d'eliminació",
        "filedelete-maintenance": "L'esborrament i recuperació de fitxers està temporalment deshabilitada durant el manteniment.",
-       "filedelete-maintenance-title": "No pot suprimir arxiu",
+       "filedelete-maintenance-title": "No es pot suprimir el fitxer",
        "mimesearch": "Cerca per MIME",
        "mimesearch-summary": "Aquesta pàgina habilita el filtratge de fitxers per llur tipus MIME. Contingut: contenttype/subtype o contenttype/*, p. ex. <code>image/jpeg</code>.",
        "mimetype": "Tipus MIME:",
        "randomincategory-nopages": "No hi ha pàgines a la categoria [[:Category:$1|$1]].",
        "randomincategory-category": "Categoria:",
        "randomincategory-legend": "Pàgina a l’atzar en la categoria",
+       "randomincategory-submit": "Vés-hi",
        "randomredirect": "Redirecció a l'atzar",
        "randomredirect-nopages": "No hi ha cap redirecció a l'espai de noms «$1».",
        "statistics": "Estadístiques",
        "nmembers": "$1 {{PLURAL:$1|element|elements}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|element|elements}}",
        "nrevisions": "$1 {{PLURAL:$1|revisió|revisions}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visites}}",
        "nimagelinks": "S'utilitza en {{PLURAL:$1|una pàgina|$1 pàgines}}",
        "ntransclusions": "utilitzada en {{PLURAL:$1|una pàgina|$1 pàgines}}",
        "specialpage-empty": "Aquesta pàgina és buida.",
        "version-libraries": "Biblioteques instal·lades",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versió",
+       "version-libraries-license": "Llicència",
+       "version-libraries-description": "Descripció",
+       "version-libraries-authors": "Autors",
        "redirect": "Redirigeix per fitxer, usuari, pàgina o ID de la revisió",
        "redirect-legend": "Redirigeix a un fitxer o a una pàgina",
        "redirect-summary": "Aquesta pàgina especial redirigeix a un fitxer (donat el nom del fitxer), una pàgina (donats un ID de la revisió o un ID de pàgina), o a una pàgina d'usuari (donat un ID numèric d'usuari). Ús: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "logentry-merge-merge": "$1 {{GENDER:$2|ha fusionat}} $3 en $4 (revisions fins a $5)",
        "logentry-move-move": "$1 ha mogut $3 a $4",
        "logentry-move-move-noredirect": "$1 ha mogut $3 a $4 sense deixar una redirecció",
-       "logentry-move-move_redir": "$1 ha mogut $3 a $4 sobre una redirecció",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ha mogut}} $3 a $4 sobre una redirecció",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|ha desplaçat}} la pàgina $3 a $4 on hi havia una redirecció i sense crear una nova redirecció",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|ha marcat}} la revisió $4 de la pàgina «$3» com a patrullada",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|ha marcat}} automàticament la versió $4 de la pàgina $3 com a patrullada",
index b7c7ca6..dc1c96b 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": "電批地址:",
index ebb66a1..37bf386 100644 (file)
        "faq": "СиХХ",
        "faqpage": "Project:СиХХ",
        "actions": "Дийраш",
-       "namespaces": "Цlерийн ана",
+       "namespaces": "ЦӀерийн ана",
        "variants": "Кепараш",
        "navigation-heading": "Навигацин меню",
        "errorpagetitle": "ГӀалат",
        "redirectedfrom": "(ДӀасахьажийна кху $1)",
        "redirectpagesub": "АгӀо-дӀасахьажорг",
        "redirectto": "ДӀасахьажор тӀе:",
-       "lastmodifiedat": "ХӀокху агӀон тӀаьххьаралера хийцам: $2, $1.",
+       "lastmodifiedat": "ХӀокху агӀон тӀаьххьаралера хийцам: $1, $2.",
        "viewcount": "ХӀокху агӀонг хьовсийна $1 {{PLURAL:$1|за}}.",
        "protectedpage": "ГӀароллийца йолу агӀо",
        "jumpto": "Дехьа гӀо:",
        "databaseerror-error": "ГӀалат: $1",
        "laggedslavemode": "Тергам бе: агӀона чохь керла йаьхинарш ца хила мега.",
        "readonly": "Блоктоьхна дӀайаздар хаамийн бухе",
-       "enterlockreason": "Ð\91илгалде Ð±Ð»Ð¾ÐºÑ\82оÑ\85аÑ\80ан Ð±Ð°Ñ\85Ñ\8cна Ð° и чекх йолу хан а.",
+       "enterlockreason": "Ð\91илгалде Ð±Ð»Ð¾ÐºÑ\82оÑ\85аÑ\80ан Ð±Ð°Ñ\85Ñ\8cана Ð°, и чекх йолу хан а.",
        "readonlytext": "АгӀонаш тӀетохар а кхин хийцамаш барна а блоктоьхна:\nБлокоьхначо биттина хаам: $1.",
        "missing-article": "ХӀокху чохь кароезаш йолу хьан дехарца йозан агӀонаш цакарийна «$1» $2.\n\nИштнарг наггахь хуьлу хьажорг дӀаяьккхина елахь я хийцам бина тиша хьажоргца дехьа гӀо гӀоьртича.\n\nНагахьсан гӀулкх цуьнах доьзна дацахь, хьуна карийна гӀирс латточехь гӀалат.\nДехар до, хаам бе оцуьнах [[Special:ListUsers/sysop|куьйгалхога]], гойтуш URL.",
        "missingarticle-rev": "(верси № $1)",
        "badarticleerror": "И хӀума кхочушъ дан йиш яц хӀокху агӀонехь.",
        "cannotdelete": "Цатарло дӀаяккха я цӀе хийца «$1».\nАгӀо хьалхо дӀаяьккхина хила тарло",
        "cannotdelete-title": "Цатарло агӀо дӀаяккха «$1»",
-       "delete-hook-aborted": "Нисдар юхадаьккхина тӀехьожучо.\nХӀу бахьна ду билгал дина дац.",
+       "delete-hook-aborted": "Ð\9dиÑ\81даÑ\80 Ñ\8eÑ\85адаÑ\8cккÑ\85ина Ñ\82Ó\80еÑ\85Ñ\8cожÑ\83Ñ\87о.\nÐ¥Ó\80Ñ\83 Ð±Ð°Ñ\85Ñ\8cана Ð´Ñ\83 Ð±Ð¸Ð»Ð³Ð°Ð» Ð´Ð¸Ð½Ð° Ð´Ð°Ñ\86.",
        "no-null-revision": "«$1» агӀона нисдар дан цаделира",
        "badtitle": "Цамегаш йолу цӀе",
        "badtitletext": "Дехарца йолу агӀонан цӀе нийса яц, йаьсса ю, хила мега нийса ца хӀоттийна меттаюкъар йа юкъарвики цӀе. Хила мега, цӀарца цамагош йолу символаш.",
        "myprivateinfoprotected": "Хьайн долара хаамна хийцам ба хьа йиш яц",
        "mypreferencesprotected": "Хьай гӀирс нисбан хьа бакъо яц.",
        "ns-specialprotected": "ХӀокху «{{ns:special}}» цӀерийн меттигашан агӀонаш таян йиш яц.",
-       "titleprotected": "[[Декъашхочо:$1|$1]] дихкина ишта корта болуш агӀо кхоллар.\nГайтина бахьна: ''$2''.",
+       "titleprotected": "[[Декъашхо:$1|$1]] дихкина ишта корта болуш агӀо кхоллар.\nГайтина бахьана: ''$2''.",
        "filereadonlyerror": "файл хийца цатарло «$1», «$2» Ӏалаш ечехь ешаран хьолехь хилар бахьнехь.\n\nХӀара хьал хӀоттиначу куьйгалхочо битина хаам: «''$3''».",
        "invalidtitle-knownnamespace": "Магийна боцу коьртамогӀа цӀерийн меттигца «$2» йоза  «$3»",
        "invalidtitle-unknownnamespace": "Магийна боцу коьртамогӀа ца йовза меттигца $1 «$2» йозанца",
        "createacct-another-email-ph": "ДӀаязде электронан поштан адрес",
        "createaccountmail": "Лела йе цахууш нисйина хана пароль, кхин язйинчу электронан адрес тӀе яийта и.",
        "createacct-realname": "Хьан цӀе (ца язйича мега)",
-       "createaccountreason": "Бахьна:",
-       "createacct-reason": "Бахьна",
+       "createaccountreason": "Ð\91аÑ\85Ñ\8cана:",
+       "createacct-reason": "Ð\91аÑ\85Ñ\8cана",
        "createacct-reason-ph": "Стен кхуллуш ду ахьа керла декъашхочун дӀаяздар",
        "createacct-captcha": "Кхерамзалла хьажар",
        "createacct-imgcaptcha-ph": "ДӀаязде хьайна лакхахь гуш долу йоза",
        "passwordsent": "Керла пароль декъашхочун $1 электронан адрес тӀе дӀахьажина. Дехар до, керла пароль еъча юху системин чугӀо.",
        "blocked-mailpassword": "Хьан IP-адрес ца тадарш дан магийна дац, цуьндела пароль меттахӀотош йолу функци блоктоьхна ю.",
        "eauthentsent": "ДӀаяздинчу электронан адрес тӀе хаам баийтина.\nДаиман хаамаш баийта хааман чохь де бохург дан деза адрес хьай хилар бакъдеш.",
-       "throttled-mailpassword": "Ð\9fаÑ\80олÑ\8c Ð´Ð°Ð³Ð° Ð¹Ð¾Ñ\83Ñ\8cйÑ\82Ñ\83 Ñ\84Ñ\83нкÑ\86и {{PLURAL:$1|Ñ\82Ó\80ехьара $1 сахьтехь}} лелина.\nЗулам цахилийта $1 {{PLURAL:$1|сахьтан чохь}} цӀа бен функци лело йиш яц.",
+       "throttled-mailpassword": "Ð\9fаÑ\80олÑ\8c Ð´Ð°Ð³Ð° Ð¹Ð¾Ñ\83Ñ\8cйÑ\82Ñ\83 Ñ\84Ñ\83нкÑ\86и {{PLURAL:$1|Ñ\82Ó\80аÑ\8cÑ\85хьара $1 сахьтехь}} лелина.\nЗулам цахилийта $1 {{PLURAL:$1|сахьтан чохь}} цӀа бен функци лело йиш яц.",
        "mailerror": "Кехат дохьуьйтуш гӀалат ду: $1",
        "acct_creation_throttle_hit": "Де-буьйса хена чохь хьа IP-адрес тӀера {{PLURAL:$1|кхоьллина $1 декъашхочун дӀаяздар|кхоьллина $1 декъашхочун дӀаяздарш}} оьцу хана юкъахь кхин дукха дӀаяздарш кхолла магийна дац.\nЦундела и IP-адрес лелочарна кхин керла дӀаяздарш кхолла цало.",
        "emailauthenticated": "Хьан электронан поштан адрес бакъдина $2 $3.",
        "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|хьан тергаме могӀанан чура агӀонашна хийцамаш бар]]",
        "subject-preview": "Коьрта могӀа хира бу:",
        "previewerrortext": "Хьан хийцамашка хьалха хьажа гӀертачу хенахь гӀалат даьлла.",
        "blockedtitle": "Декъашхочун блоктоьхана",
-       "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Дехар до, хьайн хаам чохь билгалде и.",
+       "blockedtext": "'''Ð¥Ñ\8cан Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ð´Ó\80аÑ\8fздаÑ\80 Ñ\8f IP-адÑ\80еÑ\81 Ð±Ð»Ð¾ÐºÑ\82оÑ\8cÑ\85на Ð´Ñ\83.'''\n\nÐ\91локÑ\82оÑ\8cÑ\85на ÐºÑ\83Ñ\8cйгалÑ\85оÑ\87о $1.\nÐ\91илгалдина Ð±Ð°Ñ\85Ñ\8cана: Â«''$2''».\n\n* Ð\91локÑ\82оÑ\85аÑ\80 Ð´Ð¾Ð»Ð°Ð´ÐµÐ»Ð»Ð°: $8\n* Ð\91локÑ\82оÑ\85аÑ\80 Ñ\87екÑ\85долÑ\83: $6\n* Ð\91локÑ\82оÑ\85аÑ\80ан Ó\80алаÑ\88о: $7\n\nÐ¥Ñ\8cа Ð¹Ð¸Ñ\88 Ñ\8e $1 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83Ñ\8cнга Ð´ÐµÑ\85аÑ\80дан Ñ\8f ÐºÑ\85еÑ\87Ñ\83 Ð¼Ñ\83Ñ\8cлÑ\85а [[{{MediaWiki:Grouppage-sysop}}|кÑ\83Ñ\8cйгалÑ\85оÑ\87Ñ\83Ñ\8cнга]].\nТеÑ\80гам Ð±Ðµ, Ñ\85Ñ\8cа Ñ\82аÑ\80о Ñ\8fÑ\86 Â«Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83нга ÐºÐµÑ\85аÑ\82» Ð¾Ð»Ñ\83 Ñ\84Ñ\83нкÑ\86и Ð»ÐµÐ»Ð°Ñ\8fн, Ñ\85Ñ\8cан [[Special:Preferences|гÓ\80иÑ\80Ñ\81 Ð½Ð¸Ñ\81баÑ\80 Ñ\87оÑ\85Ñ\8c]] Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\88Ñ\82ан Ð°Ð´Ñ\80еÑ\81 Ñ\8fздина Ð´Ð°Ñ\86аÑ\85Ñ\8c, Ñ\8f ÐºÐµÑ\85аÑ\82аÑ\88 ÐºÑ\85еÑ\85Ó\80иÑ\82аÑ\80на Ð° Ð±Ð»Ð¾ÐºÑ\82оÑ\8cÑ\85на ÐµÐ»Ð°Ñ\85Ñ\8c.\nÐ¥Ñ\8cан IP-адÑ\80еÑ\81 â\80\94 $3, Ð±Ð»Ð¾ÐºÑ\82оÑ\85аÑ\80ан Ð¸Ð´ÐµÐ½Ñ\82иÑ\84икаÑ\82оÑ\80 â\80\94 $5.\nÐ\94еÑ\85аÑ\80 Ð´Ð¾, Ñ\85Ñ\8cайн Ñ\85аам Ñ\87оÑ\85Ñ\8c Ð±Ð¸Ð»Ð³Ð°Ð»Ð´Ðµ Ð¸.",
        "blockednoreason": "бахьана билгалдина дац",
        "whitelistedittext": "Ахьа да деза $1 агӀона хийцамаш бан.",
        "nosuchsectiontitle": "Дакъа каро йиш яц.",
        "recreate-moveddeleted-warn": "'''Тидам бе. Ахьа кхуллуш ю, хьалхо дӀаяьккхина йолу агӀо.'''\n\nХьажа, билгалла оьши хьуна хӀара агӀо юха кхолла.\nЛахахь далина ду дӀаяхарш тӀяхь долу тептарш а хӀокх агӀона цӀе хийцарш а.",
        "moveddeleted-notice": "Иза агӀо дӀаяьккхина яра.\nХаийтарна лахахьа гойту, цуьнца долу дӀаяздарш кху тептар чура дӀаяхарш а цӀе хийцарш а.",
        "log-fulllog": "Хьажа деригге тептаре",
-       "edit-hook-aborted": "Нисдар юхадаьккхина тӀехьожучо.\nХӀу бахьна ду билгал дина дац.",
+       "edit-hook-aborted": "Ð\9dиÑ\81даÑ\80 Ñ\8eÑ\85адаÑ\8cккÑ\85ина Ñ\82Ó\80еÑ\85Ñ\8cожÑ\83Ñ\87о.\nÐ¥Ó\80Ñ\83 Ð±Ð°Ñ\85Ñ\8cана Ð´Ñ\83 Ð±Ð¸Ð»Ð³Ð°Ð» Ð´Ð¸Ð½Ð° Ð´Ð°Ñ\86.",
        "edit-gone-missing": "АгӀо карлаяккха цатарло.\nИза дӀаяьккхина хила мега.",
        "edit-conflict": "Тадарна дойнаш.",
        "edit-no-change": "Хьан нисдар юхадаьккхина, ахьа хийцамаш бина цахилар бахьнехь.",
        "content-model-text": "цхьалхе йоза",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-warning": "Тидам: [[:$1]] кхойкху [[:$2]] «дегӀан_хатӀ» «$3» параметран цхьаннал сов маьӀна долу карточка.\nТӀаьххьара къастийна долу маьӀна бен лелор дац.",
        "duplicate-args-category": "Кепийн кхайкхамашкахь аргументаш юх-юха лелош йолу агӀонаш",
        "expensive-parserfunction-warning": "'''Тидам бе!''' Ресурсийн функцийн дехарш сов даьлла агӀонаш .\n\nДукху хилла ца деза {{PLURAL:$2|$2 дехар|$2 дехарш|1=цхьана дехар}}, хӀинца $1 {{PLURAL:$1|дехар}} ду.",
        "expensive-parserfunction-category": "Ресурсийн функцийн дехарш сов даьлла агӀонаш",
        "rev-deleted-user": "(авторан цӏе дӏаяйина)",
        "rev-deleted-event": "(дӀаяздар дӀаяьккхина)",
        "rev-deleted-user-contribs": "[декъашхочун цӀе я IP-адрес дӀаяхина — къинхьегаман агӀонгара нисдар къайлаяьккхина]",
-       "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": "ХӀара агӀона верси '''дӀаяьккхина''' ю.\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}}}} дӀаяьхнарш йолу тептар чохь].",
-       "rev-suppressed-text-view": "ХӀара агӀона верси '''къайлаяьккхина''' ю.\nБахьна далина [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяьхнарш йолу тептар чохь].",
+       "rev-deleted-text-permission": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80она Ð²ÐµÑ\80Ñ\81и '''дÓ\80аÑ\8fÑ\8cккÑ\85ина''' Ñ\8e.\nÐ\91аÑ\85Ñ\8cана Ð´Ð°Ð»Ð¸Ð½Ð° [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ó\80аÑ\8fÑ\8cÑ\85наÑ\80Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c].",
+       "rev-suppressed-text-permission": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80она Ð²ÐµÑ\80Ñ\81и <strong>кÑ\8aайлаÑ\8fÑ\8cккÑ\85ина Ñ\8e</strong>.\nÐ\91аÑ\85Ñ\8cана Ð´Ð°Ð»Ð¸Ð½Ð° [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ÐºÑ\8aайлаÑ\8fÑ\8cÑ\85аÑ\80Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c].",
+       "rev-deleted-text-unhide": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80она Ð²ÐµÑ\80Ñ\81и '''дÓ\80аÑ\8fÑ\8cккÑ\85ина''' Ñ\8e.\nÐ\91аÑ\85Ñ\8cана Ð´Ð°Ð»Ð¸Ð½Ð° [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ó\80аÑ\8fÑ\8cÑ\85наÑ\80Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c].\nÐ¥Ñ\8cайна Ð»Ð°Ð°Ñ\85Ñ\8c Ñ\85Ñ\8cа Ð¹Ð¸Ñ\88 Ñ\8e [$1 Ð¸ Ð²ÐµÑ\80Ñ\81и Ñ\85Ñ\8cажа].",
+       "rev-suppressed-text-unhide": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80она Ð²ÐµÑ\80Ñ\81и '''кÑ\8aайлаÑ\8fÑ\8cккÑ\85ина''' Ñ\8e.\nÐ\91аÑ\85Ñ\8cана Ð´Ð°Ð»Ð¸Ð½Ð° [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ó\80аÑ\8fÑ\8cÑ\85наÑ\80Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c].\nÐ¥Ñ\8cайна Ð»Ð°Ð°Ñ\85Ñ\8c Ñ\85Ñ\8cа Ð¹Ð¸Ñ\88 Ñ\8e [$1 Ð¸ Ð²ÐµÑ\80Ñ\81и Ñ\85Ñ\8cажа].",
+       "rev-deleted-text-view": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80она Ð²ÐµÑ\80Ñ\81и '''дÓ\80аÑ\8fÑ\8cккÑ\85ина''' Ñ\8e.\nÐ\91аÑ\85Ñ\8cана Ð´Ð°Ð»Ð¸Ð½Ð° [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ó\80аÑ\8fÑ\8cÑ\85наÑ\80Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c].",
+       "rev-suppressed-text-view": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80она Ð²ÐµÑ\80Ñ\81и '''кÑ\8aайлаÑ\8fÑ\8cккÑ\85ина''' Ñ\8e.\nÐ\91аÑ\85Ñ\8cана Ð´Ð°Ð»Ð¸Ð½Ð° [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ð´Ó\80аÑ\8fÑ\8cÑ\85наÑ\80Ñ\88 Ð¹Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c].",
        "rev-deleted-no-diff": "АгӀона цхьа верси '''дӀаяьккхина''' хилар бахьнехь, хӀуна версийн башхалла хьажа цало.\nМадарра каро мега [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀаяккхаран тептар чохь].",
        "rev-suppressed-no-diff": "Хьо хӀокху версешан башхала хьажа цало, царах цхьаъ '''дӀаяьккхина''' хилар бахьнехь.",
        "rev-delundel": "гайта/къайла",
        "revdelete-radio-unset": "Гуш ерг",
        "revdelete-suppress": "Къайлабаха хаамаш куьйгалхойх а",
        "revdelete-unsuppress": "МеттахӀоьттина версийн дихкар къайладаккха",
-       "revdelete-log": "Бахьна:",
+       "revdelete-log": "Ð\91аÑ\85Ñ\8cана:",
        "revdelete-submit": "Кхочушде {{PLURAL:$1|1=къастина версин|къастина версийн}}",
        "revdelete-success": "'''Версеш гуш хилар кхиамца хийцина.'''",
        "revdelete-failure": "'''Версеш гуш хилар хийца йиш яц:'''\n$1",
        "deletedhist": "ДӀаяккхаран истори",
        "revdelete-hide-current": "Цунах $2, $1: дӀаяздар къайладаккхаран гӀалат и верси карара ю.\nИза къайлаяккха йиш яц.",
        "revdelete-reason-dropdown": "Даржина долу дӀаяккхаран баьхьанаш \n** Авторан бакъонаш талхор\n** Бита йиш йоцу шех лаьцна хаам\n** Бакъдоцург зуламан хаам",
-       "revdelete-otherreason": "Кхин бахьна/тӀетохар:",
-       "revdelete-reasonotherlist": "Кхин бахьна",
+       "revdelete-otherreason": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана/Ñ\82Ó\80еÑ\82оÑ\85аÑ\80:",
+       "revdelete-reasonotherlist": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана",
        "revdelete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "revdelete-offender": "АгӀона версин автор:",
        "suppressionlog": "Хьулдаран тептар",
        "mergehistory-invalid-destination": "Юзийна агӀона нийса корта хила еза.",
        "mergehistory-autocomment": "Дехьа яьккхина [[:$1]] [[:$2]] чу",
        "mergehistory-comment": "Дехьа яьккхина [[:$1]] [[:$2]] чу: $3",
-       "mergehistory-reason": "Бахьна:",
+       "mergehistory-reason": "Ð\91аÑ\85Ñ\8cана:",
        "mergelog": "Цхьаьнатохаршан тептар",
        "revertmerge": "Йекъа",
        "mergelogpagetext": "Лахахь гойту тӀеххьара вовшахтоьхна агӀонийн могӀам.",
        "userrights-groupsmember": "Декъашхо:",
        "userrights-groupsmember-auto": "Бакъонашан тоба:",
        "userrights-groups-help": "Хьона хийца ло декъашхочун бакъонаш.\n* Бакъона цӀера юххехь билгало елахь, цуна и бакъо йолуш ю.\n* Билгало яцахь — декъашхочун и бакъо яц.\n* Знако * билгала до ахьа бакъо еллачул тӀаьхьа хьона и дӀаяккха цалуш хилар.",
-       "userrights-reason": "Бахьна:",
+       "userrights-reason": "Ð\91аÑ\85Ñ\8cана:",
        "userrights-no-interwiki": "Хьан бакъо яц декъашхой бакъо хийца кхечу википеди чохь.",
        "userrights-nologin": "Куьйгалхочунна бакъо йолу [[Special:UserLogin|дӀаяздарца]] ло декъашхочун бакъо.",
        "userrights-notallowed": "Хьан дӀаяздарца магийна дац декъашхошна бакъо яла а дӀаяккха а.",
        "backend-fail-read": "Файл «$1» еша цаелира.",
        "backend-fail-create": "Файл $1 дӀаязъян цаелира.",
        "backend-fail-maxsize": "Файл $1 дӀаязъян цаелира, цуна барам $2 {{PLURAL:$2|байт}} сов хилар бахьнехь.",
-       "backend-fail-readonly": "ХӀара «$1» хӀинца еша бен таро яц. Бахьна: «$2»",
+       "backend-fail-readonly": "Ð¥Ó\80аÑ\80а Â«$1» Ñ\85Ó\80инÑ\86а ÐµÑ\88а Ð±ÐµÐ½ Ñ\82аÑ\80о Ñ\8fÑ\86. Ð\91аÑ\85Ñ\8cана: Â«$2»",
        "lockmanager-notlocked": "БлокдӀаяккха цаелира \"$1\"; цуна блоктоьхна яц.",
        "lockmanager-fail-closelock": "Блоктохаран «$1» файл къайлаяккха цаелира.",
        "lockmanager-fail-deletelock": "Блоктохаран файл «$1» дӀаяккха цатарло.",
        "filerevert": "Тохарлера верси юхаерзор $1",
        "filerevert-legend": "Файлан верси юхаерзо",
        "filerevert-intro": "<span class=\"plainlinks\">Файл юхаерзош ю '''[[Media:$1|$1]]''' оцу [$4 верси $3, $2].</span>",
-       "filerevert-comment": "Бахьна:",
+       "filerevert-comment": "Ð\91аÑ\85Ñ\8cана:",
        "filerevert-defaultcomment": "Юхаерзош ю оцу $2, $1 хенахь хила верси",
        "filerevert-submit": "Юхаяккха",
        "filerevert-success": "Юхаерзина файл '''[[Media:$1|$1]]''' оцу [$4 верси $3, $2].",
        "filedelete-legend": "ДӀаяккха файл",
        "filedelete-intro": "Хьо файл '''[[Media:$1|$1]]''' дӀаяккха гӀерта цунна массо истори цхьан.",
        "filedelete-intro-old": "<span class=\"plainlinks\">Ахьа дӀайоккхуш ю верси '''[[Media:$1|$1]]''' цу [$4 $3, $2].</span>",
-       "filedelete-comment": "Бахьна:",
+       "filedelete-comment": "Ð\91аÑ\85Ñ\8cана:",
        "filedelete-submit": "ДӀаяккха",
        "filedelete-success": "$1 дӀаяьккхи.",
        "filedelete-success-old": "Верси '''[[Media:$1|$1]]''' цу $3 $2 дӀаяьккхина.",
        "filedelete-nofile": "'''$1''' яц.",
-       "filedelete-otherreason": "Кхин бахьна:",
-       "filedelete-reason-otherlist": "Кхин бахьна",
+       "filedelete-otherreason": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана:",
+       "filedelete-reason-otherlist": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана",
        "filedelete-reason-dropdown": "* Даржина долу дӀаяккхаран баьхьанаш \n** Авторан бакъонаш талхор\n** ЦхӀатера файлаш хилар",
        "filedelete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "filedelete-maintenance-title": "Файл дӀаяккха цало",
        "randomincategory-nopages": "[[:Category:$1]] категори чохь агӀонаш яц.",
        "randomincategory-category": "Категори:",
        "randomincategory-legend": "Категори чу цахууш нисъелла  агӀо",
+       "randomincategory-submit": "Дехьа гӀо",
        "randomredirect": "Цахууш нисделла дIасахьажор",
        "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": "Дехаро хӀумма ца елла.",
        "protectedpages-expiry": "Чекхйолу",
        "protectedpages-performer": "Декъашхо ларор",
        "protectedpages-params": "ГӀаролийн параметраш",
-       "protectedpages-reason": "Бахьна",
+       "protectedpages-reason": "Ð\91аÑ\85Ñ\8cана",
        "protectedpages-unknown-timestamp": "Хууш дац",
        "protectedpages-unknown-performer": "Хууш доцу декъашхо",
        "protectedtitles": "ГӀаролла дина цӀерш",
        "dellogpage": "ДӀадаьхнарш долу тéптар",
        "dellogpagetext": "Лахахь гойтуш ю тӀаьххьара дӀаяьхнарш.",
        "deletionlog": "дӀадаьхнарш долу тéптар",
-       "deletecomment": "Бахьна:",
-       "deleteotherreason": "Кхин бахьна/тӀетохар:",
-       "deletereasonotherlist": "Кхин бахьна",
+       "deletecomment": "Ð\91аÑ\85Ñ\8cана:",
+       "deleteotherreason": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана/Ñ\82Ó\80еÑ\82оÑ\85аÑ\80:",
+       "deletereasonotherlist": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана",
        "deletereason-dropdown": "* Даржина долу дӀаяккхаран баьхьанаш \n** спам\n** зулма  \n** авторан лаамца\n** авторан бакъонаш талхор\n** болх цабо дӀасхьажорг",
        "delete-edit-reasonlist": "Бахьанин могӀам нисбар",
        "deleting-backlinks-warning": "'''ДӀахьедар:''' Ахьа дӀайоккхуш йолчун тӀе товжийна [[Special:WhatLinksHere/{{FULLPAGENAME}}|кхин агӀонаш]] ю.",
        "rollbacklinkcount": "юхадаккха $1 {{PLURAL:$1|1=нисдар|нисдарш}}",
        "rollbacklinkcount-morethan": "Юхадаккха $1 дукха {{PLURAL:$1|нисдар|нисдарш|нисдарш}}",
        "rollbackfailed": "Юхайоккхуш гӀалат ду",
-       "alreadyrolled": "ТÓ\80ехьара [[User:$2|$2]] ([[User talk:$2|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) декъашхочо «[[:$1]]» агӀона  бина хийцамаш юхабаха цатарло,\nхӀинцале цхъаъ кхиъна хийцамаш юхабаха я агӀо тая.\n\nХийцамаш бинарг [[User:$3|$3]] ([[User talk:$3|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Хийцамаш барна гайтина бахьна: ''$1''.",
+       "alreadyrolled": "ТÓ\80аÑ\8cÑ\85хьара [[User:$2|$2]] ([[User talk:$2|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) декъашхочо «[[:$1]]» агӀона  бина хийцамаш юхабаха цатарло,\nхӀинцале цхъаъ кхиъна хийцамаш юхабаха я агӀо тая.\n\nХийцамаш бинарг [[User:$3|$3]] ([[User talk:$3|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "editcomment": "ХийÑ\86амаÑ\88 Ð±Ð°Ñ\80на Ð³Ð°Ð¹Ñ\82ина Ð±Ð°Ñ\85Ñ\8cана: ''$1''.",
        "revertpage": "Нисдарш [[Special:Contributions/$2|$2]] ([[User talk:$2|дийцаре]]) юха даьхна версин [[User:$1|$1]]",
        "revertpage-nouser": "Нисдарш (декъашхочун цӀе хьулйина) юхадаьхина версин {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Юхадаьхна $1; нисдарш, $2 версин.",
        "sessionfailure-title": "Сеансан гӀалат",
        "sessionfailure": "Карара белхан сеансан гӀалат деллачух тера ду;\nиза дешдерг сацийна «сеанс долаерзийтта».\nДехар до, тӀетаӀе «ЮхугӀо» кнопка, кхин агӀо карлаяккха.",
+       "changecontentmodel": "АгӀона контентан модель таяр",
+       "changecontentmodel-title-label": "АгӀона цӀе",
+       "changecontentmodel-reason-label": "Бахьана:",
+       "logentry-contentmodel-change-revertlink": "юхаяккха",
+       "logentry-contentmodel-change-revert": "Юхаяккха",
        "protectlogpage": "Гlаролли тептар",
        "protectlogtext": "Лахахь гойту агӀона гӀоралла дарна бина хийцамаш чохь болу тептар.\nХьа кхин йиш ю [[Special:ProtectedPages|хӀинца гӀоралла дина йолу агӀонийн могӀаме хьажа]].",
        "protectedarticle": "гlаролла дина агlо «[[$1]]»",
        "protect-badnamespace-text": "ХӀокху цӀерийн меттигехь йолу агӀонашна гӀараладан цало.",
        "protect-norestrictiontypes-title": "ГӀараладан цалуш йолу агӀо",
        "protect-legend": "Бакъде гӀоралла дар",
-       "protectcomment": "Бахьна:",
+       "protectcomment": "Ð\91аÑ\85Ñ\8cана:",
        "protectexpiry": "Чекхйолу:",
        "protect_expiry_invalid": "Нийса йоцу хан гlаролла дlайаларехь.",
        "protect_expiry_old": "Хан чаккхе — хьалхалера.",
        "protect-othertime-op": "кхин хан",
        "protect-existing-expiry": "Карара чекхйолу хан: $2, $3",
        "protect-existing-expiry-infinity": "Карара чекхйолу хан: чаккхе йоцу",
-       "protect-otherreason": "Кхин бахьна/тӀетохар:",
-       "protect-otherreason-op": "Кхин бахьна",
+       "protect-otherreason": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана/Ñ\82Ó\80еÑ\82оÑ\85аÑ\80:",
+       "protect-otherreason-op": "Ð\9aÑ\85ин Ð±Ð°Ñ\85Ñ\8cана",
        "protect-dropdown": "* ГӀоралла дарна баьхьаш \n** сих-сиха зулам дар \n** дуккха спам хилар\n** нисдарийн тӀом \n** гӀараялл агӀо",
        "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",
        "undeletelink": "хьажа/меттахӀоттае",
        "undeleteviewlink": "хьажа",
        "undeleteinvert": "Къастае массо",
-       "undeletecomment": "Бахьна:",
+       "undeletecomment": "Ð\91аÑ\85Ñ\8cана:",
        "undeletedrevisions": "{{PLURAL:$1|меттахӀоьттина}} $1 {{PLURAL:$1|хийцам}}",
        "undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а $2 {{PLURAL:$2|файл}} а",
        "undeletedfiles": "$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина}}",
        "undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1",
        "undelete-error-long": "Файл меттахӀоттош гӀалат даьлла:\n\n$1",
        "undelete-show-file-submit": "ХӀаъ",
-       "namespace": "Цlерийн ана:",
+       "namespace": "ЦӀерийн ана:",
        "invert": "Хаьржинарг къайлаяккха",
        "tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн анан агӀонийн хийцамаш къайлабаха (кхин дихкина цӀерийн анаш, гайтина елахь)",
        "namespace_association": "Йихкина ана",
        "unblock": "ДекъашхонтӀера блокдӀаякхар",
        "blockip": "Блоктоха {{GENDER:$1|декъашхочун}}",
        "blockip-legend": "Декъашхочун блоктохар",
-       "blockiptext": "Бухахь йолу форманца блоктоха IP-адресна цунтӏера дӏаяздарш ца дайта.\nБлоктоха магийна цо зенаш деш делахь кхин хӏокху [[{{MediaWiki:Policy-url}}|низам ца]].\nЛахахь билгалде блоктохарна бахьна.",
+       "blockiptext": "Ð\91Ñ\83Ñ\85аÑ\85Ñ\8c Ð¹Ð¾Ð»Ñ\83 Ñ\84оÑ\80манÑ\86а Ð±Ð»Ð¾ÐºÑ\82оÑ\85а IP-адÑ\80еÑ\81на Ñ\86Ñ\83нÑ\82Ó\8fеÑ\80а Ð´Ó\8fаÑ\8fздаÑ\80Ñ\88 Ñ\86а Ð´Ð°Ð¹Ñ\82а.\nÐ\91локÑ\82оÑ\85а Ð¼Ð°Ð³Ð¸Ð¹Ð½Ð° Ñ\86о Ð·ÐµÐ½Ð°Ñ\88 Ð´ÐµÑ\88 Ð´ÐµÐ»Ð°Ñ\85Ñ\8c ÐºÑ\85ин Ñ\85Ó\8fокÑ\85Ñ\83 [[{{MediaWiki:Policy-url}}|низам Ñ\86а]].\nÐ\9bаÑ\85аÑ\85Ñ\8c Ð±Ð¸Ð»Ð³Ð°Ð»Ð´Ðµ Ð±Ð»Ð¾ÐºÑ\82оÑ\85аÑ\80на Ð±Ð°Ñ\85Ñ\8cана.",
        "ipaddressorusername": "IP-адрес я декъашхочун цӀе:",
        "ipbexpiry": "Хан чекхйолу:",
-       "ipbreason": "Бахьна:",
+       "ipbreason": "Ð\91аÑ\85Ñ\8cана:",
        "ipbreason-dropdown": "* Белхан некъ дӀакъовлар бахьанаш:\n** Харца хаам бар\n** АгӀонан чураниг дӀаяккхар\n** Спам-хьажоргаш арахьара сайташна\n** МаьӀна доцу йоза тӀетохар\n** Декъашхой хьийзабар, кхерамаш тийсар\n** Масийтта лараман яздар зуламан лелаяр\n** Магийтина йоцу декъашхочун цӀе",
        "ipb-hardblock": "Шаш довзийтина болу декъашхошна бехкам бе хӀокху IP-адресца тадарш дан",
        "ipbcreateaccount": "Цамаго керла декъашхочун дӀаяздарш кхолла",
        "blocklist-expiry": "Чекхйолу",
        "blocklist-by": "Цунна блоктоьхана куьйгалхо",
        "blocklist-params": "Блоктохаран параметраш",
-       "blocklist-reason": "Бахьна:",
+       "blocklist-reason": "Ð\91аÑ\85Ñ\8cана:",
        "ipblocklist-submit": "Лахар",
        "ipblocklist-localblock": "Локальни блоктохар",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Кхин блоктохар|Кхин блоктохарш}}",
        "movesubpage": "{{PLURAL:$1|1=Бухара агӀо|Бухара агӀонаш}}",
        "movesubpagetext": "ХӀокху агӀона $1 {{PLURAL:$1|1=бухара агӀо ю|бухара агӀонаш ю}}.",
        "movenosubpage": "ХӀокху агӀона бухара агӀонаш яц.",
-       "movereason": "Бахьна:",
+       "movereason": "Ð\91аÑ\85Ñ\8cана:",
        "revertmove": "юхаяккха",
        "delete_and_move": "Цle а хуьйцуш дӀаяккха",
        "delete_and_move_text": "== ДӀаяккха хьокъ ю ==\nИ цӀе йолу аг1о «[[:$1]]» йолуш ю. \nЛаьий хьуна и дӀаяккха, цӀе хийца таро хилийта?",
        "move-leave-redirect": "Ӏадйита дӀасахьажораг",
        "protectedpagemovewarning": "'''ДӀахьедар.''' ХӀара агӀо гӀаролла йина ю; цӀе хийца я нисйа а бакъо йолуш куьйгалхой бе бац.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
        "semiprotectedpagemovewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
+       "move-over-sharedrepo": "== Файл йолуш ю ==\nВикигулам чохь йолуш ю [[:$1]]. ХӀокху файлан цӀе хийцича Викигулам чуьраниг дӀакъовлу.",
        "export": "АгӀонаш араяхар",
        "exporttext": "Шуьга далур ду кхечу меттера чудахарш, йоза а хийцаме тептарш билгалла йолу агӀонаш я гулдина йолу агӀонаш хӀокху XML барамца, юха тӀаьхьа чура [[Special:Import|хьаэцалурдолш]] кхечу вики-хьалхен, болх беш йолу хӀокху MediaWiki гӀирсаца.\n\nКхечу меттера яззамаш чуяха, чу язъе цӀе тадечу метте, цхьа могӀан цӀе могӀаршкахь, юха харжа лаьий шуна кхечу меттигера чуяха массо яззамашна истори хийцамбарш я тӀаьххьарлера яззаман верси.\n\nШуьга кхи далундерг, лелаеш йолу адресан хьажорг кхечу меттера чудаха тӀаьххьарлерачу версин яззамаш. Масала оцу яззаман [[{{MediaWiki:Mainpage}}]] хӀара хира ю хьажорг [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
        "exportall": "Массо агӀонаш экспорт ян",
        "tooltip-pt-logout": "Дlадерзадо болх бар",
        "tooltip-pt-createaccount": "Шу йиш ю дӀаяздар кхоьллина системин чудаха, амма иза тӀедожийна дац.",
        "tooltip-ca-talk": "Дийцаре агlон чулацам",
-       "tooltip-ca-edit": "Ð¥lаÑ\80а Ð°Ð³lо Ñ\85ийÑ\86алÑ\83Ñ\80 Ñ\8e. Ð\9bелайе, Ð´ÐµÑ\85аÑ\80 Ð´Ð¾, Ñ\85Ñ\8cалÑ\85Ñ\85Ñ\8cажаÑ\80 Ð°Ð¹Ñ\85Ñ\8cа Ñ\87Ñ\83Ñ\82оÑ\85але lалаÑ\88ан",
+       "tooltip-ca-edit": "Тае Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о",
        "tooltip-ca-addsection": "Кхолла керла дакъа",
        "tooltip-ca-viewsource": "Хlара агlо хийцам цабайта гароллехь ю, хьоьга далундерг хьажар а дезахь чура йоза хьаэцар",
        "tooltip-ca-history": "Хlокху агlон хийцамаш болу тептар",
        "tooltip-recreate": "АгӀо дӀаяьккхина хиларе ца хьоьжуш меттахӀоттае агӀо",
        "tooltip-upload": "Доладе чуяккхар",
        "tooltip-rollback": "Цхьоз тlетаlийча дlабаккха кхечо бина болу тlаьххьара хийцам",
-       "tooltip-undo": "ДӀабаккха бина болу хийцам а хьалхьажар гойтуш, дӀаяккхарна бахьна гайта аьтту беш",
+       "tooltip-undo": "Ð\94Ó\80абаккÑ\85а Ð±Ð¸Ð½Ð° Ð±Ð¾Ð»Ñ\83 Ñ\85ийÑ\86ам Ð° Ñ\85Ñ\8cалÑ\85Ñ\8cажаÑ\80 Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88, Ð´Ó\80аÑ\8fккÑ\85аÑ\80на Ð±Ð°Ñ\85Ñ\8cана Ð³Ð°Ð¹Ñ\82а Ð°Ñ\8cÑ\82Ñ\82Ñ\83 Ð±ÐµÑ\88",
        "tooltip-preferences-save": "ГӀирс нисбар Ӏалашде",
        "tooltip-summary": "Язъе йоца цӀе",
        "interlanguage-link-title-nonlang": "$1 – $2",
        "creditspage": "Баркаллаш",
        "nocredits": "Бац декъашхойн могӀам хӀокху яззамца",
        "spamprotectiontitle": "Совбиларна литтар",
-       "spamprotectiontext": "Хьо дӀаязъян гӀерта агӀо спам-литтаро дӀакъоьвлина.\nЦуна бахьна хила там бу агӀона чохь зулам литтаран чутоьхна йолу хьажорг хилар.",
+       "spamprotectiontext": "Ð¥Ñ\8cо Ð´Ó\80аÑ\8fзÑ\8aÑ\8fн Ð³Ó\80еÑ\80Ñ\82а Ð°Ð³Ó\80о Ñ\81пам-лиÑ\82Ñ\82аÑ\80о Ð´Ó\80акÑ\8aоÑ\8cвлина.\nЦÑ\83на Ð±Ð°Ñ\85Ñ\8cана Ñ\85ила Ñ\82ам Ð±Ñ\83 Ð°Ð³Ó\80она Ñ\87оÑ\85Ñ\8c Ð·Ñ\83лам Ð»Ð¸Ñ\82Ñ\82аÑ\80ан Ñ\87Ñ\83Ñ\82оÑ\8cÑ\85на Ð¹Ð¾Ð»Ñ\83 Ñ\85Ñ\8cажоÑ\80г Ñ\85илаÑ\80.",
        "spambot_username": "Спам дӀацӀаняр",
        "pageinfo-title": "Хаамаш цу «$1»",
        "pageinfo-not-current": "Шира версийн оьцу хааме хьажа таро яц.",
        "markaspatrolledtext": "Билгалъе хӀара агӀо хьаьжжина сана",
        "markedaspatrolled": "ДӀадахка теллина санна хилар",
        "markedaspatrolledtext": "Хаьржина [[:$1]] агӀона верси къобалйина сана билгалйина.",
-       "rcpatroldisabled": "ТÓ\80ехьара бина хийцамаш къобалбан магийна дац",
-       "rcpatroldisabledtext": "ТÓ\80ехьара бина хийцамаш къобалбар хӀинца дӀадайина ду.",
+       "rcpatroldisabled": "ТÓ\80аÑ\8cÑ\85хьара бина хийцамаш къобалбан магийна дац",
+       "rcpatroldisabledtext": "ТÓ\80аÑ\8cÑ\85хьара бина хийцамаш къобалбар хӀинца дӀадайина ду.",
        "markedaspatrollederror": "теллина сана билгалъян цало",
        "markedaspatrollednotify": "АгӀо «$1» пайдане хилар билгалдина",
        "markedaspatrollederrornotify": "Хийцамаш хьаьжжина сана билгал бан цабелира.",
        "exif-serialnumber": "Камеран серин номер",
        "exif-cameraownername": "Камера ерг",
        "exif-label": "Билгало",
-       "exif-datetimemetadata": "ТÓ\80ехьара метахаамаш хийцина терахь",
+       "exif-datetimemetadata": "ТÓ\80аÑ\8cÑ\85хьара метахаамаш хийцина терахь",
        "exif-nickname": "ЧӀагӀъелла йоцу суьртан цӀе",
        "exif-rating": "Мах хадор (5 нах)",
        "exif-rightscertificate": "Бакъонийн урхалладаран сертификат",
        "monthsall": "массо",
        "confirmemail": "Электронан поштан адрес бакъдар",
        "confirmemail_noemail": "Ахьа нийса электронан поштан адрес яздина дац [[Special:Preferences|гӀирсан чохь]].",
-       "confirmrecreate": "Декъашхочо [[User:$1|$1]] ([[User talk:$1|дийцаре]]) хӀара агӀо дӀаяьккхина, ахьа иза тая йолийча, дӀаяккхарна бахьна:\n: ''$2''\nДехар до, тешал де, хьо иза агӀо меттахӀотто лууш ву/ю але.",
+       "confirmrecreate": "Ð\94екÑ\8aаÑ\88Ñ\85оÑ\87о [[User:$1|$1]] ([[User talk:$1|дийÑ\86аÑ\80е]]) Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fÑ\8cккÑ\85ина, Ð°Ñ\85Ñ\8cа Ð¸Ð·Ð° Ñ\82аÑ\8f Ð¹Ð¾Ð»Ð¸Ð¹Ñ\87а, Ð´Ó\80аÑ\8fккÑ\85аÑ\80на Ð±Ð°Ñ\85Ñ\8cана:\n: ''$2''\nÐ\94еÑ\85аÑ\80 Ð´Ð¾, Ñ\82еÑ\88ал Ð´Ðµ, Ñ\85Ñ\8cо Ð¸Ð·Ð° Ð°Ð³Ó\80о Ð¼ÐµÑ\82Ñ\82аÑ\85Ó\80оÑ\82Ñ\82о Ð»Ñ\83Ñ\83Ñ\88 Ð²Ñ\83\8e Ð°Ð»Ðµ.",
        "confirmrecreate-noreason": "Декъашхочо [[User:$1|$1]] ([[User talk:$1|дийцаре]]) хӀара агӀо дӀаяьккхина, ахьа иза тая йолийча. Дехар до, тешал де, хьо иза агӀо меттахӀотто лууш ву/ю але.",
        "recreate": "Юха кхолла",
        "confirm_purge_button": "ХӀаъ",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath АгӀона тӀе некъ]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Скриптан тӀе некъ]",
+       "version-libraries-description": "Цуьнах лаьцна",
+       "version-libraries-authors": "Автораш",
        "redirect": "Декъашхочун файлан тӀера дӀасхьажор",
        "redirect-legend": "Файлан я агӀона тӀера дӀасхьажор",
        "redirect-summary": "ХӀара агӀо лело йиш ю файлан я агӀона тӀера дӀасхьажош.",
        "tags-create-heading": "Кхолла керла билгало",
        "tags-create-explanation": "Юха кхоьллина билгалонаш декъашхошна а боташна а Ӏад йтарца тӀекхочуш хира ю.",
        "tags-create-tag-name": "Билгалонна цӀе:",
-       "tags-create-reason": "Бахьна:",
+       "tags-create-reason": "Ð\91аÑ\85Ñ\8cана:",
        "tags-create-submit": "Кхолла",
        "tags-create-no-name": "Ахьа билгалонан цӀе язъян езаш.",
        "tags-create-already-exists": "«$1» билгало яц.",
        "tags-create-warnings-below": "Лаьий хьуна билгало кхоллар чекхдакха?",
        "tags-delete-title": "ДӀаяккха билгало",
        "tags-delete-explanation-initial": "Хьо гӀерта «$1» базан чура билгало дӀаяккха.",
-       "tags-delete-reason": "Бахьна:",
+       "tags-delete-reason": "Ð\91аÑ\85Ñ\8cана:",
        "tags-activate-title": "Билгалона активациян",
        "tags-activate-question": "Хьо гӀерта «$1» билгалонан активациян.",
-       "tags-activate-reason": "Бахьна:",
+       "tags-activate-reason": "Ð\91аÑ\85Ñ\8cана:",
        "tags-activate-not-allowed": "«$1» билгалонан активациян цало.",
        "tags-activate-not-found": "«$1» билгало яц.",
        "tags-activate-submit": "Активациян",
        "tags-deactivate-title": "ДӀаяйа билгало",
-       "tags-deactivate-reason": "Бахьна:",
+       "tags-deactivate-reason": "Ð\91аÑ\85Ñ\8cана:",
        "tags-deactivate-submit": "ДӀаяйа",
        "tags-edit-title": "Тегаш таян",
        "tags-edit-manage-link": "Тегашна урхалладар",
        "tags-edit-remove": "ДӀаяха хӀара билгалонаш:",
        "tags-edit-remove-all-tags": "(дӀаяха массо билгалонаш)",
        "tags-edit-chosen-placeholder": "Харжа цхьаъ я массийта тег",
-       "tags-edit-reason": "Бахьна:",
+       "tags-edit-reason": "Ð\91аÑ\85Ñ\8cана:",
        "tags-edit-nooldid-title": "Ӏалашонан верси билгалйина яц",
        "comparepages": "АгӀонаш юстар",
        "compare-page1": "Дуьххьаралера агӀо",
        "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|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажийнарг цаюьтуш",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажорг цаюьтуш",
        "logentry-move-move_redir": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажоран тӀохул",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80ан Ñ\82Ó\80оÑ\85Ñ\83л Ð° Ð´Ó\80аÑ\81аÑ\85Ñ\8cажийнарг цаюьтуш а",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80ган Ñ\82Ó\80еÑ\85Ñ\83л Ð°, Ð´Ó\80аÑ\81аÑ\85Ñ\8cажорг цаюьтуш а",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|хьаьжина}}  агӀона $3 $4 версега",
        "logentry-patrol-patrol-auto": "$1 автоматически {{GENDER:$2|хьаьжина}} $3 агӀона версега $4",
        "logentry-newusers-newusers": "{{GENDER:$2|ДӀавазвелла|ДӀаязелла}} керла декъашхо $1",
        "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 4d4784c..8f376d5 100644 (file)
        "protectedpagetext": "Ginkandaduhan ang mini nga pahina para indi ma-islan.",
        "viewsourcetext": "Pwede mo makita kag makopya ang ginhalinan sang mini nga pahina:",
        "protectedinterface": "Nagahatag ang mini nga pahina sang teksto nga pangkatapusan (''interface'') para sa software, kag ikandado para mapunggan ang pag-abuso.",
-       "editinginterface": "'''Paandam:''' gin-islan mo ang pahina nga gina-usar nga nagahatag teksto sang interface sa sopwer.\nMakaapekto ang mga gin-islan sa mini nga pahina sa gwaan nga itsura ka interface sang manug-usar sa iban nga mga manug-usar.\nPara sa mga pagtransleyt, palihog konsidera gamit ang [http://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], ang MediaWiki proyekto sa paglokalisa.",
+       "editinginterface": "'''Paandam:''' gin-islan mo ang pahina nga gina-usar nga nagahatag teksto sang interface sa sopwer.\nMakaapekto ang mga gin-islan sa mini nga pahina sa gwaan nga itsura ka interface sang manug-usar sa iban nga mga manug-usar.",
        "cascadeprotected": "Ginprotektahan ang mini nga pahina sa pagpangilis, tungod naupod ini sa mga gasunod nga {{PLURAL:$1|pahina, nga|mga pahina, nga}} protektado upod ang \"cascading\" nga pilili-an nga naga-andar:\n$2",
        "namespaceprotected": "Wala ka sang permiso nga magliwat sang mga pahina nga ara sa namespace nga '''$1'''.",
        "ns-specialprotected": "Indi pwede bag-uhon ang mga pinasahi nga pahina.",
index 2ba7c4c..2c88d50 100644 (file)
        "passwordreset": "Reset hesla",
        "passwordreset-text-one": "Pokud chcete e-mailem získat dočasné heslo, vyplňte tento formulář.",
        "passwordreset-text-many": "{{PLURAL:$1|Pokud chcete e-mailem získat dočasné heslo, vyplňte jeden z údajů.}}",
-       "passwordreset-legend": "Znovu nastavit heslo",
        "passwordreset-disabled": "Znovunastavení hesla je na této wiki zakázáno.",
        "passwordreset-emaildisabled": "E-mailové funkce byly na této wiki vypnuty.",
        "passwordreset-username": "Uživatelské jméno:",
        "resettokens": "Reinicializace klíčů",
        "resettokens-text": "Na této stránce můžete reinicializovat klíče, které umožňují přístup k jistým soukromým údajům spojeným s vaším účtem.\n\n{{GENDER:|Měl|Měla|Měli}} byste to provést v případě, že jste je omylem někomu {{GENDER:|prozradil|prozradila|prozradili}}, nebo byl váš účet narušen.",
        "resettokens-no-tokens": "Neexistují žádné klíče, které by bylo možno reinicializovat.",
-       "resettokens-legend": "Reinicializace klíčů",
        "resettokens-tokens": "Klíče:",
        "resettokens-token-label": "$1 (aktuální hodnota: $2)",
        "resettokens-watchlist-token": "Klíč k webovému kanálu (Atom/RSS) [[Special:Watchlist|změn sledovaných stránek]]",
        "yourdiff": "Rozdíly",
        "copyrightwarning": "Všechny příspěvky do {{grammar:2sg|{{SITENAME}}}} jsou zveřejňovány podle $2 (podrobnosti najdete na $1).\nPokud si nepřejete, aby váš text byl nemilosrdně upravován a volně šířen, pak ho do {{grammar:2sg|{{SITENAME}}}} neukládejte.<br />\nUložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>).\n'''NEVKLÁDEJTE DÍLA CHRÁNĚNÁ AUTORSKÝM PRÁVEM BEZ DOVOLENÍ!'''",
        "copyrightwarning2": "Uvědomte si, že všechny příspěvky do {{grammar:2sg|{{SITENAME}}}} mohou být ostatními uživateli upraveny, pozměněny či odstraněny. Pokud si nepřejete, aby váš text byl nemilosrdně upravován, pak ho do {{grammar:2sg|{{SITENAME}}}} neukládejte.<br />\nUložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>); podrobnosti najdete na $1. '''Nekopírujte díla chráněná autorským právem bez dovolení!'''",
+       "editpage-cannot-use-custom-model": "Model obsahu této stránky nelze změnit.",
        "longpageerror": "'''Chyba: Pokoušíte se uložit text o velikosti {{PLURAL:$1|$1 KiB}}, přičemž dovolené maximum je {{PLURAL:$2|$2 KiB}}.'''\nVaše změna nemůže být uložena.",
        "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:",
        "badsig": "Chybný podpis, zkontrolujte syntaxi HTML.",
        "badsiglength": "Váš podpis je příliš dlouhý. Musí být kratší než $1 {{PLURAL:$1|znak|znaky|znaků}}.",
        "yourgender": "Jak chcete být popisován(a)?",
-       "gender-unknown": "Nechci sdělit.",
+       "gender-unknown": "Software nebude při zmínkách o vás používat konkrétní rod",
        "gender-male": "On upravil článek.",
        "gender-female": "Ona upravila článek.",
        "prefs-help-gender": "Toto nastavení je nepovinné.\nSoftware ho používá pro volbu gramatického rodu, když vás oslovuje nebo vás zmiňuje.\nTato informace je veřejná.",
        "randomincategory-nopages": "V [[:Category:$1|kategorii $1]] žádné stránky nejsou.",
        "randomincategory-category": "Kategorie:",
        "randomincategory-legend": "Náhodná stránka v kategorii",
+       "randomincategory-submit": "Jít na",
        "randomredirect": "Náhodné přesměrování",
        "randomredirect-nopages": "Ve jmenném prostoru „$1“ nejsou žádná přesměrování.",
        "statistics": "Statistika",
        "nmembers": "$1 {{PLURAL:$1|položka|položky|položek}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|položka|položky|položek}}",
        "nrevisions": "$1 {{PLURAL:$1|revize|revize|revizí}}",
-       "nviews": "$1 {{PLURAL:$1|návšteva|návštevy|návštev}}",
        "nimagelinks": "Použit na $1 {{PLURAL:$1|stránce|stránkách}}",
        "ntransclusions": "použita na $1 {{PLURAL:$1|stránce|stránkách}}",
        "specialpage-empty": "Tomuto požadavku neodpovídají žádné záznamy.",
        "rollback-success": "Editace uživatele $1 byly vráceny na poslední verzi od uživatele $2.",
        "sessionfailure-title": "Chyba sezení",
        "sessionfailure": "Zřejmě je nějaký problém s vaším přihlášením;\nvámi požadovaná činnost byla stornována jako prevence před neoprávněným přístupem.\nStiskněte tlačítko „zpět“, obnovte stránku, ze které jste přišli, a zkuste činnost znovu.",
+       "changecontentmodel": "Změna modelu obsahu stránky",
+       "changecontentmodel-legend": "Změnit model obsahu",
+       "changecontentmodel-title-label": "Název stránky",
+       "changecontentmodel-model-label": "Nový model obsahu",
+       "changecontentmodel-reason-label": "Důvod:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|změnil|změnila}} obsah modelu stránky $3 z „$4“ na „$5“",
+       "logentry-contentmodel-change-revertlink": "vrátit",
+       "logentry-contentmodel-change-revert": "vrácení zpět",
        "protectlogpage": "Kniha zamčení",
        "protectlogtext": "Níže je uveden seznam všech změn zámků stránek.\nMůžete si prohlédnout též [[Special:ProtectedPages|seznam aktuálně platných zámků]].",
        "protectedarticle": "zamyká „[[$1]]“",
        "tooltip-pt-logout": "Odhlásit se",
        "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, není to však povinné",
        "tooltip-ca-talk": "Diskuse ke stránce",
-       "tooltip-ca-edit": "Tuto stránku můžete editovat. Prosíme použijte tlačítko Ukázat náhled před uložením.",
+       "tooltip-ca-edit": "Editovat tuto stránku",
        "tooltip-ca-addsection": "Začít novou sekci",
        "tooltip-ca-viewsource": "Tato stránka je zamčena. Můžete si prohlédnout její zdrojový kód.",
        "tooltip-ca-history": "Starší verze této stránky.",
        "pageinfo-robot-index": "Dovoleno",
        "pageinfo-robot-noindex": "Zakázáno",
        "pageinfo-watchers": "Počet sledujících",
+       "pageinfo-visiting-watchers": "Počet sledujících uživatelů, kteří si prohlíželi nedávné změny",
        "pageinfo-few-watchers": "Méně než $1 {{PLURAL:$1|sledující|sledující|sledujících}}",
+       "pageinfo-few-visiting-watchers": "Není jisté, zda existují sledující uživatelé, kteří si prohlížejí nedávné změny",
        "pageinfo-redirects-name": "Počet přesměrování na tuto stránku",
        "pageinfo-subpages-name": "Podstránky této stránky",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|přesměrování}}; $3 {{PLURAL:$3|nepřesměrování}})",
        "deletedwhileediting": "'''Upozornění''': V průběhu vaší editace byla tato stránka smazána!",
        "confirmrecreate": "Uživatel [[User:$1|$1]] ([[User talk:$1|diskuse]]) tuto stránku smazal poté, co jste začali editovat, s odůvodněním:\n: „$2“\nOpravdu si přejete znovu tuto stránku založit?",
        "confirmrecreate-noreason": "{{gender:$1|Uživatel|Uživatelka|Uživatel}} [[User:$1|$1]] ([[User talk:$1|diskuse]]) {{gender:$1|smazal|smazala|smazal}} tuto stránku poté, co jste {{gender:|začal|začala|začali}} s editací. Potvrďte, zda chcete stránku skutečně znovu založit.",
-       "recreate": "Znovu založit",
+       "recreate": "Založit znovu",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Aktualizovat cachovanou verzi této stránky?",
        "confirm-purge-bottom": "Aktualizace stránky vymaže cache a vynutí zobrazení nejaktuálnější verze.",
        "version-libraries": "Nainstalované knihovny",
        "version-libraries-library": "Knihovna",
        "version-libraries-version": "Verze",
+       "version-libraries-license": "Licence",
+       "version-libraries-description": "Popis",
+       "version-libraries-authors": "Autoři",
        "redirect": "Přesměrování podle souboru, uživatele, stránky nebo ID revize",
        "redirect-legend": "Přesměrování na soubor či stránku",
        "redirect-summary": "Tato speciální stránka přesměrovává na soubor (podle názvu), stránku (podle ID stránky nebo revize) nebo uživatele (podle číselného uživatelského ID). Použití: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] nebo [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmerština",
        "special-characters-title-endash": "krátká pomlčka",
        "special-characters-title-emdash": "dlouhá pomlčka",
-       "special-characters-title-minus": "znaménko minus"
+       "special-characters-title-minus": "znaménko minus",
+       "mw-widgets-titleinput-description-new-page": "stránka zatím neexistuje",
+       "mw-widgets-titleinput-description-redirect": "přesměrování na $1"
 }
index 037455f..8f3d87b 100644 (file)
        "passwordreset-domain": "Домен:",
        "changeemail-none": "(çук)",
        "resettokens": "Токенĕсене пăрах",
-       "resettokens-legend": "Токенĕсене пăрах",
        "bold_sample": "Çурмахулăм текст",
        "bold_tip": "Çурмахулăм текст",
        "italic_sample": "Тайлăк текст",
        "ncategories": "$1 {{PLURAL:$1|категори|категорисем}}",
        "nlinks": "$1 {{PLURAL:$1|1=каçă|каçă}}",
        "nmembers": "$1 {{PLURAL:$1|тĕл|тĕлте}}",
-       "nviews": "$1 {{PLURAL:$1|пăхни|пăхнисем}}",
        "specialpage-empty": "Ку страница пушă",
        "lonelypages": "Тăлăх страницăсем",
        "uncategorizedpages": "Каталогсăр страницăсем",
        "ipblocklist-empty": "Чару списокĕ пушă.",
        "blocklink": "ĕçлеме чар",
        "unblocklink": "блокировкăран кăлар",
-       "contribslink": "ӳсĕмĕ",
+       "contribslink": "хушни",
        "blocklogpage": "Ĕçлеме чарнисен журналĕ",
        "unblocklogentry": "«$1» блокировкăран кăларнă",
        "block-log-flags-anononly": "анонимлă хутшăнакансем кăна",
index 0611617..0ee2be7 100644 (file)
        "passwordreset": "Ailosod cyfrinair",
        "passwordreset-text-one": "Cwblhewch y ffurflen hon er mwyn ailosod eich cyfrinair.",
        "passwordreset-text-many": "{{PLURAL:$1|Llanwch un o'r blychau er mwyn derbyn cyfrinair dros dro mewn ebost.}}",
-       "passwordreset-legend": "Ailosod y cyfrinair",
        "passwordreset-disabled": "Analluogwyd ailosod cyfrineiriau ar y wici hwn.",
        "passwordreset-emaildisabled": "Analluogwyd offer e-bost ar y wici hwn.",
        "passwordreset-username": "Eich enw defnyddiwr:",
        "resettokens": "Ailosod tocynnau",
        "resettokens-text": "Gallwch ailosod tocynnau sy'n galluogi mynediad at rai manylion preifat sydd ynghlwm wrth y cyfrif yma.\n\nDylech wneud hyn os wnaethoch rannu'r manylion hyn gyda rhywun ar ddamwain neu os oes problem wedi codi gyda diogelwch eich cyfrif.",
        "resettokens-no-tokens": "Nid oes unrhyw docynnau i'w hailosod.",
-       "resettokens-legend": "Ailosod tocynnau",
        "resettokens-tokens": "Tocynnau:",
        "resettokens-token-label": "$1 (gwerth presennol: $2)",
        "resettokens-watchlist-token": "Tocyn i borthiant gwe (Atom/RSS) y [[Special:Watchlist|newidiadau i'r tudalennau ar eich rhestr wylio]]",
        "mimesearch": "Chwiliad MIME",
        "mimesearch-summary": "Fe allwch ddefnyddio'r dudalen hon i hidlo'r ffeiliau yn ôl eu math MIME.\nMewnbwn: contenttype/subtype neu contenttype/*, e.e. <code>image/jpeg</code>.",
        "mimetype": "Ffurf MIME:",
-       "download": "islwytho",
+       "download": "lawrlwytho",
        "unwatchedpages": "Tudalennau sydd â neb yn eu gwylio",
        "listredirects": "Rhestru'r ail-gyfeiriadau",
        "listduplicatedfiles": "Rhestr y ffeiliau sydd wedi eu dyblygu",
        "nmembers": "$1 {{PLURAL:$1|aelod|aelod|aelod|aelod|aelod|aelod}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|aelodau|aelod|aelodau}}",
        "nrevisions": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}",
-       "nviews": "$1 {{PLURAL:$1|ymweliad|ymweliad|ymweliad|ymweliad|ymweliad|ymweliad}}",
        "nimagelinks": "Defnyddir ar {{PLURAL:$1||$1 dudalen|$1 dudalen|$1 tudalen|$1 thudalen|$1 tudalen}}",
        "ntransclusions": "defnyddir ar {{PLURAL:$1||$1 dudalen|$1 dudalen|$1 tudalen|$1 thudalen|$1 tudalen}}",
        "specialpage-empty": "Ni chafwyd canlyniadau i'w hadrodd.",
index 60cdb61..eb9d933 100644 (file)
        "passwordreset": "Passwort zurücksetzen",
        "passwordreset-text-one": "Fülle dieses Formular aus, um dein Passwort zurückzusetzen.",
        "passwordreset-text-many": "{{PLURAL:$1|Füll eines der Felder aus, um ein temporäres Passwort per E-Mail zugesandt zu bekommen.}}",
-       "passwordreset-legend": "Passwort zurücksetzen",
        "passwordreset-disabled": "Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.",
        "passwordreset-emaildisabled": "Die E-Mail-Funktionen wurden auf diesem Wiki deaktiviert.",
        "passwordreset-username": "Benutzername:",
        "resettokens": "Tokens zurücksetzen",
        "resettokens-text": "Du kannst Tokens zurücksetzen, welche dir den Zugriff auf bestimmte private Daten ermöglichen, die mit deinem Benutzerkonto hier verknüpft sind.\n\nDu solltest dies nur machen, wenn du die Tokens versehentlich mit jemandem geteilt hast oder dein Konto gefährdet ist.",
        "resettokens-no-tokens": "Es gibt keine Tokens zum Zurücksetzen.",
-       "resettokens-legend": "Tokens zurücksetzen",
        "resettokens-tokens": "Tokens:",
        "resettokens-token-label": "$1 (aktueller Wert: $2)",
        "resettokens-watchlist-token": "Token für den Webfeed (Atom/RSS) der [[Special:Watchlist|Änderungen an Seiten auf deiner Beobachtungsliste]]",
        "resettokens-done": "Tokens zurückgesetzt.",
-       "resettokens-resetbutton": "Ausgewählte Token ändern",
+       "resettokens-resetbutton": "Ausgewählte Token zurücksetzen",
        "bold_sample": "Fetter Text",
        "bold_tip": "Fetter Text",
        "italic_sample": "Kursiver Text",
        "yourdiff": "Unterschiede",
        "copyrightwarning": "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nDu gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.</i>",
        "copyrightwarning2": "Bitte beachte, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.\nReiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränkung geändert werden können.\n\nDu bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast\n(weitere Einzelheiten unter $1). '''ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
+       "editpage-cannot-use-custom-model": "Das Inhaltsmodell dieser Seite kann nicht geändert werden.",
        "longpageerror": "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''\nEr kann nicht gespeichert werden.",
        "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:",
        "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": "Ich möchte hierzu keine Angabe machen",
+       "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.",
        "uploaded-script-svg": "Skriptelement „$1“ in der hochgeladenen SVG-Datei gefunden.",
        "uploaded-hostile-svg": "Unsicheres CSS im Styleelement der hochgeladenen SVG-Datei gefunden.",
        "uploaded-event-handler-on-svg": "Das Festlegen von Ereignis-Handler-Attributen <code>$1=\"$2\"</code> ist in SVG-Dateien nicht erlaubt.",
-       "uploaded-href-attribute-svg": "Href-Attribute <code>&lt;$1 $2=\"$3\"&gt;</code> mit nicht-lokalem Ziel (z.&nbsp;B. http://, javascript: etc.) sind in SVG-Dateien nicht erlaubt.",
+       "uploaded-href-attribute-svg": "href-Attribute <code>&lt;$1 $2=\"$3\"&gt;</code> mit nicht-lokalem Ziel (z.&nbsp;B. http://, javascript: etc.) sind in SVG-Dateien nicht erlaubt.",
        "uploaded-href-unsafe-target-svg": "href zu unsicherem Ziel <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei gefunden.",
        "uploaded-animate-svg": "Tag „animate“ gefunden, das href mithilfe des Attributs „from“ <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei ändern könnte.",
        "uploaded-setting-event-handler-svg": "Das Festlegen von Ereignis-Handler-Attributen ist gesperrt. <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei gefunden.",
        "randompage-nopages": "Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: „$1“",
        "randomincategory": "Zufällige Seite einer Kategorie",
        "randomincategory-invalidcategory": "„$1“ ist kein gültiger Kategorienname.",
-       "randomincategory-nopages": "Es gibt keine Seiten in [[:Category:$1]].",
+       "randomincategory-nopages": "Es gibt keine Seiten in der Kategorie [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorie:",
        "randomincategory-legend": "Zufällige Seite in Kategorie",
+       "randomincategory-submit": "Los",
        "randomredirect": "Zufällige Weiterleitung",
        "randomredirect-nopages": "Im Namensraum „$1“ sind keine Weiterleitungen vorhanden.",
        "statistics": "Statistik",
        "nmembers": "{{PLURAL:$1|1 Eintrag|$1 Einträge}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|Mitglied|Mitglieder}}",
        "nrevisions": "{{PLURAL:$1|1 Bearbeitung|$1 Bearbeitungen}}",
-       "nviews": "{{PLURAL:$1|1 Abfrage|$1 Abfragen}}",
        "nimagelinks": "Verwendet auf {{PLURAL:$1|einer Seite|$1 Seiten}}",
        "ntransclusions": "verwendet auf {{PLURAL:$1|einer Seite|$1 Seiten}}",
        "specialpage-empty": "Es sind aktuell keine zutreffenden Einträge vorhanden.",
        "rollback-success": "Die Änderungen von $1 wurden rückgängig gemacht und die letzte Version von $2 wurde wiederhergestellt.",
        "sessionfailure-title": "Sitzungsfehler",
        "sessionfailure": "Es gab ein Problem bei der Übertragung deiner Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern.\nBitte gehe zurück zur vorherigen Seite, lade sie erneut und versuche, den Vorgang erneut auszuführen.",
+       "changecontentmodel": "Inhaltsmodell einer Seite ändern",
+       "changecontentmodel-legend": "Inhaltsmodell ändern",
+       "changecontentmodel-title-label": "Seitentitel",
+       "changecontentmodel-model-label": "Neues Inhaltsmodell",
+       "changecontentmodel-reason-label": "Grund:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|änderte}} das Inhaltsmodell der Seite $3 von „$4“ nach „$5“",
+       "logentry-contentmodel-change-revertlink": "zurücksetzen",
+       "logentry-contentmodel-change-revert": "zurücksetzen",
        "protectlogpage": "Seitenschutz-Logbuch",
        "protectlogtext": "Dies ist das Seitenschutz-Logbuch.\nSiehe die [[Special:ProtectedPages|Liste der geschützten Seiten]] für alle aktuell geschützten Seiten.",
        "protectedarticle": "schützte „[[$1]]“",
        "protect-otherreason-op": "Anderer Grund",
        "protect-dropdown": "* Allgemeine Schutzgründe\n** Edit-War\n** Wiederkehrender Vandalismus\n** Wiederholtes Einstellen von Werbung\n** Häufig eingebundene Vorlage\n** Seite mit hoher Besucherzahl",
        "protect-edit-reasonlist": "Schutzgründe bearbeiten",
-       "protect-expiry-options": "1 Stunde:1 hour,1 Tag:1 day,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year,Unbeschränkt:infinite",
+       "protect-expiry-options": "1 Stunde:1 hour,1 Tag:1 day,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monaten:3 months,6 Monaten:6 months,1 Jahr:1 year,unbeschränkt:infinite",
        "restriction-type": "Schutzstatus:",
        "restriction-level": "Schutzhöhe:",
        "minimum-size": "Mindestgröße",
        "ipbenableautoblock": "Sperre die aktuell von diesem Benutzer genutzte IP-Adresse sowie automatisch alle folgenden, von denen aus er Bearbeitungen oder das Anlegen von Benutzerkonten versucht",
        "ipbsubmit": "IP-Adresse/Benutzer sperren",
        "ipbother": "Andere Dauer (englisch):",
-       "ipboptions": "2 Stunden:2 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year,unbeschränkt:infinite",
+       "ipboptions": "2 Stunden:2 hours,1 Tag:1 day,3 Tagen:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monaten:3 months,6 Monaten:6 months,1 Jahr:1 year,unbeschränkt:infinite",
        "ipbhidename": "Benutzername in Bearbeitungen und Listen verstecken",
        "ipbwatchuser": "Benutzer(diskussions)seite beobachten",
        "ipb-disableusertalk": "Diesen Benutzer daran hindern, seine eigene Diskussionsseite zu bearbeiten, solange er gesperrt ist",
        "ipblocklist-submit": "Suchen",
        "ipblocklist-localblock": "Lokale Sperre",
        "ipblocklist-otherblocks": "Andere {{PLURAL:$1|Sperre|Sperren}}",
-       "infiniteblock": "unbegrenzt",
+       "infiniteblock": "unbeschränkt",
        "expiringblock": "endet am $1 um $2 Uhr",
        "anononlyblock": "nur Anonyme",
        "noautoblockblock": "Autoblock deaktiviert",
        "tooltip-pt-logout": "Abmelden",
        "tooltip-pt-createaccount": "Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich.",
        "tooltip-ca-talk": "Diskussion zum Seiteninhalt",
-       "tooltip-ca-edit": "Du kannst diese Seite bearbeiten. Bitte nutze die Vorschaufunktion vor dem Speichern.",
+       "tooltip-ca-edit": "Diese Seite bearbeiten",
        "tooltip-ca-addsection": "Neuen Abschnitt beginnen",
        "tooltip-ca-viewsource": "Diese Seite ist geschützt. Ihr Quelltext kann dennoch angesehen und kopiert werden.",
        "tooltip-ca-history": "Frühere Versionen dieser Seite",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nicht erlaubt",
        "pageinfo-watchers": "Anzahl der Beobachter dieser Seite",
+       "pageinfo-visiting-watchers": "Anzahl der Seitenbeobachter, die die letzten Bearbeitungen besucht haben",
        "pageinfo-few-watchers": "Weniger als {{PLURAL:$1|ein|$1}} Beobachter",
+       "pageinfo-few-visiting-watchers": "Es könnte einen beobachtenden Benutzer geben oder nicht, der die letzten Bearbeitungen besucht hat",
        "pageinfo-redirects-name": "Anzahl der Weiterleitungen zu dieser Seite",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Unterseiten dieser Seite",
        "deletedwhileediting": "Achtung: Diese Seite wurde gelöscht, nachdem du angefangen hast, sie zu bearbeiten!\nIm [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] findest du den Grund für die Löschung. Wenn du die Seite speicherst, wird sie neu angelegt.",
        "confirmrecreate": "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem du angefangen hast, sie zu bearbeiten. Die Begründung lautete:\n:''$2''\nBitte bestätige, dass du diese Seite wirklich neu erstellen möchten.",
        "confirmrecreate-noreason": "Benutzer [[User:$1|$1 ]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem du mit der Bearbeitung begonnen hast. Bitte bestätige, dass du die Seite wirklich erneut erstellen möchtest.",
-       "recreate": "Erneut anlegen",
+       "recreate": "Neu erstellen",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Diese Seite aus dem Server-Cache löschen?",
        "confirm-purge-bottom": "Leert den Cache einer Seite und erzwingt die Anzeige der aktuellen Version.",
        "version-libraries": "Installierte Bibliotheken",
        "version-libraries-library": "Bibliothek",
        "version-libraries-version": "Version",
+       "version-libraries-license": "Lizenz",
+       "version-libraries-description": "Beschreibung",
+       "version-libraries-authors": "Autoren",
        "redirect": "Weiterleitung auf Benutzerseite, Seite, Seitenversion oder Datei",
        "redirect-legend": "Weiterleitung auf eine Benutzerseite, Seite, Seitenversion oder Datei",
        "redirect-summary": "Diese Spezialseite leitet auf eine Benutzerseite (numerische Benutzerkennung angegeben), Seite (Seitenkennung angegeben), Seitenversion (Versionskennung angegeben) oder Datei (Dateiname angegeben) weiter. Benutzung: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] oder [[{{#Special:Redirect}}/file/Example.jpg]].",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "Halbgeviertstrich",
        "special-characters-title-emdash": "Geviertstrich",
-       "special-characters-title-minus": "Minus"
+       "special-characters-title-minus": "Minus",
+       "mw-widgets-titleinput-description-new-page": "Seite ist noch nicht vorhanden",
+       "mw-widgets-titleinput-description-redirect": "Weiterleitung nach $1"
 }
index 4939677..e9fca76 100644 (file)
@@ -8,29 +8,29 @@
                ]
        },
        "tog-underline": "सम्बन्ध निम्न रेखाङ्कन:",
-       "tog-hideminor": "à¤\90à¤\88लका मामूली सम्पादनलाई लुकाउन्या",
+       "tog-hideminor": "à¤\85हिलका मामूली सम्पादनलाई लुकाउन्या",
        "tog-hidepatrolled": "गस्ती(patrolled)सम्पादनलाई लुकाउन्या",
        "tog-newpageshidepatrolled": "गस्ती गरिया पानानलाई नयाँ पाना  सूचीबठेई लुकाउन्या",
        "tog-extendwatchlist": "निगरानी सूचीलाई सबै परिवर्तन धेकुन्या गरी बढुन्या , ऐईलका बाहेक",
-       "tog-usenewrc": "पानाà¤\95ा à¤\90à¤\88लà¤\95ा  à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤° à¤\85वलà¥\8bà¤\95न à¤¸à¥\82à¤\9aà¥\80à¤\95ा à¤\86धारमà¥\80 à¤¸à¤¾à¤®à¥\82हिà¤\95 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81",
-       "tog-numberheadings": "शà¥\80रà¥\8dषà¤\95हरà¥\81लाई स्वत:अङ्कित गर",
+       "tog-usenewrc": "पानाà¤\95ा à¤\85हिलà¤\95ा  à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤° à¤\85वलà¥\8bà¤\95न à¤¸à¥\82à¤\9aà¥\80à¤\95ा à¤\86धारमà¥\80 à¤¸à¤¾à¤®à¥\82हिà¤\95 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82",
+       "tog-numberheadings": "शà¥\80रà¥\8dषà¤\95हरà¥\82लाई स्वत:अङ्कित गर",
        "tog-showtoolbar": "सम्पादन औजारबट्टा धेकौन्या",
        "tog-editondblclick": "दोहोरो क्लिकमा पाना सम्पादन गर्ने",
        "tog-editsectiononrightclick": "शीर्षकमा दाहिने क्लिकद्वारा खण्ड सम्पादन सक्षम पारन्या",
        "tog-watchcreations": "मेरा ध्यान सूचीमा मुइले सृजना गरयाका पाना र अपलोड जोड्न्या",
        "tog-watchdefault": "मुइले सम्पादन गरयाको पाना र फाइल ध्यान सूचीमाई थप्दया",
-       "tog-watchmoves": "मà¥\81à¤\87लà¥\87 à¤¸à¤¾à¤°à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81 à¤° à¤«à¤¾à¤\87लहरà¥\82लाà¤\88 à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤¥à¤ªà¥\8dदया",
-       "tog-watchdeletion": "मà¥\81à¤\87लà¥\87 à¤¹à¤\9fाà¤\8fà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81 à¤° à¤«à¤¾à¤\87लहरà¥\82लाà¤\88 à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤¥à¤ªà¥\8dदया",
-       "tog-watchrollback": "मà¥\81à¤\87लà¥\87 à¤²à¥\87à¤\96à¥\8dयाà¤\95ा à¤ªà¤¾à¤¨à¤¾ à¤° à¤«à¤¾à¤\87ल à¤¹à¥\87रिनà¥\8dया à¤¸à¥\81à¤\9aिमà¥\80 à¤¥à¤ª्या ।",
-       "tog-minordefault": "सबà¥\88 à¤¸à¤®à¥\8dपादनहरà¥\81लाà¤\88 à¤ªà¤¹à¤¿à¤²à¥\8dलà¤\88निर्धारित रुपमी सामान्य चिनो लगाउन्या",
+       "tog-watchmoves": "मà¥\81à¤\87लà¥\87 à¤¸à¤¾à¤°à¥\8dया à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82 à¤° à¤«à¤¾à¤\87लहरà¥\82लाà¤\88 à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤¥à¤ªà¥\8dदà¥\8dया",
+       "tog-watchdeletion": "मà¥\81à¤\87लà¥\87 à¤¹à¤\9fायाà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82 à¤° à¤\9aितà¥\8dरहरà¥\82लाà¤\88 à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤¥à¤ªà¥\8dदà¥\8dया",
+       "tog-watchrollback": "मà¥\81à¤\87लà¥\87 à¤°à¥\8bलबà¥\8dयाà¤\95 à¤\97रà¥\8dयाà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82 à¤®à¥\87रà¥\8b à¤§à¥\8dयानसà¥\82à¤\9aà¥\80मà¥\80 à¤¥à¤ªà¥\8dद्या ।",
+       "tog-minordefault": "सबà¥\88 à¤¸à¤®à¥\8dपादनहरà¥\82लाà¤\88 à¤ªà¤¹à¤¿à¤²à¥\8dलà¤\88 निर्धारित रुपमी सामान्य चिनो लगाउन्या",
        "tog-previewontop": "सम्पादन बाकस अगि पहिलाकोरूप देखाउन्या",
-       "tog-previewonfirst": "नà¥\87पालà¥\80",
-       "tog-enotifwatchlistpages": "मà¥\87रा à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤°à¤¹à¥\87याà¤\95ा à¤ªà¤¾à¤¨à¤¾ à¤\85थवा à¤\9aितà¥\8dर à¤¬à¤¦à¤²à¤¿à¤\8fà¤\95ा मुलाई ई-मेल गरियोस्",
-       "tog-enotifusertalkpages": "ramesh.bohara25@gmail.com",
-       "tog-enotifminoredits": "पानाहरà¥\81 र फाइलहरूमी सामान्य सम्पादन भयालै मुइलाई ई-मेल गरियोस्",
-       "tog-enotifrevealaddr": "à¤\9cानà¤\95ारà¥\80 à¤\87-मà¥\87लहरà¥\81मी मेरो इ-मेल खुलाउन्या",
+       "tog-previewonfirst": "पà¥\88लà¥\8dलà¥\80à¤\95à¥\8b à¤¸à¤®à¥\8dपादनमà¥\80 à¤\9dलà¤\95 à¤§à¥\87à¤\95ाà¤\89नà¥\8dया",
+       "tog-enotifwatchlistpages": "मà¥\87रा à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤°à¤¹à¥\8dयाà¤\95ा à¤ªà¤¾à¤¨à¤¾ à¤\85थवा à¤\9aितà¥\8dर à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¤¯ा मुलाई ई-मेल गरियोस्",
+       "tog-enotifusertalkpages": "मेरो कुरडी पानामी परिवर्तन भया मलाई इमेल पठाउन्या",
+       "tog-enotifminoredits": "पानाहरà¥\82 र फाइलहरूमी सामान्य सम्पादन भयालै मुइलाई ई-मेल गरियोस्",
+       "tog-enotifrevealaddr": "à¤\9cानà¤\95ारà¥\80 à¤\87-मà¥\87लहरà¥\82मी मेरो इ-मेल खुलाउन्या",
        "tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरूको संख्या धेखाउन्या",
-       "tog-oldsig": "यà¥\88लको हस्ताक्षर:",
+       "tog-oldsig": "à¤\85हिलको हस्ताक्षर:",
        "tog-fancysig": "मेरा दस्तखतलाई विकि पाठको रुपमी लिने (स्वत लिङ्क बिना)",
        "tog-uselivepreview": "प्रत्यक्ष पैल्लीकोरुप प्रयोग गर",
        "tog-forceeditsummary": "खाली सम्पादन शीर्षक प्रविष्टि गरेपछा मलाई सोधन्या",
@@ -64,7 +64,7 @@
        "sun": "आइत",
        "mon": "सौउ",
        "tue": "मांगल",
-       "wed": "वुध",
+       "wed": "बुध",
        "thu": "बिपै",
        "fri": "शुक",
        "sat": "छन्चर",
        "december-date": "डिसेम्बर $1",
        "pagecategories": "{{PLURAL:$1|श्रेणी|श्रेणीहरू}}",
        "category_header": "\"$1\" श्रेणीमी भया लेखहरू",
-       "subcategories": "à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81",
+       "subcategories": "à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82",
        "category-media-header": "\"$1\" श्रेणीमी भया लेखहरू",
-       "category-empty": "''यà¥\87 श्रेणीमी हाल कोइलै पाना या मिडिया रया नाइँथिन ।''",
+       "category-empty": "''यà¥\88 श्रेणीमी हाल कोइलै पाना या मिडिया रया नाइँथिन ।''",
        "hidden-categories": "{{PLURAL:$1|लुकाया श्रेणी|लुकायाका श्रेणीहरू}}",
        "hidden-category-category": "लुकाइया श्रेणीहरू",
        "category-subcat-count": "{{PLURAL:$2|यै श्रेणीमी निम्न उपश्रेणीहरू मात्र रया छन्।|यै श्रेणीको निम्न {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणीहरू}},  $2 कुल मध्ये श्रेणीहरू रया छन् ।}}",
-       "category-subcat-count-limited": "यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81}} à¤\9b।",
-       "category-article-count": "{{PLURAL:$2|यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤ªà¤¾à¤¨à¥\8b à¤°à¤¯à¤¾ à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 {{PLURAL:$1|पानà¥\8b|$1 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81}} रहेका छन् । }}",
+       "category-subcat-count-limited": "यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82}} à¤\9bनà¥\8d ।",
+       "category-article-count": "{{PLURAL:$2|यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤ªà¤¾à¤¨à¥\8b à¤°à¤¯à¤¾ à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 {{PLURAL:$1|पानà¥\8b|$1 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82}} रहेका छन् । }}",
        "category-article-count-limited": "निम्न {{PLURAL:$1|पानो|$1 पानाहरू}} ये श्रेणीमी रया छ ।",
-       "category-file-count": "{{PLURAL:$2|यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤ªà¤¾à¤¨à¥\8b à¤°à¤¯à¤¾ à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 {{PLURAL:$1|पानà¥\8b|$1 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81}} रहेका छन् । }}",
-       "category-file-count-limited": "निमà¥\8dन {{PLURAL:$1|पानà¥\8b|$1 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82}} à¤¯à¥\87 श्रेणीमी रया छ ।",
+       "category-file-count": "{{PLURAL:$2|यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤«à¤¾à¤\87ल à¤°à¤¯à¤¾ à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} रहेका छन् । }}",
+       "category-file-count-limited": "निमà¥\8dन {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} à¤¯à¥\88 श्रेणीमी रया छ ।",
        "listingcontinuesabbrev": "निरन्तरता...",
-       "index-category": "à¤\95à¥\8dरमाà¤\99à¥\8dà¤\95ित à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81",
-       "noindex-category": "à¤\95à¥\8dरमाà¤\99à¥\8dà¤\95न à¤¨à¤\97रयाà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81",
+       "index-category": "à¤\95à¥\8dरमाà¤\99à¥\8dà¤\95ित à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82",
+       "noindex-category": "à¤\95à¥\8dरमाà¤\99à¥\8dà¤\95न à¤¨à¤\97रà¥\80याà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82",
        "broken-file-category": "टुटेको फाइल लिङ्कहरूसितको पाना",
        "about": "बारेमी",
        "article": "सामाग्री पानो",
-       "newwindow": "(नà¥\8cलà¥\8b à¤µà¤¿à¤¨à¥\8dडà¥\8bमा à¤\96à¥\81ल्छ)",
+       "newwindow": "(नà¥\8cलà¥\8b à¤µà¤¿à¤¨à¥\8dडà¥\8bमà¥\80 à¤\96à¥\81लन्छ)",
        "cancel": "रद्द",
        "moredotdotdot": "झिक्कु...",
        "morenotlisted": "यो सूची पूरा नाइँ हो ।",
        "mypage": "पानो",
        "mytalk": "मेरी कुरडी",
-       "anontalk": "यà¥\87 IP à¤\95ा à¤µारेमी कुरडी गर",
+       "anontalk": "यà¥\88 à¤\86à¤\87. à¤ªà¥\80. à¤\95ा à¤¬ारेमी कुरडी गर",
        "navigation": "खोज",
        "and": "&#32;र",
        "qbfind": "तम जाण",
        "qbedit": "सम्पादन",
        "qbpageoptions": "ये पानो",
        "qbmyoptions": "मेरो पानो",
-       "faq": "भà¥\8cत à¤¸à¥\8bधिà¤\8fà¤\95ा à¤ªà¥\8dरशà¥\8dनहरà¥\81",
+       "faq": "भà¥\8cत à¤¸à¥\8bधिनà¥\8dया à¤ªà¥\8dरशà¥\8dनहरà¥\82",
        "faqpage": "Project:भौत सोधिएका प्रश्नहरु",
-       "actions": "à¤\95ारà¥\8dयहरà¥\81",
+       "actions": "à¤\95ारà¥\8dयहरà¥\82",
        "namespaces": "नेमस्पेस",
-       "variants": "बहà¥\81रà¥\81पहरà¥\81",
+       "variants": "बहà¥\81रà¥\81पहरà¥\82",
        "navigation-heading": "नेविगेशन मेनू",
-       "errorpagetitle": "à¤\97लत",
+       "errorpagetitle": "तà¥\8dरà¥\81à¤\9fà¥\80",
        "returnto": "$1 मी फर्क।",
        "tagline": "{{SITENAME}}बाट",
        "help": "सहायता",
        "delete": "मेट्न्या",
        "deletethispage": "पाना मेट्न्या",
        "undeletethispage": "मेट्याको पाना फर्काउने",
-       "undelete_short": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा  à¤®à¥\87à¤\9fियाà¤\95à¥\8b à¤¸à¤®à¥\8dपादन|$1 à¤®à¥\87à¤\9fियाà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81}} फर्काउन्या",
+       "undelete_short": "{{PLURAL:$1|à¤\8fà¤\95  à¤®à¥\87à¤\9fà¥\8dयाà¤\95à¥\8b à¤¸à¤®à¥\8dपादन|$1 à¤®à¥\87à¤\9fà¥\8dयाà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82}} फर्काउन्या",
        "viewdeleted_short": "{{PLURAL:$1|मेटियाको सम्पादन |$1 मेटियाका सम्पादनहरू}}",
        "protect": "सुरक्षित राख",
-       "protect_change": "बदलन्या",
+       "protect_change": "बदलà¥\8dनà¥\8dया",
        "protectthispage": "यै पानाकी सुरक्षित गर",
        "unprotect": "सुरक्षा परिवर्तन गर",
        "unprotectthispage": "यै पानाको सुरक्षा परिवर्तन गर",
        "newpage": "नयाँ पाना",
-       "talkpage": "यà¥\87 पानाका बारेमी छलफल गर",
+       "talkpage": "यà¥\88 पानाका बारेमी छलफल गर",
        "talkpagelinktext": "कुरडी",
        "specialpage": "खास पानो",
-       "personaltools": "व्यक्तिगत औजार",
+       "personaltools": "व्यक्तिगत औजारहरू",
        "articlepage": "कन्टेन्ट पानो हेर",
        "talk": "कुरडी कानी",
        "views": "अवलोकन गर",
        "viewhelppage": "सहायता पानो हेर्ने",
        "categorypage": "श्रेणी पानो हेर",
        "viewtalkpage": "छलफल हेर",
-       "otherlanguages": "à¤\85रà¥\81 भाषामी",
+       "otherlanguages": "à¤\85नà¥\8dय भाषामी",
        "redirectedfrom": "($1 बाट पठाइयाको)",
        "redirectpagesub": "अनुप्रेषित पानो",
        "redirectto": "पठाएको पाना:",
        "lastmodifiedat": "यै पानालाई आन्तिम पटक $2, $1 मी परिवर्तन गरिया थ्यो।",
        "viewcount": "यो पाना हेरियाको थियो {{PLURAL:$1|एकपटक|$1 पटक}}",
-       "protectedpage": "सà¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81",
+       "protectedpage": "सà¥\81रà¤\95à¥\8dषित à¤\97रà¥\8dयाà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82",
        "jumpto": "यैमी जाओ:",
-       "jumptonavigation": "à¤\96à¥\8bà¤\9c",
+       "jumptonavigation": "भà¥\8dरमण à¤\97र",
        "jumptosearch": "खोज",
-       "view-pool-error": "माफ à¤\97रया , à¤¯à¥\87 à¤¸à¤®à¤¯à¤®à¥\80 à¤¸à¤°à¥\8dभरहरà¥\81मà¥\80 à¤\95ामà¤\95à¥\8b à¤­à¤¾à¤° à¤­à¥\8cत à¤°à¤¹à¥\8dया à¤\9b।\nभà¥\8cत à¤­à¥\8cत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 à¤¯à¥\87 à¤ªà¤¾à¤¨à¤¾ à¤¹à¥\87दà¥\8dया à¤ªà¥\8dरयास à¤\97रà¥\80 à¤°à¤¹à¤¨à¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\9b।\nà¤\95à¥\83पया à¤¯à¥\8b à¤ªà¤¾à¤¨à¤¾ à¤ªà¥\81न: à¤¹à¥\87रà¥\8dनà¥\81 à¤\85à¤\97ाडि à¤\95à¥\87हà¥\80 à¤¸à¤®à¤¯ à¤ªà¤°à¥\8dà¤\96िदिनà¥\81हà¥\8bसà¥\8d ।\n\n$1",
-       "generic-pool-error": "माफ à¤\97रया , à¤¯à¥\87 à¤¸à¤®à¤¯à¤®à¥\80 à¤¸à¤°à¥\8dभरहरà¥\81मà¥\80 à¤\95ामà¤\95à¥\8b à¤­à¤¾à¤° à¤­à¥\8cत à¤°à¤¹à¥\8dया à¤\9b।\nभà¥\8cत à¤­à¥\8cत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 à¤¯à¥\87 à¤ªà¤¾à¤¨à¤¾ à¤¹à¥\87दà¥\8dया à¤ªà¥\8dरयास à¤\97रà¥\80 à¤°à¤¹à¤¨à¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\9b।\nà¤\95à¥\83पया à¤¯à¥\8b à¤ªà¤¾à¤¨à¤¾ à¤ªà¥\81न: à¤¹à¥\87रà¥\8dनà¥\81 à¤\85à¤\97ाडि à¤\95à¥\87हà¥\80 à¤¸à¤®à¤¯ à¤ªà¤°à¥\8dà¤\96िदिनà¥\81हà¥\8bसà¥\8d ।",
+       "view-pool-error": "माफ à¤\97रà¥\8dया , à¤\85हिल à¤¸à¤°à¥\8dभरहरà¥\82मà¥\80 à¤\95ामà¤\95à¥\8b à¤­à¤¾à¤° à¤­à¥\8cत à¤°à¤¹à¥\8dया à¤\9b।\nभà¥\8cत à¤­à¥\8cत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 à¤¯à¥\88 à¤ªà¤¾à¤¨à¤¾ à¤¹à¥\87दà¥\8dया à¤ªà¥\8dरयास à¤\97रà¥\80 à¤°à¤¹à¥\8dया à¤\9bनà¥\8d।\nà¤\95à¥\83पया à¤¯à¥\8b à¤ªà¤¾à¤¨à¤¾ à¤ªà¥\81न: à¤¹à¥\87रà¥\8dनà¥\81 à¤\85à¤\97ाडि à¤¥à¥\8bà¤\95à¥\8dà¤\95à¥\88 à¤ªà¤\96 ।\n\n$1",
+       "generic-pool-error": "माफ à¤\97रà¥\8dया , à¤\85हिल à¤¸à¤°à¥\8dभरहरà¥\82मà¥\80 à¤\95ामà¤\95à¥\8b à¤­à¤¾à¤° à¤­à¥\8cत à¤°à¤¹à¥\8dया à¤\9b।\nभà¥\8cत à¤­à¥\8cत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 à¤¯à¥\88 à¤ªà¤¾à¤¨à¤¾ à¤¹à¥\87दà¥\8dया à¤ªà¥\8dरयास à¤\97रà¥\80 à¤°à¤¹à¥\8dया à¤\9bनà¥\8d à¥¤\nà¤\95à¥\83पया à¤¯à¥\8b à¤ªà¤¾à¤¨à¤¾ à¤ªà¥\81न: à¤¹à¥\87रà¥\8dनà¥\81 à¤\85à¤\97ाडि à¤¥à¥\8bà¤\95à¥\8dà¤\95à¥\88 à¤ªà¤\96 ।",
        "pool-timeout": "समय सकियो बन्द गर्ने प्रतीक्षामी",
        "pool-queuefull": "प्रतीक्षा पङ्क्ति भरियो",
        "pool-errorunknown": "अज्ञात गल्ती",
        "copyrightpage": "{{ns:project}}:प्रतिलिपी अधिकारहरू",
        "currentevents": "आजभोलका घटनाहरू",
        "currentevents-url": "Project:आजभोलका घटनाहरू",
-       "disclaimers": "à¤\85सà¥\8dविà¤\95ारà¥\8bà¤\95à¥\8dतिहरà¥\81",
+       "disclaimers": "à¤\85सà¥\8dविà¤\95ारà¥\8bà¤\95à¥\8dतिहरà¥\82",
        "disclaimerpage": "Project:सामान्य अस्वीकारोक्ति",
        "edithelp": "सम्पादन सहायता",
        "helppage-top-gethelp": "सहायता",
        "privacypage": "Project:गोपनीयता नीति",
        "badaccess": "अनुमतिमी गल्ती",
        "badaccess-group0": "तमले अनुरोध गरया काम अदाईलाई तमलाई अनुमति दिया नाईथिन।",
-       "badaccess-groups": "तमलà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रया à¤\95ाम  {{PLURAL:$2|समà¥\82ह |à¤\95à¥\8bà¤\87 à¤\8fà¤\95 à¤¸à¤®à¥\82ह}}: $1 à¤®à¥\80 à¤°à¤¯à¤¾ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लà¥\87 à¤®à¤¾à¤¤à¥\8dर à¤\85दà¥\8dदà¥\81 सक्दान ।",
+       "badaccess-groups": "तमलà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dयाà¤\95à¥\8b  à¤\95ाम  {{PLURAL:$2|समà¥\82ह |à¤\95à¥\8bà¤\87 à¤\8fà¤\95 à¤¸à¤®à¥\82ह}}: $1 à¤®à¥\80 à¤°à¤¯à¤¾à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लà¥\87 à¤®à¤¾à¤¤à¥\8dर à¤\85दà¥\8dद सक्दान ।",
        "versionrequired": "MediaWiki संस्करण $1 चाईन्या",
        "versionrequiredtext": "ये पाना प्रयोग गर्नका लागि MediaWiki $1 संस्करण चाहिन्छ ।\nहेर  [[Special:Version|version page]]",
-       "ok": "हà¥\81नà¥\87",
+       "ok": "भयà¥\8b",
        "retrievedfrom": " \"$1\" बठे निकालिया",
-       "youhavenewmessages": "तमरा à¤²à¤¾à¤\97ि($2)मी $1 छ।",
-       "youhavenewmessagesfromusers": "तमरा à¤²à¤¾à¤\97ि {{PLURAL:$3|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|$3 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81}}($2)बठे$1",
-       "youhavenewmessagesmanyusers": "तमलाà¤\88 à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82($2) à¤¬à¤¾à¤\9f $1 छ ।",
-       "newmessageslinkplural": "{{PLURAL:$1|à¤\8fà¤\95 à¤¨à¤¯à¤¾à¤\81 à¤¸à¤¨à¥\8dदà¥\87श|999=नयाà¤\81 à¤¸à¤¨à¥\8dदà¥\87शहरू}}",
-       "newmessagesdifflinkplural": "छाड्डीबारो {{PLURAL:$1|परिवर्तन|999=परिवर्तनहरू}}",
-       "youhavenewmessagesmulti": "तमरा à¤²à¤¾à¤\97ि $1 à¤®à¥\80  à¤¨à¤¯à¤¾à¤\81 à¤¸à¤¨à¥\8dदà¥\87शहरू छन्",
+       "youhavenewmessages": "तमà¤\96à¥\80 à¤²à¥\87à¤\96ा($2)मी $1 छ।",
+       "youhavenewmessagesfromusers": "तमà¤\96à¥\80 à¤²à¥\87à¤\96ा {{PLURAL:$3|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|$3 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dतान}}($2)बठे$1",
+       "youhavenewmessagesmanyusers": "तमलाà¤\88 à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82($2) à¤¬à¤ à¥\87 $1 छ ।",
+       "newmessageslinkplural": "{{PLURAL:$1|à¤\8fà¤\95 à¤¨à¥\8cलà¥\8b à¤°à¥\88बार|999=नà¥\8cला à¤°à¥\88बारहरू}}",
+       "newmessagesdifflinkplural": "à¤\9bाडà¥\8dडà¥\80बारà¤\95à¥\8b {{PLURAL:$1|परिवरà¥\8dतन|999=परिवरà¥\8dतनहरà¥\82}}",
+       "youhavenewmessagesmulti": "तमरा à¤²à¤¾à¤\97ि $1 à¤®à¥\80  à¤¨à¤¯à¤¾à¤\81 à¤°à¥\88बारहरू छन्",
        "editsection": "सम्पादन",
        "editold": "सम्पादन गर्न्या",
        "viewsourceold": "स्रोत हेर",
        "viewsourcelink": "स्रोत हेर",
        "editsectionhint": "खण्ड: $1 सम्पादन गर",
        "toc": "विषयसूची",
-       "showtoc": "धेका",
-       "hidetoc": "लुका",
+       "showtoc": "धेकाउन्या",
+       "hidetoc": "लुकाउन्या",
        "collapsible-collapse": "खुम्च्याउन्या",
        "collapsible-expand": "फैलाउ",
-       "confirmable-confirm": "तमरà¥\8b {{GENDER:$1|लिà¤\99à¥\8dà¤\97}} à¤¹à¥\8b?",
+       "confirmable-confirm": "à¤\95à¥\8dया {{GENDER:$1|तम}} à¤¸à¥\81निशà¥\8dà¤\9aित à¤\9bà¥\8c ?",
        "confirmable-yes": "हो",
        "confirmable-no": "नाइँ",
        "thisisdeleted": "$1 हेर्न्या या पैल्लीका रुपमी फर्काउन्या हो?",
        "sort-descending": "अवरोहण क्रममी मिलाउन्या",
        "sort-ascending": "आरोहण क्रममी मिलाउन्या",
        "nstab-main": "लेख",
-       "nstab-user": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¤¾à¤¨à¤¾",
+       "nstab-user": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¤¾à¤¨à¥\8b",
        "nstab-media": "माध्यम पाना",
        "nstab-special": "खास पानो",
        "nstab-project": "आयोजना पानो",
        "nstab-image": "फाइल",
-       "nstab-mediawiki": "à¤\96बर",
+       "nstab-mediawiki": "रà¥\88बार",
        "nstab-template": "ढाँचा",
        "nstab-help": "सहायता पानो",
        "nstab-category": "श्रेणी",
        "nosuchaction": "यसो काम हैन",
        "nosuchactiontext": "URL ले खुलाएको काम मान्य छैन ।\nतमुले URL गलत टाइपगरेका हौ , वा गलत लिंकक पछाडी लागेका हुनसक्देहौ ।\nयै{{SITENAME}}ले सफ्टवेयरमी भएको गल्ति देखायाको पनि हुनसक्छ ।",
        "nosuchspecialpage": "तसो विशेष पानो छैन",
-       "nospecialpagetext": "<strong>तमà¥\81लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रयाà¤\95à¥\8b à¤µà¤¿à¤¶à¥\87ष à¤ªà¤¾à¤¨à¥\8b à¤\85मानà¥\8dय à¤\9b à¥¤</strong>\n\nमानà¥\8dय à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81को सूची यहाँ [[Special:SpecialPages|{{int:specialpages}}]] उपलब्ध छ ।",
-       "error": "à¤\97लत",
+       "nospecialpagetext": "<strong>तमà¥\80लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dयाà¤\95à¥\8b à¤µà¤¿à¤¶à¥\87ष à¤ªà¤¾à¤¨à¥\8b à¤\85मानà¥\8dय à¤\9b à¥¤</strong>\n\nमानà¥\8dय à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82को सूची यहाँ [[Special:SpecialPages|{{int:specialpages}}]] उपलब्ध छ ।",
+       "error": "तà¥\8dरà¥\81à¤\9fà¥\80",
        "databaseerror": "डेटावेस गल्ति",
-       "databaseerror-text": "डà¥\87à¤\9fाबà¥\87स à¤\95à¥\8dवà¥\87रà¥\80मा à¤\96राबà¥\80 à¤¦à¥\87à¤\96ा à¤ªà¤£à¤¯à¥\8b à¥¤\nयà¥\87ले सफ्टवेयरमी गल्ती रयाको धेकाउन सकन्छ ।",
-       "databaseerror-textcl": "डà¥\87à¤\9fावà¥\87स à¤\95à¥\8dवà¥\87रà¥\80मà¥\80 à¤\96राबà¥\80 à¤¦à¥\87à¤\96ियो ।",
-       "databaseerror-query": "à¤\95à¥\8dवà¥\87रà¥\80: $1",
+       "databaseerror-text": "डà¥\87à¤\9fाबà¥\87स à¤\95ावà¥\87रà¥\80मà¥\80 à¤\96राबà¥\80 à¤§à¥\87à¤\95ियà¥\8b à¥¤\nयà¥\88ले सफ्टवेयरमी गल्ती रयाको धेकाउन सकन्छ ।",
+       "databaseerror-textcl": "डà¥\87à¤\9fावà¥\87स à¤\95ावà¥\87रà¥\80मà¥\80 à¤\96राबà¥\80 à¤§à¥\87à¤\95ियो ।",
+       "databaseerror-query": "à¤\85नà¥\81रà¥\8bध: $1",
        "databaseerror-function": "फङ्सन : $1",
        "databaseerror-error": "गल्ती: $1",
        "laggedslavemode": "<strong>चेतावनी:</strong> पानामी हालका अद्यतनहरू नहुनस्कदान ।",
        "readonly": "डेटाबेस बन्द गरिया छ",
        "enterlockreason": "ताल्चा मार्नुको कारण दिया, साथै ताल्चा हटाउने समयको अवधि अनुमान लगा।",
-       "readonlytext": "समà¥\8dभवतà¤\83 à¤¨à¤¿à¤¯à¤®à¤¿à¤¤ à¤¡à¥\87à¤\9fाबà¥\87स à¤°à¤\96-रà¤\96ाà¤\89à¤\95à¥\8b à¤\95ारण à¤\85हिलà¥\87लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¡à¥\87à¤\9fाबà¥\87स à¤ªà¥\8dरविषà¥\8dà¤\9fà¥\80 à¤° à¤\85नà¥\8dय à¤¸à¤\82शà¥\8bधनहरà¥\81  à¤¬à¤¨à¥\8dद à¤°à¤¾à¤\96िया à¤\9b, à¤\9cà¤\88लाà¤\88 à¤ªà¤\9bि à¤¬à¤ à¥\87 à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dय à¤\97रिनà¥\8dया à¤\9b। \nपà¥\8dरबनà¥\8dधà¤\95 à¤\9cà¤\88लà¥\87 à¤¯à¥\8b à¤¬à¤¨à¥\8dद à¤\97रयाà¤\9bनà¥\8d, à¤¯à¥\8b à¤¸à¥\8dपषà¥\8dà¤\9fà¥\80à¤\95रण à¤¦à¤¿à¤\8fकाछन्: $1",
-       "missing-article": "नाम \"$1\" $2 भया भेटिनु पडडे पाना पाठ डेटाबेसले  भेटाइएन, \n\nयिसो प्राय: मिति नाघिसक्या भिन्न वा इतिहास वा कुनै मेटिसक्याको पानाको लिंक पहिल्याउनाले हुन्छ ।\n\nयदि यसो भया नाइँहो भणे सफ्टवेयरको गल्ती लै हुनसकुन्छ ।\nकृपया यैको url खुलाइ [[Special:ListUsers/sysop|प्रबन्धक]]लाई उजुरी गर",
+       "readonlytext": "समà¥\8dभवतà¤\83 à¤¨à¤¿à¤¯à¤®à¤¿à¤¤ à¤¡à¥\87à¤\9fाबà¥\87स à¤°à¤\96-रà¤\96ाà¤\89à¤\95à¥\8b à¤\95ारण à¤\85हिलà¥\87लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¡à¥\87à¤\9fाबà¥\87स à¤ªà¥\8dरविषà¥\8dà¤\9fà¥\80 à¤° à¤\85नà¥\8dय à¤¸à¤\82शà¥\8bधनहरà¥\82  à¤¬à¤¨à¥\8dद à¤°à¤¾à¤\96िया à¤\9b, à¤\9cà¤\88लाà¤\88 à¤ªà¤\9bि à¤¬à¤ à¥\87 à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dय à¤\97रिनà¥\8dया à¤\9b। \nपà¥\8dरबनà¥\8dधà¤\95 à¤\9cà¤\88लà¥\87 à¤¯à¥\8b à¤¬à¤¨à¥\8dद à¤\97रà¥\8dयाà¤\9bनà¥\8d, à¤¯à¥\8b à¤¸à¥\8dपषà¥\8dà¤\9fà¥\80à¤\95रण à¤¦à¤¿à¤¯à¤¾काछन्: $1",
+       "missing-article": "नाम \"$1\" $2 भयाको भेटिनु पड्डे पानो पाठ डेटाबेसले  भेटाएन, \n\nयिसो प्राय: मिति नाघिसक्याको भिन्न वा इतिहास वा कुनै मेटिसक्याको पानाको लिंक पहिल्याउनाले हुन्छ ।\n\nयदि यसो भया नाइँहो भणे सफ्टवेयरको गल्ती लै हुनसकुन्छ ।\nकृपया यैको url खुलाइ [[Special:ListUsers/sysop|प्रबन्धक]]लाई उजुरी गर",
        "missingarticle-rev": "(संशोधन #: $1)",
-       "missingarticle-diff": "(परि: $1, $2)",
+       "missingarticle-diff": "(भिनà¥\8dनता: $1, $2)",
        "readonly_lag": "डेटाबेस स्वतः बन्द गरिया छ जबकि अधिनस्थ डेटाबेस सर्वरले मूल पहिल्याउँनाछ।",
        "internalerror": "भित्रका गल्ती",
        "internalerror_info": "भित्रका गल्ती: $1",
        "filenotfound": "\"$1\" फाइल नाइँ भेटियो ।",
        "unexpected": "अप्रत्यासित मान :\"$1\"=\"$2\" ।",
        "formerror": "गल्ती : फर्म बुझाउन सकिएन",
-       "badarticleerror": "यà¥\87 à¤\95ारà¥\8dय à¤¯à¥\88 à¤ªà¤¨à¥\8dनामा à¤\97रà¥\8dन à¤®à¤¿à¤²à¥\87न।",
-       "cannotdelete": "\"$1\" à¤ªà¤¾à¤¨à¤¾ à¤µà¤¾ à¤«à¤¼à¤¾à¤\87ल à¤®à¥\87à¤\9fà¥\8dà¤\9fà¥\82 à¤¸à¤\95िà¤\8fन।\nयà¥\8b à¤ªà¥\88लà¥\8dलà¥\80बठà¥\87 à¤®à¥\87à¤\9fिया à¤¹à¥\81नà¥\81 à¤ªà¤¡à¥\81न्छ।",
+       "badarticleerror": "यà¥\8b à¤\95ारà¥\8dय à¤¯à¥\88 à¤ªà¤¨à¤¾à¤®à¥\80 à¤\97रà¥\8dन à¤¨à¤¾à¤\88à¤\82मिलà¥\8dलà¥\8b।",
+       "cannotdelete": "\"$1\" à¤ªà¤¾à¤¨à¤¾ à¤µà¤¾ à¤«à¤¾à¤\87ल à¤®à¥\87à¤\9fà¥\8dà¤\9f à¤¸à¤\95िà¤\8fन।\nयà¥\8b à¤ªà¥\88लà¥\8dलà¥\80बठà¥\87 à¤®à¥\87à¤\9fियाà¤\95à¥\8b à¤¹à¥\81नà¥\81 à¤ªà¤¡न्छ।",
        "cannotdelete-title": "पाना  \"$1\" लाई मेट्टू सकिएन",
        "delete-hook-aborted": "हुकले सम्पादनकार्य बन्द गरिदियो ।\nकोइ कारण दिइएन ।",
        "no-null-revision": "$1 पाना लागि खालि पुनरावलोकन सिर्जना गर्न सकिएन",
        "badtitle": "गलत शीर्षक",
+       "badtitletext": "अनुरोध अरेको पानो शीर्षक नाइमानियो, खाली और गलत रुपमि अन्तर भाषा वा अन्तर विकी सम्बन्ध गरियाको थ्यो।  यैमि शीर्षकमा प्रयोग गर्न नमिल्या एक और जेधा अक्षरहरू रयाका हुनसक्कान ।",
+       "title-invalid-empty": "निवेदन अरियाको पानाको शिर्षक कित खाली छ और नाउस्पेसको नाउ मात्तरै छ।",
+       "title-invalid-utf8": "निवेदन अरियाको पानाको शिर्षकमि अवैध युटिएफ-८ अनुक्रम रयाको छ ।",
+       "title-invalid-interwiki": "अनुरोध गरियाको शिर्षकमी अन्तर विकि लिङ्क छ जइलाई शिर्षकमी प्रयोग गद्द नाइपाइनो ।",
+       "title-invalid-talk-namespace": "निवेदन गरियाको पानाको शिर्षकले उपलब्ध नभएका कुरडी पानालाई सन्दर्भको रूपमी राख्याको छ ।",
+       "title-invalid-characters": "निवेदन गरियाको यै पानाको शिर्षकमी अवैध अक्षर रयाको छः \"$1\" ।",
        "viewsource": "स्रोत हेर",
        "viewsource-title": " $1 को स्रोत हेर",
        "actionthrottled": "कार्य रोकिईयो",
+       "viewyourtext": "यै पानामी रह्याका '''तमरा सम्पादनहरू''' हेद्द या प्रतिलिपी गद्द सक्द्या हौ :",
+       "namespaceprotected": "तमलाई '''$1'''  नेमस्पेसमी रह्याका पानाहरू सम्पादन गद्या अनुमति छैन ।",
        "exception-nologin": "प्रवेश (लग ईन) नगरिएको",
+       "virus-scanfailed": "जँचाई असफल(कोड $1)",
+       "virus-unknownscanner": "थानभया एन्टीभाइरस:",
+       "logouttext": "<strong>तमी अहिल बाहिर निस्क्याका  छौ।</strong>\n\nयाद राख्या तमीले ब्राउजरको क्याच खालि नगर्यासम्म कुनै पानाहरूमी तमी अझैं प्रवेश गरिरख्याको धेकाउन सक्छ।",
        "welcomeuser": "$1स्वागत छ!",
        "yourname": "प्रयोगकर्ता नाम:",
        "userlogin-yourname": "प्रयोगकर्ता नाम",
        "yourpasswordagain": "पासवर्ड फेरि टाईप गर",
        "createacct-yourpasswordagain": "पासवर्ड निश्चित गर",
        "createacct-yourpasswordagain-ph": "आजी पासवर्ड लेख",
+       "userlogin-remembermypassword": "मुलाई अघाडी झान्या काम गराइराख्या",
        "yourdomainname": "तमरो ज्ञानक्षेत्र(डोमेन):",
        "password-change-forbidden": "ये विकिमी पासवर्ड परिवर्तन गर्न सक्नुहुन्न।",
-       "login": "प्रवेश",
+       "login": "प्रवेश (लगईन)",
        "nav-login-createaccount": "प्रवेश गर्ने/नयाँ खाता बनाउन्या",
        "userlogin": "प्रवेश गर्ने / नयाँ खाता बनाउन्या",
        "userloginnocreate": "प्रवेश",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "क्याई तम नयाँ खाता खोल्ला छौ?",
        "createacct-captcha": "सुरक्षा जाँच",
+       "createacct-imgcaptcha-ph": "मल्तिर धेकियाका अनुसारको पाठ भरिदिय",
        "createacct-submit": "तमरो खाता सिर्जना गर",
        "createacct-another-submit": "दोसरो खाता सिर्जना गर",
        "createacct-benefit-heading": "{{SITENAME}} तम जसाई मान्सुनले सिर्जना गरिया हो ।",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|पाना|पानाहरà¥\81}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|पाना|पानाहरà¥\82}}",
        "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदानकर्ता|योगदानकर्ताहरू}}",
        "badretype": "तमले दिया पासवर्ड मिल्लो नाइँ।",
        "loginerror": "प्रवेश गल्ती",
        "createaccounterror": "खाता बनाउन सकिएन: $1",
        "loginsuccesstitle": "प्रवेश सफल",
        "loginsuccess": "'''तमले {{SITENAME}}मी  \"$1\" को रुपमी प्रवेश गरया छौ।'''",
-       "nouserspecified": "तमलà¥\87 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤¨à¤¾à¤® à¤\9cनाà¤\89नà¥\81 à¤ªà¤¡à¥\81नà¥\8dछ।",
+       "nouserspecified": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤¦à¤¿à¤¨à¥\81 à¤\85निवारà¥\8dय छ।",
        "mailmypassword": "पासवर्ड पूर्वनिर्धारित गर",
        "passwordremindertitle": "{{SITENAME}}का लागि नयाँ अस्थायी पासवर्ड",
        "mailerror": " चिठी :$1 पठाउँदा गल्ती भयो",
        "resetpass-temp-password": "अस्थाइ पासवर्ड",
        "resetpass-abort-generic": "एक्सटेन्सनले पासवर्ड परिवर्तनलाई बन्द गराईया छ ।",
        "passwordreset": "पासवर्ड पूर्वनिर्धारित गर",
-       "passwordreset-legend": "पासवर्ड पूर्वनिर्धारित गर",
        "passwordreset-username": "प्रयोगकर्ता-नाम:",
        "passwordreset-domain": "डोमेन",
        "passwordreset-capture": "निस्कने इमेलको नमुना हेर्ने ?",
        "changeemail-submit": "इमेल परिवर्तन गद्या",
        "changeemail-throttled": "तमले अलै भौत फेर प्रवेशका निम्ति प्रयास गरया छौ।\nकृपया $1 पर्खेर मात्र प्रयास गर।",
        "resettokens": "टोकन पूर्वरुपमी फर्काउन्या",
+       "resettokens-text": "जो टोकन तमरो खातासँग सम्बद्ध केहि विशिष्ट व्यक्तिगत जानकारी प्रदान गर्छन, तम त्यसलाई यहाँ रिसेट गद्द सक्द्या हौ।\n\nयदि तमले तिनलाई भुलवस कैकनै देखाईदिया छौ वा तमरो खाता ह्याक भइसक्याको छ भन्या तम यसलाई रिसेट गर्या ।",
        "resettokens-no-tokens": "पूर्वरुमी फर्काउन्या कोई लै टोकन नाइथिन् ।",
-       "resettokens-legend": "टोकन पूर्वरुपमी फर्काउन्या",
        "resettokens-tokens": "टोकनहरू:",
        "resettokens-token-label": "$1 (यैलको मूल्यः $2)",
        "resettokens-done": "टोकन पूर्वरुपमी फर्काइयो ।",
        "watchthis": "यै पानाको ध्यान राख",
        "savearticle": "सङ्ग्रह गर",
        "preview": "पूर्वावलोकन",
-       "showpreview": "पूर्वालोकन धेका",
-       "showdiff": "परिवर्तन धेका",
+       "showpreview": "पूर्वालोकन धेकाउन्या",
+       "showdiff": "परिवर्तन धेकाउन्या",
+       "blankarticle": "<strong>चेतावनी:</strong> तम एक खालि पानाको निर्माण गद्द लाग्याछौ ।\nयदि तमले \"{{int:savearticle}}\" लाई पुनः थिच्यौ भण्या पानो बिना कुनै सामग्री नै निर्मित गरिन्याछ ।",
+       "anoneditwarning": "<strong>चेतावनी:</strong> तमले प्रवेश अरेको नाइथिन । तमरो आइपि ठेगाना पाना सम्पादन इतिहासमि दर्ता गरिन्या छ र यो सब्बैले हेद्द सक्कान । यदि तमलाईँ <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउन्या] गर्याभण्या तमबठे गरियाको सम्पादन तमरो प्रयोगकर्तानाममि जोडिन्याछ ।",
+       "selfredirect": "<strong>चेतावनी:</strong> तम यै पानालाई आफुमी पुनः निर्देशित गद्द लाग्याछौ ।\nहुनसक्छ तम अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गद्द लाग्याछौ, वा गलत पानाको सम्पादन गद्द लाग्याछौ ।\nतम पुनः एकपल्ट \"{{int:savearticle}}\" क्लिक गद्दाछौ, पुनः निर्देशित तसै लै बनाइन्याछ।",
        "summary-preview": "सारांश पूर्वालोकन:",
        "subject-preview": "विषय/शीर्षपंक्ति पूर्वरुप:",
        "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कृपया तमरा प्रश्नमी सबै जानकारी खुलाया ।",
        "blockednoreason": "कारण दिइईया नाइँथिन",
        "whitelistedittext": "पाना सम्पादन गर्न तमले $1 गद्दु पडन्छ।",
+       "nosuchsectiontext": "तमले तसो खण्डको सम्पादन गद्या प्रयास गर्यौ जो अस्तित्वमी छैन।\nयैको नाम बदलियाको अथवा मेटाइयाको हुनुपडन्छ जब तमी यै पानालाई हेद्द लाग्याका छियौ ।",
        "loginreqtitle": "प्रवेशगर्नु जरुरी छ।",
        "loginreqlink": "प्रवेश (लग ईन)",
        "loginreqpagetext": "अरु पृष्ठहेर्न तमले $1 गद्दु पडन्छ ।",
        "accmailtitle": "पासवर्ड पठाइयो",
        "newarticle": "(नयाँ)",
+       "newarticletext": "तमले ऐलसम्म नभयाका पानाको लिंङ्क पहिल्याउनु भयाको छ।\nयो पानो बनौनाखी तल्तिरको कोष्ठमा टाइप गरिदिय ।(और जाण्णाखीलेखा [$1 help page] हेरिदिय )।\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>.",
+       "userinvalidcssjstitle": "<strong>चेतावनी:</strong> यहाँ कोइपनि \"$1\" नामको खोल नाइथिन् ।\nप्रचलित .css तथा .js पानाहरूले निम्नपद शीर्षक प्रयोग गद्दान्, जस्तै {{ns:user}}:Foo/Vector.css को सट्टामी {{ns:user}}:Foo/vector.css",
        "updated": "नौला",
        "note": "'''सूचना:'''",
-       "continue-editing": "सम्पादन क्षेत्रमी जा",
+       "continue-editing": "सम्पादन क्षेत्रमी जा",
        "editing": "$1 सम्पादन गरिँदै",
        "creating": "$1 बनाइँदै",
        "editingsection": "$1 (खण्ड) सम्पादन गरिँदै",
        "editingcomment": "$1 सम्पादन गर्दै(नयाँ खण्ड)",
        "editconflict": "सम्पादन बाँझ्यो: $1",
-       "yourtext": "तमरा à¤ªà¤¾à¤ à¤¹à¤°à¥\81",
+       "yourtext": "तमरा à¤ªà¤¾à¤ à¤¹à¤°à¥\82",
        "storedversion": "संग्रहित पुनरावलोकन",
-       "yourdiff": "भिन्नताहरु",
+       "editingold": "<strong>चेतावनी: तम यै पानाको अति पुरानो अप्रचलित संशोधनलाई सम्पादन गद्द लाग्याछौ ।<strong>\nयदि तमीले यै परिवर्तनलाई सङ्ग्रह गर्यौ भण्या यै पछिका संशोधनहरू नष्ट हुन्याछन् ।",
+       "yourdiff": "भिन्नताहरू",
+       "copyrightwarning2": "कृपया ध्यान देओ यै {{SITENAME}}मी दियाका योगदानहरूलाई अन्य योगदानकर्ताहरूद्वारा सम्पादन गरिन्याछ, परिवर्तन गरिन्याछ अथवा हटाइन्याछ । यदि तमरो लेखलाई निर्दयता पूर्वक सम्पादन गरेको चाहदैनौ भण्या त्यो यहाँ जनराख।<br />\nयदि तमी किटानसाथ भन्नाछौ कि यो लेख तम आफैले लेख्याको हो अथवा सार्वजनिक ज्ञानक्षेत्र अथवा मुक्त संसाधनबठे लियाको हो (विवरणकोलागि हेर $1 ). \n'''कपीराइट भयाको रचना अनुमति बिना  यहाँ जनराख!'''",
+       "readonlywarning": "<strong>चेतावनी: तथ्याङ्क मर्मतको निम्ति बन्द गरियाकोछ, यै कारण तमी आफ्नो सम्पादन अहिले सङ्ग्रह गद्द सक्द्याहौन ।</strong>\n\nयदि तमी चाहन्छौ भण्या अहिले यहाँ भयाका पाठलाई कपि गरि कतै टेक्स्ट फाइलमी पेस्ट गरिबर सङ्ग्रह गद्द सक्द्याहौ ।\n\nप्रवन्धक जनले यो बन्द गर्याको छ उनले यसो विवरण दियाको छ: $1",
+       "protectedpagewarning": "<strong>सूचना: यै पानालाई सुरक्षित गरियाको छ यसकारण प्रवन्धकको विशेषाधिकार प्राप्त प्रयोगकर्ताहरूले मात्र यैलाई सम्पादन गद्द सक्द्याछन् ।</strong>\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइयाको छ:",
+       "templatesused": "यै पानामी राखियाका {{PLURAL:$1|Template|ढाँचाहरू}} :",
+       "templatesusedsection": "यै खण्डमी {{PLURAL:$1|ढाँचा प्रयोग गरियाको छ|ढाँचाहरू प्रयोग गरियाका छन्}}",
        "template-protected": "(सुरक्षित)",
        "template-semiprotected": "(अर्ध-सुरक्षित)",
-       "permissionserrors": "अनुमति नभया",
+       "hiddencategories": "यो पानो निम्न {{PLURAL:$1|1 लुकाइयाको श्रेणी|$1 लुकाइयाका श्रेणीहरू}}को हिस्सादार(सदस्य) हो :",
+       "permissionserrors": "अधिकारमी त्रुटी",
+       "permissionserrorstext-withaction": "$2 कि लेखा तमलाईँ अनुमति नाइथिन , यिन {{PLURAL:$1|कारणले|कारणहरुले}} गद्दा :",
+       "moveddeleted-notice": "पानो मेटियाको छ।\nमेटियाका और सारियाका पानाहरूको सूची तल्तिर सन्दर्भखी लेखा दियाको छ।",
        "log-fulllog": "पूरा लग हेर",
        "edit-hook-aborted": "हुकले सम्पादन बन्द गरिदियो ।\nयेले कोइ कारण दिएन ।",
        "edit-gone-missing": "पाना अद्यतन गर्न सकिएन\nयो मेटिया जसो धेकिन्छ ।",
-       "edit-conflict": "दà¥\8dवनà¥\8dदà¥\8dव à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\8dया à¥¤",
+       "edit-conflict": "समà¥\8dपादन à¤¦à¥\8dवनà¥\8dदà¥\8dव à¤­à¤¯à¥\8b",
        "postedit-confirmation-created": "पाना सिर्जना गरियो ।",
        "postedit-confirmation-restored": "पाना पूर्वरूपमी फर्कायो ।",
        "postedit-confirmation-saved": "तमरो सम्पादन संग्रह गरिया छ ।",
        "content-failed-to-parse": "$1 को लागि $2 सामग्रीलाई पार्स गर्न विफल, गल्ती: $3",
        "invalid-content-data": "अमान्य सामग्री डेटा",
        "content-not-allowed-here": "सामग्री \"$1\"  [[$2]] पानामी राख्न अनुमती छैन ।",
+       "editwarning-warning": "यै पानाबठे बाहिर जाँदा तमले गर्याको कुनै पनि परिवर्तन हराउन्याछ ।\nयदि तमले लग इन गर्याको छ भण्या तमी यै सूचनालाई धेकाउन आफ्नो रोजाईहरूको \"{{int:prefs-editing}}\" भागमी गइबर बन्द गद्द सक्द्याहौ।",
        "content-model-wikitext": "विकिपाठ",
        "content-model-text": "साधारण पाठ",
        "content-model-javascript": "जाभास्क्रिप्ट",
        "content-json-empty-object": "खाली वस्तु",
        "content-json-empty-array": "खाली एरे",
+       "post-expand-template-inclusion-category": "तसा पानाहरू जहाँ ढाँचा (टेम्पलेट) राख्ने सिमा पार भयाको छ ।",
        "parser-template-loop-warning": "ढाँचागत ग़ाँठो पडयो : [[$1]]",
        "parser-template-recursion-depth-warning": "ढाँचा पुन:चक्र गहिराई सिमा ($1) भन्दा झिक भयो",
        "language-converter-depth-warning": "भाषा परिवर्तनकर्ता गहिराई  ($1) नाघेको छ",
        "converter-manual-rule-error": "म्यानुअल भाषा अनुवाद सिध्दान्तमी समस्या धेखियो",
        "cantcreateaccounttitle": "खाता बनाउन सकिएन",
        "viewpagelogs": "यै पानाका लगहरू हेर",
-       "currentrev": "à¤\90à¤\88लको पुनरावलोकन",
-       "currentrev-asof": "$1à¤\95à¥\8b à¤°à¥\81पमà¥\80 à¤\90à¤\88लà¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81",
+       "currentrev": "à¤\85हिलको पुनरावलोकन",
+       "currentrev-asof": "$1à¤\95à¥\8b à¤°à¥\81पमà¥\80 à¤\85हिलà¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82",
        "revisionasof": "$1 जस्तै गरी पुनरावलोकन",
        "revision-info": "{{GENDER:$6|$2}}$7 द्वारा $1को संशोधन",
        "previousrevision": "← पुरानो संशोधन",
        "nextrevision": "नयाँ संशोधन →",
-       "currentrevisionlink": "à¤\90à¤\88लको पुनरावलोकन",
+       "currentrevisionlink": "à¤\85हिलको पुनरावलोकन",
        "cur": "वर्तमान पाना लिङ्क इतिहास",
        "next": "दोसरो",
        "last": "पल्लिको",
        "page_first": "पैल्लो",
-       "page_last": "छाड्डीबारो",
+       "page_last": "छाड्डीबारको",
+       "histlegend": "अन्तर चयन:संशोधनहरूको तुलनाको लागि रेडियो बाकसमी क्लिक गरिबर इण्टर गर अथवा तल दियाको बटनमी थिच <br />\nलिजेंड: (चालू): '''({{int:cur}})''' = अवतरणको बीचमी अन्तर, '''({{int:last}})''' = पैल्लीका अवतरणको बीचमी अन्तर, '''{{int:minoreditletter}}''' = नानो परिवर्तन।",
        "history-fieldset-title": "इतिहासको विचरण गर्ने",
        "history-show-deleted": "मेटिएका मात्र",
        "histfirst": "सबहै पुरानो",
        "histlast": "नयाँ",
-       "historysize": "({{PLURAL:$1|१ à¤¬à¤¾à¤\87à¤\9f |$1 à¤¬à¤¾à¤\87à¤\9fहरà¥\81}})",
+       "historysize": "({{PLURAL:$1|१ à¤\85à¤\95à¥\8dषर|$1 à¤\85à¤\95à¥\8dषरहरà¥\82}})",
        "historyempty": "(खाली)",
        "history-feed-title": "पुनरावलोकन इतिहास",
        "history-feed-description": "विकीमा यो पानको पुनरावलोकन इतिहास",
        "rev-deleted-comment": "(सम्पादन सारांश हटाइयो)",
        "rev-deleted-user": "(प्रयोगकर्ता नाम हटाइयो)",
        "rev-deleted-event": "(लग विवरण हटाइयो)",
+       "rev-suppressed-text-unhide": "यै पानाको पुनरावलोकन '''दमन''' गरियाको छ ।\nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/delete|पानो={{FULLPAGENAMEE}}}} दमन लग] पाउन सकिन्छ ।\nयदि तम अगाडि बढ्ड चाहन्छौ भण्या पनि तमीले  [$1 यि संशोधनहरू हेद्द] पाउन्या हौ ।",
        "rev-delundel": "दधेखाउने/लुकाउन्या",
-       "rev-showdeleted": "धेका",
+       "rev-showdeleted": "धेकाउन्या",
        "revisiondelete": "मेटाउन्या/मेटाईया रद्दगर्ने  पुनरावलोकनहरु",
        "revdelete-nooldid-title": "अमान्य पुनरावलोकन लक्ष",
        "revdelete-no-file": "खुलाइएको पाना अस्तित्वमी छैन",
        "revdelete-show-file-submit": "हो",
+       "revdelete-confirm": "पुष्टि गप कि तमी यो कार्य गद्द चाहन्छौ, तमी यऐको परिणाम बठे अवगत छौ, र तमी यो [[{{MediaWiki:Policy-url}}|नीति]] अनुसार गद्द लाइराछौ।",
        "revdelete-legend": "दृष्टि बन्देज मिलाउन्या",
        "revdelete-hide-text": "पुनरावलोकन पाठ",
        "revdelete-hide-image": "फाइल कमेन्ट लुकाउन्या",
        "revdelete-suppress": "प्रवन्धक वा अरुबठे डेटा थोका लिन्या",
        "revdelete-unsuppress": "पुनर्स्थापित पुनरावृत्तिबठे बन्देज हटाउन्या",
        "revdelete-log": "कारण:",
-       "revdelete-submit": "{{PLURAL:$1|à¤\9bानिया à¤¸à¤\82शà¥\8bधन|à¤\9bानà¥\8dनिया à¤¸à¤\82शà¥\8bधनहरà¥\81}}मा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\87",
+       "revdelete-submit": "{{PLURAL:$1|à¤\9bानिया à¤¸à¤\82शà¥\8bधन|à¤\9bानà¥\8dनिया à¤¸à¤\82शà¥\8bधनहरà¥\82}}मà¥\80 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\8dया",
        "revdelete-success": "'''संशोधन दृश्यता सफलतापूर्वक अद्यतन भयो।'''",
        "revdelete-failure": "'''संशोधन दृश्यता अद्यतन गर्न सकिएन:'''\n$1",
        "logdelete-success": "'''लग दृष्टि सफलतापूर्वक मिलाइयो ।'''",
        "revdel-restore": "दृष्टि परिवर्तन गर्न्या",
        "pagehist": "पाना इतिहास",
        "deletedhist": "मेटाईया इतिहास",
+       "revdelete-concurrent-change": " $2, $1 मिति गरियाको वस्तु परिवर्तन गद्द सकिएन: यसको स्थितीले तमीले परिवर्तन गर्नलाग्दे बेला कोहीअरुले नै परिवर्तन गर्याजसो धेकाउँछ\nकृपया लगहरू हेर्न सकन्छौ ।",
        "revdelete-otherreason": "और/थप कारण:",
        "revdelete-reasonotherlist": "और कारण",
        "revdelete-edit-reasonlist": "मेट्ने कार्यहरु सम्पादन गर्ने",
        "revdelete-offender": "संशोधन कर्ता:",
-       "suppressionlog": "थà¥\8bà¤\95ाà¤\97रया लग",
-       "mergehistory": "पाना इतिहासहरु मिसाउन्या",
-       "mergehistory-box": "दà¥\81à¤\88 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81à¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95न à¤\9cà¥\8bड :",
+       "suppressionlog": "लà¥\81à¤\95ाà¤\89नà¥\8dया लग",
+       "mergehistory": "पानाका इतिहासहरू मिसाउन्या",
+       "mergehistory-box": "दà¥\81à¤\88 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82à¤\95à¥\8b à¤ªà¥\81नरावलà¥\8bà¤\95न à¤\9cà¥\8bडà¥\8dनà¥\8dया :",
        "mergehistory-from": "स्रोत पाना:",
        "mergehistory-into": "गन्तब्य पाना :",
-       "mergehistory-list": "à¤\9cà¥\8bडडà¥\81 à¤®à¤¿à¤²्या इतिहास सम्पादन",
-       "mergehistory-go": "à¤\9cà¥\8bडडà¥\81 à¤®à¤¿à¤²à¥\8dया à¤¸à¤®à¥\8dपादनहरà¥\81",
-       "mergehistory-submit": "पà¥\81नरावलà¥\8bà¤\95हरà¥\81 जोड",
-       "mergehistory-empty": "à¤\95à¥\8bà¤\87लà¥\88 à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\81 à¤\9cà¥\8bडडà¥\81 à¤®à¤¿à¤²à¥\8dलà¥\8bनाà¤\87à¤\81 ।",
-       "mergehistory-success": "$3 {{PLURAL:$3|सà¤\82सà¥\8dà¤\95रण|सà¤\82सà¥\8dà¤\95रणहरà¥\81}}  [[:$1]]बठे सफलतापूर्वक [[:$2]]मी थपियो ।",
+       "mergehistory-list": "à¤\9cà¥\8bडà¥\8dड à¤®à¤¿à¤²à¥\8dन्या इतिहास सम्पादन",
+       "mergehistory-go": "à¤\9cà¥\8bडà¥\8dड à¤®à¤¿à¤²à¥\8dनà¥\8dया à¤¸à¤®à¥\8dपादनहरà¥\82",
+       "mergehistory-submit": "पà¥\81नरावलà¥\8bà¤\95हरà¥\82 जोड",
+       "mergehistory-empty": "à¤\95à¥\8bà¤\87लà¥\88 à¤ªà¥\81नरावलà¥\8bà¤\95नहरà¥\82 à¤\9cà¥\8bडà¥\8dड à¤¨à¤¾à¤\87à¤\81मिलà¥\8dलà¥\8b ।",
+       "mergehistory-success": "$3 {{PLURAL:$3|सà¤\82सà¥\8dà¤\95रण|सà¤\82सà¥\8dà¤\95रणहरà¥\82}}  [[:$1]]बठे सफलतापूर्वक [[:$2]]मी थपियो ।",
        "mergehistory-autocomment": " [[:$1]] लाई [[:$2]] मी जोडियो",
        "mergehistory-comment": " [[:$1]] लाई[[:$2]] मी जोडियो : $3",
        "mergehistory-same-destination": "स्रोत र गन्तव्य पाना एउटै हुनसक्दैनन्",
        "history-title": "\"$1\" को दोहरिया इतिहास",
        "difference-title": "\"$1\" को बिचमी भिन्नता",
        "difference-title-multipage": "\"$1\" तथा \"$2\" को बिचमी भिन्नता",
-       "difference-multipage": "(पानाहरà¥\81मा भिन्नता)",
+       "difference-multipage": "(पानाहरà¥\82मà¥\80 भिन्नता)",
        "lineno": "पंक्ति $1:",
        "compareselectedversions": "छानिईया संस्करणहरू दाँज",
-       "showhideselectedversions": "छानिईया पुनरावलोकनहरु धेखाउने/लुकाउन्या",
+       "showhideselectedversions": "छानिईयाका पुनरावलोकनहरू धेखाउने/लुकाउन्या",
        "editundo": "रद्द गर्न्या",
        "diff-empty": "(कोइ भिन्नता छैन)",
+       "diff-multi-sameuser": "(यिन प्रयोगकर्ताबठे {{PLURAL:$1|गरियाका बीचको एक बस्या काम नाइधेकियो|गरियाको बीचको $1 बस्याकाम नाइधेकियो}})",
+       "diff-multi-manyusers": "($2 {{PLURAL:$2|भन्दा अधिक प्रयोगकर्ता|भन्दा अधिक प्रयोगकर्ताहरू}}द्वारा {{PLURAL:$1|एउटा मध्यवर्ती संशोधन|$1 मध्यवर्ती संशोधनहरू}} नधेकायाएको)",
        "searchresults": "खोज नतिजाहरू",
-       "searchresults-title": " \"$1\"à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c à¤¨à¤¤à¤¿à¤\9cाहरà¥\81",
-       "titlematches": "पाना à¤¶à¤¿à¤°à¥\8dषà¤\95 à¤®à¤¿à¤²à¥\8dनछ",
-       "textmatches": "पाना à¤ªà¤¾à¤  à¤®à¤¿à¤²à¥\8dनछ",
-       "notextmatches": "à¤\85à¤\95à¥\8dषरसà¥\8d à¤ªà¥\87à¤\9c भेटिएन",
+       "searchresults-title": " \"$1\"à¤\95ा à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c à¤¨à¤¤à¤¿à¤\9cाहरà¥\82",
+       "titlematches": "पाना à¤¶à¤¿à¤°à¥\8dषà¤\95 à¤®à¤¿à¤²à¤¨à¥\8dछ",
+       "textmatches": "पाना à¤ªà¤¾à¤  à¤®à¤¿à¤²à¤¨à¥\8dछ",
+       "notextmatches": "à¤\95à¥\81नà¥\88 à¤ªà¤¾à¤¨à¤¾à¤®à¥\80 à¤²à¥\88 à¤¯à¥\8b à¤¸à¤¾à¤®à¤¾à¤\97à¥\8dरà¥\80 भेटिएन",
        "prevn": "पैल्लिको{{PLURAL:$1|$1}}",
        "nextn": "अर्को {{PLURAL:$1|$1}}",
        "prev-page": "अघिल्लो पाना",
        "next-page": "अर्को पाना",
-       "prevn-title": "पà¥\88लà¥\8dलिà¤\95à¥\8b  $1 {{PLURAL:$1|नतिà¤\9cा|नतिà¤\9cाहरà¥\81}}",
-       "nextn-title": "यà¥\87 à¤ªà¤\9bाà¤\95ा $1 {{PLURAL:$1|नतिà¤\9cा |नतिà¤\9cाहरà¥\81}}",
-       "shown-title": "धà¥\87à¤\96ाà¤\89नà¥\87 $1 {{PLURAL:$1|नतिà¤\9cा|नतिà¤\9cाहरà¥\81}} प्रति पाना",
+       "prevn-title": "पà¥\88लà¥\8dलिà¤\95à¥\8b  $1 {{PLURAL:$1|नतिà¤\9cा|नतिà¤\9cाहरà¥\82}}",
+       "nextn-title": "यà¥\88 à¤ªà¤\9bाà¤\95ा $1 {{PLURAL:$1|नतिà¤\9cा |नतिà¤\9cाहरà¥\82}}",
+       "shown-title": "धà¥\87à¤\96ाà¤\89नà¥\87 $1 {{PLURAL:$1|नतिà¤\9cा|नतिà¤\9cाहरà¥\82}} प्रति पाना",
        "viewprevnext": "हेर ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "''' \"[[:$1]]\" नाम गरया पाना  ये विकीमी रह्या छ'''",
-       "searchprofile-articles": "सामग्री पानाहरु",
+       "searchmenu-new": "<strong>\"[[:$1]]\"  पानो इसै विकिमी बनाओ !</strong> {{PLURAL:$2|0=|तमले खोज अरी भेटियाको पानो पन सङ्ङै जोड्या काम अर ।|तमरो खोज परिणाम पन हेर।}}",
+       "searchprofile-articles": "सामग्री पानाहरू",
        "searchprofile-images": "मल्टिमिडिया(श्रव्य दृश्य)",
        "searchprofile-everything": "सबै थोक",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मी खोज्या",
-       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\81 à¤\96à¥\8bज्या",
+       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\82 à¤\96à¥\8bà¤\9cà¥\8dज्या",
        "searchprofile-everything-tooltip": "सबै सामग्री खोज्या (वार्तालाप लै )",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्या",
-       "search-result-size": "$1 ({{PLURAL:$2|1 à¤¶à¤µà¥\8dद|$2 à¤¶à¤µà¥\8dदहरà¥\81}})",
-       "search-result-category-size": "{{PLURAL:$1|à¤\8fà¤\95 à¤¸à¤¦à¤¸à¥\8dय|$1 à¤¸à¤¦à¤¸à¥\8dयहरà¥\81}} ({{PLURAL:$2|1 à¤\89पशà¥\8dरà¥\87णà¥\80|$2  à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81}}, {{PLURAL:$3|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$3 à¤«à¤¾à¤\87लहरà¥\81}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 à¤¶à¤¬à¥\8dद|$2 à¤¶à¤¬à¥\8dदहरà¥\82}})",
+       "search-result-category-size": "{{PLURAL:$1|à¤\8fà¤\95 à¤¸à¤¦à¤¸à¥\8dय|$1 à¤¸à¤¦à¤¸à¥\8dयहरà¥\82}} ({{PLURAL:$2|1 à¤\89पशà¥\8dरà¥\87णà¥\80|$2  à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82}}, {{PLURAL:$3|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$3 à¤«à¤¾à¤\87लहरà¥\82}})",
        "search-redirect": "(जान्या $1)",
        "search-section": "(खण्ड $1)",
        "search-category": "(श्रेणी $1)",
        "searchall": "सबै",
        "showingresults": "धेखाउँदै  {{PLURAL:$1|'''१''' नतिजा|'''$1''' नतिजाहरू }} , #'''$2''' बठे सुरुहुन्या ।",
        "showingresultsinrange": "देखाई रह्या छ{{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> परिणाम}} सम्म पहुँच  #<strong>$2</strong> देखि #<strong>$3</strong> मी।",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> मै बठे <strong>$1</strong> परिणाम|<strong>$3</strong> मै बठे परिणाम <strong>$1 - $2</strong>}}",
+       "search-nonefound": "तमरो क्वेरीसँग ठक्कर खान्या नतिजाहरू नाइभेटिया",
        "powersearch-legend": "उन्नत खोज",
-       "powersearch-ns": "नà¥\87मसà¥\8dपà¥\87सà¥\87à¤\9cहरà¥\81मà¥\80 à¤\96à¥\8bà¤\9cà¥\8dनà¥\87 :",
+       "powersearch-ns": "नामसà¥\8dथानहरà¥\82मà¥\80 à¤\96à¥\8bà¤\9cà¥\8dनà¥\8dया :",
        "powersearch-togglelabel": "जाँच्ने :",
        "powersearch-toggleall": "सबै",
        "powersearch-togglenone": "कोइ लै होइनन",
        "prefs-skin": "काँचुली",
        "skin-preview": "पूर्वावलोकन",
        "datedefault": "कोइ अभिरुचि नाइँथिन",
-       "prefs-labs": "पà¥\8dरयà¥\8bà¤\97शाला à¤\97à¥\81णहरà¥\81",
-       "prefs-user-pages": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\81",
+       "prefs-labs": "पà¥\8dरयà¥\8bà¤\97शाला à¤\97à¥\81णहरà¥\82",
+       "prefs-user-pages": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82",
        "prefs-personal": "प्रयोगकर्ताको विवरण",
        "prefs-rc": "नौला परिवर्तनहरू",
        "prefs-watchlist": "मेरो ध्यान सूची",
        "prefs-editwatchlist": "अवलोकनसूची सम्पादन",
+       "prefs-watchlist-days": "ध्यान सूचीमी धेकाउने दिनहरू:",
        "prefs-watchlist-edits-max": "सबै है ज्यादा संख्या : १०००",
        "prefs-watchlist-token": "अवलोकन सूची टोकन:",
        "prefs-misc": "साधारण",
        "prefs-rendering": "स्वरुप",
        "saveprefs": "संग्रह",
        "prefs-editing": "सम्पादन",
-       "rows": "हरफहरà¥\81 :",
+       "rows": "हरफहरà¥\82 :",
        "columns": "स्तम्भहरू :",
        "searchresultshead": "खोज",
        "stub-threshold": "<a href=\"#\" class=\"stub\">ठूटो</a> को लागि थ्रेसहोल्ड स्वरूपण (बाइट):",
        "stub-threshold-disabled": "निष्क्रिय",
-       "recentchangesdays": "हालà¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमà¥\80 à¤§à¥\87à¤\96ाà¤\89नà¥\87 à¤¦à¤¿à¤¨à¤¹à¤°à¥\81:",
+       "recentchangesdays": "हालà¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमà¥\80 à¤§à¥\87à¤\95ाà¤\89नà¥\87 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82:",
        "recentchangesdays-max": "अधिकतम $1 {{PLURAL:$1|दिन|दिन}}",
        "timezonelegend": "समय क्षेत्र :",
        "localtime": "स्थानिय समय:",
        "timezoneregion-atlantic": "एट्लान्टिक महासागर",
        "timezoneregion-australia": "अष्ट्रेलिया",
        "timezoneregion-indian": "हिन्द महासागर",
+       "prefs-files": "फाइलहरू",
+       "group-user": "प्रयोगकर्ताहरू",
+       "group-autoconfirmed": "स्वत स्थापित प्रयोगकर्ताहरू",
+       "right-move-subpages": "तिनीहरूको उपपाना सहित पानाको नाम बदल्ने",
+       "right-move-rootuserpages": "मूल(root) प्रयोगकर्ताको पानाहरू साद्या",
+       "right-movefile": "फाइलहरूको नाम बदल्न्या",
+       "right-upload": "फाइलहरू अपलोड गर्न्या",
+       "right-reupload-shared": "साझा मिडिया भण्डारमी स्थानियरुपमी फाइलहरू अधिक्रमण गर्न्या",
+       "right-writeapi": "लेखन API प्रयोग गद्य्या",
+       "right-bigdelete": "लामो इतिहास भयाका पानाहरू मेट्ट्या",
+       "right-deleterevision": "खुलाइयाको पानाहरू मेटाउन्या र मेटायाको रद्द गद्या",
+       "right-deletedtext": "मेट्याका संशोधन बीचका मेट्याका पाठ र परिवर्तनहरू हेद्या",
+       "right-suppressionlog": "व्यक्तिगत लगहरू हेद्या",
+       "right-block": "अरु प्रयोगकर्तानलाई सम्पादन गद्दाकी ब्लक गर",
+       "right-editprotected": "\"{{int:protect-level-sysop}}\" को हैसियतले सुरक्षित पानाहरू सम्पादन गद्या",
+       "right-editusercssjs": "अन्य प्रयोगकर्ताको सी.एस.एस. रे जाभास्क्रिप्ट फाइलहरू सम्पादन गद्या",
+       "right-editusercss": "अन्य प्रयोगकर्ताको सी. एस. एस. फाइलहरू सम्पादन गद्या",
+       "right-edituserjs": "अरु प्रयोकर्ताका जाभास्क्रिप्ट फाइलहरू सम्पादन गर्न्या",
+       "right-rollback": "पछिल्लो प्रयोगकर्ताको सम्पादनहरूलाई छरितो रुपमी पछाडि पर्काउन्या",
+       "right-markbotedits": "पछाडि फर्काउन्या सम्पादनहरूलाई बोट सम्पादनकारुपमी चिनो लगाउन्या",
+       "right-import": "अरु विकि बठे पानाहरू आयात गद्या",
+       "right-patrol": "अरुको सम्पादनहरूलाई पट्रोल(गस्ती) गर्याको रुपमी चिनो लगाउन्या",
+       "right-autopatrol": "आफ्नो सम्पादनहरू पट्रोल (गस्ती) गर्याको रुपमी सम्पादन गद्या",
+       "right-unwatchedpages": "ध्यानमी नरह्याका पानानको सूची हेद्या",
+       "right-userrights-interwiki": "अन्य विकिहरूमी प्रयोगकर्ताहरूको अधिकार सम्पादन गद्या",
+       "right-override-export-depth": "गहिराइ ५ सम्म लिंक गरियाका पानाहरू सहित निर्यात गद्या",
+       "right-sendemail": "अन्य प्रयोगकर्तानलाई इमेल पठाउन्या",
+       "newuserlogpage": "प्रयोगकर्ता श्रृजना लग",
+       "action-move-subpages": "यै पानाको रे यैका उपपानाको नाम बदल्न्या",
+       "action-unwatchedpages": "कसैले ध्यान नराख्याका पाननको सूची हेद्या",
+       "action-userrights-interwiki": "अन्य विकिका प्रयोगकर्तानको प्रयोगकर्ता अधिकार सम्पादन गद्या",
+       "enhancedrc-history": "इतिहास",
+       "recentchanges": "नौला फेरबदली",
+       "recentchanges-legend": "अच्यालैका परिवर्तन विकल्पहरू",
+       "recentchanges-summary": "विकिका यैल्लैका फेरबदललाई यै पानामि पहिल्याउन्या",
+       "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|नौला पानाको सूची]] यैलाई लै हेरिदिय)",
+       "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 दिनहरूमी<br />$3",
+       "diff": "फरक",
+       "hist": "इतिहास",
+       "hide": "लुकाइदिय",
+       "show": "धेकाइदिय",
+       "minoreditletter": "ना",
+       "newpageletter": "नौ",
+       "boteditletter": "बो",
+       "rc_categories": "श्रेणीहरूमी सीमित (\"|\" ले छुट्याओ)",
+       "rc-change-size-new": "फेरबदलपाछा $1 {{PLURAL:$1|बाइट|बाइट}}",
+       "recentchangeslinked": "सम्बन्धित फेरबदल",
+       "recentchangeslinked-toolbox": "सम्बन्धित फेरबदल",
+       "recentchangeslinked-title": "\"$1\" सित सम्बन्धित परिवर्तन",
+       "recentchangeslinked-summary": "यो सूची निर्दिष्ट पाना (वा निर्दिष्ट श्रेणी)सित जोडियाका अल्लै परिवर्तन भयाका पानाको  हो। [[Special:Watchlist|तमरो ध्यानसूची]]का पानाहरू <strong>गाढा अक्षरमी</strong> छन्।",
+       "recentchangeslinked-page": "पाना नाम:",
+       "recentchangeslinked-to": "यैको सट्टा यो पानासित जोडियाका पानानको परिवर्तन धेकाउन्या",
        "upload": "चित्र अपलोड गर",
+       "uploadbtn": "फाइल अपलोड गर्न्या",
+       "upload-recreate-warning": "'''चेतावनी: त्यस नाममी रह्याका फाइलहरू सारियाको या हटायाको छ।'''\n\nयै पानाको सारियाको र हटायाको लग तमरो सहजताको लागि दियाको छ।",
+       "filedesc": "सारांश:",
+       "large-file": "यो सिफारिस गर्याछकि फाइलहरूको आकार $1 भन्दा ठूला हुनु हुँदैन;\nयै फाइलको आकार $2 छ ।",
+       "fileexists": "यै नामको फाइल पैल्ली नैं छ, यदि तम परिवर्तन गद्या कुरडीमू सुनिश्चित छैनौ भण्या कृपया <strong>[[:$1]]</strong> जाँच गर।\n[[$1|thumb]]",
+       "filewasdeleted": "यै नामको एक फाइल पहिली पनि अपलोड गरिबर पछि हटाई सकियाको छ।\nपुनः अपलोड गद्दु पूर्व तम $1 लाई निक्करी जाँच गर ।",
+       "uploadstash-nofiles": "तमरा कोइ पनि स्टाश गर्याका फाइलहरू नाइथिन् ।",
+       "uploadstash-refresh": "फाइलहरूको सूची ताजा गर्न्या",
+       "license-header": "कोइ केइ नाइथिन",
+       "listfiles-summary": "यै खास पानाले अपलोड गर्याका सबै फाइलहरू धेकाउन्छ ।",
+       "imgfile": "चित्र",
+       "listfiles_count": "संस्करणहरू",
+       "file-anchor-link": "फाइल",
+       "filehist": "फाइल इतिहास",
+       "filehist-help": "तिथि/बेलामी क्लिक अरि तैबेला(समय) यो फाइल कसो थ्यो भणी हेद्द सकिन्याछ ।",
+       "filehist-current": "यैलको",
+       "filehist-datetime": "तिथि/बेला",
+       "filehist-thumb": "थम्बनेल",
+       "filehist-thumbtext": "थम्बनेल $1 संस्करणको रुपमी",
+       "filehist-user": "प्रयोगकर्ता",
+       "filehist-dimensions": "आकारहरू",
+       "filehist-comment": "टिप्पणी",
+       "imagelinks": "फाइलको प्रयोगहरु",
+       "linkstoimage": "यै चित्रमी निम्न{{PLURAL:$1|पाना जोडिनान{{PLURAL:$1|}}|$1 पानाहरू जोडिनान्}}:",
+       "nolinkstoimage": "यो चित्रसित लिंकभयाकि कोइ पाना नाइथी",
+       "sharedupload-desc-here": "यो फाइल $1 बठे हो र और  परियोजनाहरू बठे पन प्रयोग गद्द सकिन्याछ । \nताखाइ यैको [$2 फ़ाइल विवरण पानो]मि रयाका विवरण तल्तिर दियाको छ।",
+       "upload-disallowed-here": "तमलाई यो फाइल अधिलेखन गद्द नाइसक्का ।",
+       "filedelete-maintenance": "रखरखाव चलिरह्याको हुनाले अस्थायी रुपमी फाइलहरू मेट्ट्या र मेट्याकोलाई पुनर्बहाली गर्न निष्क्रिय गरियाकोछ।",
+       "mimesearch-summary": "MIME-प्रकार अनुसार फाइलहरू खोज्न यै पानाको प्रयोग गद्द सकिन्याछ ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
+       "randompage": "कोइ एक लेख",
+       "statistics-header-pages": "पानानको तथ्याङ्क",
+       "statistics-header-edits": "सम्पादनहरूको तथ्याङ्क",
+       "statistics-files": "अपलोड गर्याका फाइलहरू",
+       "statistics-users": "दर्ता भयाका [[Special:ListUsers|प्रयोगकर्ताहरू]]",
+       "statistics-users-active": "सक्रिय प्रयोगकर्ताहरू",
+       "statistics-users-active-desc": "प्रयोगकर्ताहरू जो {{PLURAL:$1|बितेको एक दिन|बितेका $1 दिनहरू}} बठे सक्रिय छन्",
+       "nbytes": "$1 {{PLURAL:$1|बाइट|बाइटहरू}}",
+       "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्यहरू}}",
+       "ntransclusions": "$1 {{PLURAL:$1पानामी प्रयोग भयाको|पनाहरूमी प्रयोग भयाका}}",
+       "uncategorizedimages": "श्रेणीकरण नभयाका फाइलहरू",
+       "unusedimages": "प्रयोग नभयाका फाइहरू",
+       "wantedfiles": "चाहियाका फाइलहरू",
+       "prefixindex": "प्रिफिक्स सहितका पानाहरू",
+       "deadendpagestext": "निम्न पानाहरू {{SITENAME}}मी रह्याका अरु पानाहरूसँग जोडिदाइनन् ।",
+       "protectedpagesempty": "यै बेला यी नियम बठे कुनै पाना लै शुरक्षित नाइथिन्",
+       "usereditcount": "$1 {{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
+       "newpages": "नयाँ पानाहरू",
        "move": "नाम बदल",
        "movethispage": "पानाको नाम बदल्न्या",
+       "pager-older-n": "{{PLURAL:$1|पुरानो १|पुरानो $1}}",
+       "booksources": "किताबका श्रोतहरु",
+       "booksources-search-legend": "किताबका श्रोतहरु खोज्या",
+       "booksources-search": "खोज अर",
+       "log": "लगहरू",
+       "all-logs-page": "सब्बै सार्वजनिक लगहरू",
+       "allarticles": "सब्बै लेखहरू",
+       "allpagessubmit": "जान्या",
+       "allpagesprefix": "यी सुरुका अक्षरसहितका पानाहरू हेद्या:",
+       "categories": "श्रेणीहरू",
+       "listusers-noresult": "प्रयोगकर्ता भेटियानन्",
+       "activeusers": "सक्रिय प्रयोगकर्ताहरूको सूची",
+       "activeusers-intro": "यो सूची ती प्रयोगकर्तानको हो जनले विगत $1 {{PLURAL:$1|दिन| दिन}}मी  गतिविधि देखायाकाछन्।",
+       "activeusers-count": "विगत {{PLURAL:$3|दिनमी|$3 दिनहरूमी}}  $1 {{PLURAL:$1|सम्पादन गरियो|सम्पादनहरू गरिया}}",
+       "activeusers-from": "यहाँबठे सुरु हुन्या प्रयोगकर्ताहरू धेकाओ:",
+       "activeusers-hidesysops": "प्रवन्धकहरू लुकाउन्या",
+       "activeusers-noresult": "प्रयोगकर्ताहरू भेटियानन्",
+       "mailnologintext": "तमीले अरु प्रयोगकर्तानलाई ईमेल पठाउनको लागि आफु पहिली [[Special:UserLogin|प्रवेश(लगइन)गर्याको]] हुनुपडन्छ र [[Special:Preferences|आफ्नो रोजाइहरूमी]] एउटा वैध ईमेल ठेगाना भयाको हुनुपडन्छ ।",
+       "emailpagetext": "तल दियाको फार्मले तमी यै {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्द्या हौ । तमीले जो ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता रोजाईहरू]]मी दियाका छियौ त्यो यै इमेललाई \"पठाउने\" को रूपमी आउन्याछ, अतः प्राप्तकर्ता तमीलाई सिधै जवाफ दिनसक्द्याछ ।",
+       "usermaildisabledtext": "यै विकिमी तम और प्रयोगकर्तानलाई ई-मेल पठाउन नाइसक्दा",
        "mywatchlist": "मेरो ध्यान सूची",
        "watch": "ध्यान राख",
        "watchthispage": "यै पानाको ध्यान राख",
        "unwatch": "ध्यान हटाओ",
        "unwatchthispage": "ध्यान हटाओ",
        "notanarticle": "सामाग्री छैन",
+       "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}}मी दुर्घटनाको कारणले गडबडी आउनसक्द्या कुरडीलाई रोक्न यसा पानाहरूलाई मेट्नबठे निषेध गरियाको छ ।",
+       "rollback": "सम्पादनहरू उल्टाउन्या",
+       "rollbacklink": "पैल्लिका रुपमि फर्काउन्या",
+       "rollbacklinkcount": "रोल्ब्याक $1 {{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
+       "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|कुरडी]])द्वारा [[User:$1|$1]]द्वारा गर्याको पछिल्लो संशोधनतर्फ उल्टायाका सम्पादनहरू",
+       "rollback-success": "$1द्वारा उल्टायाका सम्पादनहरू;\nपछिल्लो संशोधनमी $2द्वारा परिवर्तन गरिबर पुनः फर्कायाको।",
+       "protectlogpage": "सुरक्षण लग",
+       "protect-default": "सब्बै प्रयोगकर्तानहरूलाई अनुमति दिन्या",
+       "protect-level-autoconfirmed": "नौला तथा दर्ता भयाका प्रयोगकर्तानलाई मात्र अनुमति दिन्या",
+       "protect-cascade": "यै पानामी संलग्न सुरक्षित पानाहरू (लामबद्द सुरक्षा)",
+       "pagesize": "(अक्षरहरू)",
+       "undeletepage": "मेट्याका पानाहरू हेद्या र पूर्वरुपमी फर्काउन्या",
+       "undeleterevisions": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} संग्रहित",
+       "undeletehistory": "यदि कुनै पानालाई पुन: स्थापन गरायौ भण्या सम्पूर्ण संस्करणहरू इतिहासमी पुन:स्थापन हुन्याछन् ।\nयदि यै नामबठे  नयाँ पानो निर्माण भैसक्याको छ भण्या पुन: स्थापित संस्करणहरू पूर्व इतिहासको रुपमी स्थापित हुन्याछन् ।",
+       "undeleterevdel": "यदि यो मल्लो पानो बणन्छ  या फाइल संस्करणहरू आंशिक मेटियाका छन् भण्या मेट्न्या काम रद्द गरिन्या छैन।\nत्यै अवस्थामी तमीले छनौटमी अन्तिम मेटियाको नयाँ संस्करण नलुकाउन्यामी चिनो लगाउनु पडन्छ ।",
+       "undelete-revision": "$3द्वारा $1को ($4को  समय $5 मी) मेट्याका संशोधनहरू :",
+       "undeletedrevisions": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} पुनर्स्थापित गरियो",
+       "undeletedrevisions-files": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरू}} पुनर्स्थापित गरियो",
+       "undeletedfiles": "{{PLURAL:$1|१ फाइल|$1 फाइलहरू }} पूर्वस्थितिमी ल्याइयो",
+       "undelete-header": "भर्खरै मेटायाका पानाहरू हेद्दाकीलाई [[Special:Log/delete|मेटायाका लग]]मी जाओ।",
+       "undelete-search-prefix": "सुरुवाती शब्द अनुसार पानाहरू खोज",
+       "undelete-no-results": "मेटियाका पानाहरूको अभिलेखमी क्वै पन मिल्दा पानाहरू नाइभेटिया ।",
+       "namespace": "नामठौर:",
+       "invert": "रोजाइ उल्टाउन्या",
+       "tooltip-invert": "छानियाका नेमस्पेसहरूमी रयाका पानाहरूमी गरिएका फेरबदलहरू लुकौन यैमी चिनो लगाओ  (और सम्बन्धित नेमस्पेस यदि छानियाका भया)",
+       "namespace_association": "सम्बन्धित नेमस्पेस",
+       "tooltip-namespace_association": "कुरडिकानी या विषय नेमस्पेसहरुलाई सम्वन्धित नेमस्पेसको रुपमि लिनकि लेखा सन्दुकमि चिनो लगाइदिय ।",
        "blanknamespace": "(मुख्य)",
        "contributions": "{{GENDER:$1|प्रयोगकर्ता}}को योगदान",
+       "mycontris": "मेरो योगदानहरू",
+       "month": "महिना बठे (लै पैल्ली):",
+       "year": "वर्ष बठे( लौ पैल्ली):",
+       "sp-contributions-toponly": "नवीनतम संशोधनका सम्पादनहरू मात्र धेकाओ",
+       "whatlinkshere": "याँखाइ की जुडन्छ",
+       "whatlinkshere-title": "$1 सित जोडियाका पानाहरू",
+       "whatlinkshere-page": "पानो",
+       "linkshere": "निम्न पानाहरू '''[[:$1]]''' मी जुडन्छ :",
+       "nolinkshere-ns": "चुनियाको नामस्थानमी '''[[:$1]]''' सित जुड्न्या पानाहरू नाइथिन्।",
+       "isredirect": "अनुप्रेषित पानो",
+       "istemplate": "पारदर्शिता",
+       "isimage": "फाइल लिङ्क",
+       "whatlinkshere-prev": "{{PLURAL:$1|पैलो|पैलो $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|अर्को|अर्को $1}}",
+       "whatlinkshere-links": "← लिंकहरु",
+       "whatlinkshere-hideredirs": "$1 अनुप्रेषित हुन्छ",
+       "whatlinkshere-hidetrans": "$1 पारदर्शन",
+       "whatlinkshere-hidelinks": "$1 लिङ्कहरु",
+       "whatlinkshere-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",
+       "ipb-blockingself": "तमी आफैलाई ब्लक गद्द लाग्या छौ ! क्या तम पक्का यसो गद्द चाहन्छौ ?",
+       "blocklist": "ब्लक गर्याका प्रयोगकर्ताहरू",
+       "ipblocklist": "ब्लक गर्याका प्रयोगकर्ताहरू",
+       "ipblocklist-legend": "ब्लक गर्याका प्रयोगकर्ताहरू खोज",
+       "blocklink": "रोक्न्या",
        "contribslink": "योगदानहरू",
+       "block-log-flags-anononly": "नाम नभयाका प्रयोकर्ताहरू मात्र",
+       "xffblockreason": "एउटा आइपि ठेगाना जुन X-Forwarded-For हेडरमी रह्याको छ, या त तमरो हो वा त्यै प्रक्सी सर्भरको हो जैको प्रयोग तमी गद्दा छौ रे यै माथि प्रतिबन्ध लगाइयाको छ । वास्तविक कारण थ्यो:$1",
+       "ipbblocked": "तमी अरु प्रयोगकर्तानहरूलाई ब्लक गर्न वा उनीहरूको ब्लक खोल्न नाइसक्दा किनभने तमी आफै ब्लक भयाका छौ ।",
+       "lockdbtext": "डेटाबेसमी ताला लगाउनाले सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो रौजाईमी परिवर्तन, आफ्नो ध्यानसूचीमी सम्पादन, र अन्य वस्तु जैको लागि डेटाबेसमी परिवर्तन गरें हुन्छ, त्यैबठे वन्चित हुन्याछ । कृपया यो सुनिश्चित गर कि तम यो गर्न चाहन्छौ, र तम रक्षण पश्चात ताला खोल्न्या हौ ।",
+       "movepagetext-noredirectfixer": "तल दियाको फारमले पानाको नाम परिवर्तन गद्याछ, उइको सबै इतिहास पनि नयाँ नामले धेकिन्याछ ।\nपुरानो शीर्षक नयाँ नाममी अनुप्रेषण गद्याछ ।\nमूल शीर्षक तर्फ लिएर जान्या सबै अनुप्रेषणहरूलाई तम स्वचालित रूपले परिवर्तन गद्द सक्द्या हौ ।\nयदि तम यसो नाइ गद्या भया कृपया [[Special:DoubleRedirects|दोहोरो]] पुनर्निर्देशन वा [[Special:BrokenRedirects|टुटेको पुनर्निर्देशन]]का लागि पक्कै जाँच गर ।\nलिङ्क आफ्नो स्थानमै रहोस्, यो सुनिश्चित गर्ने जिम्मेवारी तमरो हो ।\n\nयदि नयाँ शीर्षकको लेख पहिले देखि छ भण्या नाम परिवर्तन '''हुन''' सक्दैन । तर यदि नयाँ शीर्षक भयाको लेख खाली छ अथवा कतै अन्य स्थानमी अनुप्रेषित गद्दैछ र साथै उइको पुरानो संस्करण छैन भण्या त्यैको नाम परिवर्तन हुन्याछ ।\nयैको अभिप्राय यो हो कि यदि तमीबठे गल्ती भयाको छ भण्या तम फेरी पुरानो नाममी यस पानालाई सार्न सक्द्याछौ, र साथै तम कुनै पहिली बठे रह्याको पानाको सट्टा यो स्थानान्तरण गद्द सक्द्या हौन ।\n\n<strong>चेतावनी!<strong>\nयदि पानो खासै लोकप्रिय छ भण्या त्यैको लागि यो एउटा ठुलो र अकस्मात परिवर्तन हुन सक्छ;\nअगाडी बढ्नु भन्ना पहिली तमी यैको नतिजासँग परिचित भयाकाछौ ।",
+       "cant-move-user-page": "तमसँग प्रयोगकर्ता पानाहरू साद्या अनुमती नाइथिन् (सहपानाहरू बाहेक)",
+       "cant-move-to-user-page": "तमसँग पानाहरूलाई प्रयोगकर्ता पानामी साद्या अनुमती नाइथिन् (प्रयोगकर्ता सहपृष्ठहरूमी बाहेक)",
+       "move-subpages": "उप पानाहरू सार्न्या($1 सम्मको)",
+       "move-talk-subpages": "कुरडी पानाको सह-पानाहरू साद्य($1 सम्मको )",
+       "movepage-max-pages": "अधिकतम $1 {{PLURAL:$1|पाना|पानाहरू}}को नाम बदलि सकियाको छ र अरु स्वत: नाम बदलिन्या छैन ।",
+       "movelogpage": "लग साद्य्या",
+       "movelogpagetext": "सब्बै नाम बदल्याका पानानको सूची तल दियाकोछ।",
+       "movesubpagetext": "यै पानाको $1 {{PLURAL:$1|सह-पाना|सह-पानाहरू}} तल धेकायाको :",
+       "movenosubpage": "यै पानाको उपपाना नाइथी",
+       "protectedpagemovewarning": "<strong>सूचना:</strong> यै पानालाई सुरक्षित गरियाको छ यसकारण प्रवन्धकको विशेषाधिकार प्राप्त प्रयोगकर्ताहरूले मात्र यैको नाम बदल्न सक्द्या छन् ।\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दियाको छ:",
+       "export": "पानहरु पठौन्या",
+       "exporttext": "तमी विशिष्ठ पानाको विषय वस्तु र सम्पादन इतिहासलाई निर्यात गद्द सक्द्याहौ अथवा पानाहरूको समूहका केहि XML मी बेर्न सक्द्याहौ।\nयो [[Special:Import|आयात पाना]]को सहायताले मीडियाविकीको प्रयोग गरिवर दोश्रो विकीबठे आयात गद्द सकिन्याछ।\n\nपानाहरूको निर्यात गद्दका लागि, तल विषय वस्तु बाकसमी शीर्षक देओ, एक शीर्षक प्रति पङ्क्ति, र छान कि तम वर्तमान अवतरणसँग पुरानै अवतरण पनि चाहन्छौ वा चाहदैनौ, वा पछिल्लो सम्पादनका बारेमी जानकारीसँग मात्रै वर्तमान अवतरण चाहन्छौ।\n\nपछीको स्थितिको लागि तमी लिङ्कको पनि प्रयोग गद्द सक्द्याहौ, उदाहरणको लागि, \"[[{{MediaWiki:Mainpage}}]]\" पृष्ठको लागि [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
+       "export-templates": "ढाँचाहरू संलग्न गर",
+       "thumbnail-more": "ठूलो बनौन्या",
+       "import-interwiki-history": "यै पामैकोलागि सबै इतिहास संशोधनहरू प्रतिलिपि गद्या",
+       "import-noarticle": "आयात गद्दाकी लाई पानाहरू नाइथिन्",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} आयात भयो",
+       "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": "यो पानो सुरक्षित अरियाको छ। यैको श्रोत हेद्द सकन्छौ ।",
+       "tooltip-ca-history": "यै पृष्ठका पैल्लिका पुनरावलोकनहरु",
+       "tooltip-ca-undelete": "मेट्याको भया पनि यै पानाको सम्पादनहरू पुन:प्राप्त गर",
+       "tooltip-ca-move": "यो पानालाई अर्खिठौर सार",
+       "tooltip-ca-watch": "यै पानालाई तमरा ध्यानसूचीमि थपिदिय",
        "tooltip-search": "{{SITENAME}}मी खोज",
+       "tooltip-search-go": "यदि यो नामको पृष्ठ रयाको छ भण्या तैमी जान्या ।",
        "tooltip-search-fulltext": "यै पाठका लागि पानामी खोज",
+       "tooltip-p-logo": "खास पानो",
+       "tooltip-n-mainpage": "खास पानामी झान्या",
+       "tooltip-n-mainpage-description": "खास पानामी झा",
+       "tooltip-n-portal": "आयोजनाका बारेमी , तम कि अद्द सकन्छौ , समान काखाइ  भेटौन्या",
+       "tooltip-n-currentevents": "हालैका घटनाको बारेमी पृष्ठभूमि जानकारी पत्ता लागाइदिय",
+       "tooltip-n-recentchanges": "विकिमा अरियाका हालैका भया फेरबदलका शुचि ।",
+       "tooltip-n-randompage": "जो कोइ पानो खोल्या",
+       "tooltip-n-help": "खोज्जु पड्या ठौर ।",
+       "tooltip-t-whatlinkshere": "यो सित जोडियाका सब्बै विकि पानानको सूची",
        "tooltip-t-recentchangeslinked": "यै पानामी जोडियाका पानामी अहिलको परिवर्तन",
+       "tooltip-feed-atom": "यै पानाकी लेखा एक एटम फिड",
+       "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": "यो खास पानो हो , तमलाईँ आफै सम्पादन गद्द सकन्छौ",
+       "tooltip-ca-nstab-project": "आयोजना पानो हेरिदिय",
+       "tooltip-ca-nstab-image": "चित्र पानो हेर",
+       "tooltip-ca-nstab-template": "टेम्प्लेट(नमूना) हेरिदिय",
+       "tooltip-ca-nstab-category": "श्रेणी पानो हेर",
+       "tooltip-save": "तमले अरेका परिवर्तनहरू संग्रह अरिदिय",
+       "tooltip-preview": "तमरा परिवर्तनको पूर्वरूप , कृपया संग्रह गद्दाहै अगाडी यो प्रयोग गरिदिय !",
+       "tooltip-diff": "तमले पाठमि के के परिवर्तन गर्या भणिबरे धेकाउन्या",
+       "tooltip-rollback": "\"पूर्वरुप\" ले यो पानाक्क सम्पादन(हरू) खारेज अरिबरे पानालाई एक क्लिकमि पाछाडीको सम्पादनमि पुगाइदिन्छ ।",
+       "tooltip-undo": "\"रद्द\"ले पछिल्लो सम्पादन खारेज गरिबरे पूर्वावलोकनमा धेकाउछ ।\nयैले सारांशमा कारण राख्ख दिन्याछ।",
+       "tooltip-summary": "नानो सारांश हालिदिय",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
+       "anonusers": "{{SITENAME}} का नाम नभयाका {{PLURAL:$2| प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
+       "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयैलाई <strong>नहीं</strong> भद्य्या!",
+       "pageinfo-toolboxlink": "यै पानाको जाणकारी",
+       "rcpatroldisabled": "अहिलका परिवर्तनहरू गस्ती निष्क्रिय पार्याको छ ।",
+       "rcpatroldisabledtext": "अहिलका परिवर्तनहरू गस्ती गुण अहिलको लागि निष्कृय पारियाको छ ।",
+       "patrol-log-header": "गस्ती गर्याका संस्करणहरूको लग यस प्रकार रह्याका छन् ।",
+       "previousdiff": "← पुरानो सम्पादन",
+       "nextdiff": "नौलो सम्पादन →",
+       "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|पानो|पानाहरू}}",
+       "file-nohires": "उपर रिजोल्युशन अनुपलब्ध",
+       "svg-long-desc": "SVG चित्र,सानतिनो $1 × $2 पिक्सेलहरु, फाइल आकार: $3",
+       "show-big-image": "खास फाइल",
+       "show-big-image-preview": "यै पूर्व रुपको आकार: $1।",
+       "show-big-image-other": "और {{PLURAL:$2|resolution|रिजोल्युशनहरु}}: $1।",
+       "show-big-image-size": "$1 × $2 पिक्सल",
+       "newimages": "नौला फाइलहरूको ग्यालरी",
+       "imagelisttext": " '''$1''' {{PLURAL:$1|फाइल|फाइलहरू}} को निम्न सुची ,क्रमवद्ध $2.",
+       "newimages-summary": "यै खास पानाले अन्तिम अपलोड गर्याका फाइलहरू धेकाउँन्छ ।",
+       "days": "{{PLURAL:$1|$1 दिन|$1 दिनहरू}}",
+       "metadata": "मेटाडेटा",
+       "metadata-help": "यै फाइलमि अतिरिक्त जानकारीहरु छन्, यैलाई बनाउन सम्भवतः डिजिटल क्यामेरा और स्क्यानर प्रयोग गरियाको हुनसकन्छ । यदि यै फाइललाई खास अवस्थाबठे फेरबदल गरियाको हो भण्या यै फाइलले  सब्बै विवरण प्रतिबिम्बित गद्द सक्यानाइथी ।",
+       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\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": "क्षैतिज संकल्प(resolution)",
+       "exif-yresolution": "ऊर्ध्वाधर संकल्प(resolution)",
+       "exif-datetime": "फाइल परिवर्तन मिति और समय",
+       "exif-make": "क्यामेरा बनौन्या",
+       "exif-model": "क्यामरा मोडल",
+       "exif-software": "प्रयोग अरियाको सफ्टवेयर",
+       "exif-exifversion": "Exif संस्करण",
+       "exif-colorspace": "वर्ण ठौर",
+       "exif-datetimeoriginal": "डेटा चल्याको मिति और समय",
+       "exif-datetimedigitized": "मिति लै समय अंकीयकरण",
+       "exif-orientation-1": "सानतिनो",
+       "namespacesall": "सब्बै",
+       "monthsall": "सब्बै",
+       "confirmrecreate": "प्रयोगकर्ता [[User:$1|$1]] ([[User talk:$1|कुरडी]])ले  तमले  सम्पादन सुरु गर्यापछि यो पानो मेट्याकाछन् । कारण थ्यो:\n: ''$2''\nकृपया सुनिश्चित गर कि तम यो पानो साँच्चै निर्माण गद्द चाहन्छौ ।",
+       "size-bytes": "$1 अक्षरहरू",
+       "size-kilobytes": "$1 किलोबाइट",
+       "size-megabytes": "$1 मेगाबाइट",
+       "size-gigabytes": "$1 गिगाबाइट",
+       "lag-warn-normal": " $1 {{PLURAL:$1|सेकेन्ड |सेकेन्डहरू}} भन्दा नौला फेरबदलहरू यै सूचीमी नधेकाउन सक्छ ।",
+       "lag-warn-high": "डेटावेस सर्भरको मस्तै ढिलाको कारणले  $1 {{PLURAL:$1|सेकेन्ड|सेकेन्डहरू}} पछिका परिवर्तनहरू नधेकिन सक्छ ।",
+       "watchlisttools-view": "आधारित फेरबदलीहरू हेर",
+       "signature": "[[{{ns:user}}:$1|$2 ]]",
        "specialpages": "खास पानो",
-       "searchsuggest-search": "खोज"
+       "specialpages-note": "* साधारण खास पानाहरू।\n* <span class=\"mw-specialpagerestricted\">निषेधित खास पानाहरू।</span>",
+       "specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
+       "tags": "मान्य परिवर्तन ट्यागहरू",
+       "tag-filter": "[[Special:Tags|पुछड]] छानिन्या",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
+       "tags-hitcount": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरू}}",
+       "tags-delete-explanation-warning": "यो क्रिया <strong>अपरिवर्तनीय</strong> हो र <strong>त्यसलाई परिवर्तन गर्न नाईसकिंदो</strong>, डेटाबेस प्रवन्धक पनि यैलाई केहि गद्द सक्दाइनन् । विश्वासपूर्ण रूपले तम तय गर कि तमी यै ट्यागलाई हटाउन चाहन्छौ ।",
+       "logentry-delete-delete": "$1 बठे पानो $3 {{GENDER:$2|मेटाइयो}}",
+       "logentry-move-move": "$1 {{GENDER:$2|द्वारा}} $3 पृष्ठलाई $4 मि सारियो",
+       "logentry-newusers-create": "प्रयोगकर्ता खाता $1 {{GENDER:$2|खोलियो}}",
+       "logentry-upload-upload": "$1 ले $3 {{GENDER:$2|अपलोड अरेका छन्}}",
+       "feedback-bugornote": "यदि तमी कुनै प्राविधिक समस्यालाई विस्तारले सम्झाउन तयार छौ भण्या कृपया [$1 बग राख]।\nयदि हैन, भण्या तमी तल दियाको सरल फारमको प्रयोग गद्दसक्द्याहौ । तमरो टिप्पणी, तमरो प्रयोगकर्ता नाम र तमरो ब्राउजरको नाम सहित \"[$3 $2]\" पानामी जोडिन्याछ ।",
+       "searchsuggest-search": "खोज",
+       "api-error-duplicate": "यै साइटमी पहिलीबठे यस्तै सामग्री {{PLURAL:$1|भयाको [$2 अर्को फाइल छ]|भयाका  [$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|फाइल|फाइलहरू}} नकल प्रति बनाउन्या",
+       "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 c6224c2..b7fb79a 100644 (file)
        "jumptonavigation": "πλοήγηση",
        "jumptosearch": "αναζήτηση",
        "view-pool-error": "Λυπούμαστε, οι εξυπηρετητές είναι υπερφορτωμένοι αυτή τη στιγμή.\nΠάρα πολλοί χρήστες προσπαθούν να προβάλουν αυτή τη σελίδα.\nΠαρακαλούμε περιμένετε λίγο πριν ξαναπροσπαθήσετε να προσπελάσετε αυτή τη σελίδα.\n\n$1",
-       "generic-pool-error": "Λυπούμαστε, οι εξυπηρετητές είναι υπερφορτωμένοι αυτή τη στιγμή.\nΠάρα πολλοί χρήστες προσπαθούν να προβάλουν αυτό τον πόρο.\nΠαρακαλούμε περιμένετε λίγο πριν ξαναπροσπαθήσετε να προσπελάσετε αυτό τον πόρο ξανά.",
+       "generic-pool-error": "Λυπούμαστε, οι εξυπηρετητές είναι υπερφορτωμένοι αυτή τη στιγμή.\nΠάρα πολλοί χρήστες προσπαθούν να προβάλουν αυτό τον πόρο.\nΠαρακαλούμε περιμένετε λίγο πριν ξαναπροσπαθήσετε να προσπελάσετε αυτό τον πόρο.",
        "pool-timeout": "Χρόνος αναμονής για το κλείδωμα",
        "pool-queuefull": "Η ουρά της δεξαμενής διεργασιών είναι πλήρης",
        "pool-errorunknown": "Άγνωστο σφάλμα",
        "pool-servererror": "Η υπηρεσία καταμετρητή ομαδοποίησης δεν είναι διαθέσιμη ($1).",
-       "poolcounter-usage-error": "Σφάλμα χρήσης:$1",
+       "poolcounter-usage-error": "Σφάλμα χρήσης: $1",
        "aboutsite": "Σχετικά με {{SITENAME}}",
        "aboutpage": "Project:Σχετικά",
        "copyright": "Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1 εκτός αν αναφέρεται διαφορετικά.",
        "policy-url": "Project:Πολιτική",
        "portal": "Πύλη κοινότητας",
        "portal-url": "Project:Πύλη κοινότητας",
-       "privacy": "Πολιτική ιδιωτικότητας",
-       "privacypage": "Project:Πολιτική ιδιωτικότητας",
+       "privacy": "Πολιτική ιδιωτικού απορρήτου",
+       "privacypage": "Project:Πολιτική ιδιωτικού απορρήτου",
        "badaccess": "Σφάλμα άδειας",
        "badaccess-group0": "Δεν επιτρέπεται να εκτελέσετε την ενέργεια που ζητήσατε.",
        "badaccess-groups": "Η ενέργεια που ζητήσατε είναι περιορισμένη σε χρήστες που ανήκουν {{PLURAL:$2|στην ομάδα|σε μία από τις ομάδες}}: $1.",
        "readonly": "Κλειδωμένη βάση δεδομένων",
        "enterlockreason": "Εισαγάγετε μια αιτία για το κλείδωμα και μια εκτίμησή για το πότε το κλείδωμα αυτό θα αρθεί",
        "readonlytext": "Η βάση δεδομένων είναι επί του παρόντος κλειδωμένη απέναντι σε νέες καταχωρίσεις και άλλες τροποποιήσεις, πιθανότατα λόγω συντήρησης ρουτίνας, μετά την οποία θα επανέλθει σε κανονική λειτουργία.  \n\nΟ διαχειριστής που την κλείδωσε έδωσε την ακόλουθη εξήγηση: $1",
-       "missing-article": "Η βάση δεδομένων δεν βρήκε κείμενο μιας σελίδας που θα έπρεπε να βρεθεί, με όνομα «$1» $2.\n\nΑυτό συνήθως προκαλείται ακολουθώντας ένα σύνδεσμο \"διαφοράς\" ή σύνδεσμο προς ιστορικό μιας σελίδας που έχει διαγραφεί.\n\nΕάν δεν πρόκειται για κάτι τέτοιο, μπορεί να βρήκατε ένα σφάλμα στο λογισμικό.\nΠαρακαλούμε αναφέρετε το σε ένα [[Special:ListUsers/sysop|διαχειριστή]], δίνοντας το URL.",
+       "missing-article": "Η βάση δεδομένων δεν βρήκε το κείμενο της σελίδας που θα έπρεπε να έχει βρεθεί, με όνομα «$1» $2.\n\nΑυτό συνήθως προκαλείται ακολουθώντας έναν παρωχημένο σύνδεσμο διαφορών ή ιστορικού κάποιας σελίδας που έχει διαγραφεί.\n\nΕάν δεν πρόκειται για κάτι τέτοιο, μπορεί να βρήκατε ένα σφάλμα στο λογισμικό.\nΠαρακαλούμε αναφέρετέ το αυτό σε κάποιο [[Special:ListUsers/sysop|διαχειριστή]], σημειώνοντας τη διεύθυνση URL.",
        "missingarticle-rev": "(αναθεώρηση#: $1)",
        "missingarticle-diff": "(Διαφ: $1, $2)",
-       "readonly_lag": "Η βάση δεδομένων έχει κλειδωθεί αυτόματα για να μπορέσουν οι επιμέρους servers των αντιγράφων της βάσης δεδομένων (slaves) να καλύψουν τη διαφορά με τον κεντρικό server του πρωτοτύπου της βάσης (master).",
+       "readonly_lag": "Η βάση δεδομένων έχει κλειδωθεί αυτόματα για να μπορέσουν οι επιμέρους εξυπηρετητές των αντιγράφων της βάσης δεδομένων να καλύψουν τη διαφορά με τον κεντρικό εξυπηρετητή του πρωτοτύπου της βάσης δεδομένων.",
        "internalerror": "Εσωτερικό σφάλμα",
        "internalerror_info": "Εσωτερικό σφάλμα: $1",
        "internalerror-fatal-exception": "Ανεπανόρθωτη εξαίρεση τύπου «$1»",
        "filecopyerror": "Δεν ήταν δυνατή η αντιγραφή του αρχείου «$1» στο «$2».",
-       "filerenameerror": "Î\94εν ÎµÎ¯Î½Î±Î¹ δυνατή η μετονομασία του αρχείου «$1» σε «$2».",
+       "filerenameerror": "Î\94εν Î®Ï\84αν δυνατή η μετονομασία του αρχείου «$1» σε «$2».",
        "filedeleteerror": "Δεν ήταν δυνατή η διαγραφή του αρχείου «$1».",
-       "directorycreateerror": "Î\94εν Î¼Ï\80οÏ\81οÏ\8dÏ\83ε Î½Î± Î´Î·Î¼Î¹Î¿Ï\85Ï\81γηθεί Î· ÎºÎ±Ï\84ηγοÏ\81ία «$1».",
+       "directorycreateerror": "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Ï\84ηÏ\82 ÎºÎ±Ï\84ηγοÏ\81ίαÏ\82 «$1».",
        "directoryreadonlyerror": "Ο κατάλογος «$1» είναι μόνο για ανάγνωση.",
        "directorynotreadableerror": "Ο κατάλογος «$1» δεν είναι αναγνώσιμος.",
-       "filenotfound": "Î\94εν ÎµÎ¯Î½Î±Î¹ δυνατή η ανεύρεση του αρχείου «$1».",
-       "unexpected": "Μη προσδοκώμενη τιμή: «$1»=«$2».",
-       "formerror": "Σφάλμα: Δεν ήταν δυνατή η υποβολή της φόρμας!",
-       "badarticleerror": "Η ενέργεια αυτή δεν μπορεί να εκτελεσθεί στη συγκεκριμένη σελίδα.",
+       "filenotfound": "Î\94εν Î®Ï\84αν δυνατή η ανεύρεση του αρχείου «$1».",
+       "unexpected": "Μη αναμενόμενη τιμή: «$1»=«$2».",
+       "formerror": "Σφάλμα: Δεν ήταν δυνατή η υποβολή της φόρμας.",
+       "badarticleerror": "Η ενέργεια αυτή δεν μπορεί να εκτελεσθεί σε αυτήν τη σελίδα.",
        "cannotdelete": "Η σελίδα ή το αρχείο «$1» δεν μπόρεσε να διαγραφεί.\nΕνδεχομένως να έχει ήδη διαγραφεί από κάποιον άλλον.",
-       "cannotdelete-title": "Î\91δÏ\8dναÏ\84η η διαγραφή της σελίδας «$1»",
+       "cannotdelete-title": "Î\94εν ÎµÎ¯Î½Î±Î¹ Î´Ï\85ναÏ\84ή η διαγραφή της σελίδας «$1»",
        "delete-hook-aborted": "Η επεξεργασία ματαιώθηκε από το άγκιστρο του συντακτικού αναλυτή.\nΔεν έδωσε εξήγηση.",
-       "no-null-revision": "Î\94εν Î¼Ï\80οÏ\81οÏ\8dÏ\83ε Î½Î± Î´Î·Î¼Î¹Î¿Ï\85Ï\81γηθεί Î½Î­Î± Î¼Î·Î´ÎµÎ½Î¹ÎºÎ® Î±Î½Î±Î¸ÎµÏ\8eÏ\81ηÏ\83η Î³Î¹Î± Ï\84η Ï\83ελίδα \"$1\"",
+       "no-null-revision": "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î½Î­Î±Ï\82 Î¼Î·Î´ÎµÎ½Î¹ÎºÎ®Ï\82 Î±Î½Î±Î¸ÎµÏ\8eÏ\81ηÏ\83ηÏ\82 Î³Î¹Î± Ï\84η Ï\83ελίδα Â«$1»",
        "badtitle": "Ακατάλληλος τίτλος",
        "badtitletext": "Ο τίτλος της σελίδας που ζητήσατε δεν είναι έγκυρος ή είναι κενός ή πρόκειται για έναν εσφαλμένα συνδεδεμένο διαγλωσσικό τίτλο ή εσφαλμένα συνδεδεμένο τίτλο ανάμεσα σε διαφορετικά wiki.",
        "title-invalid-empty": "Ο τίτλος σελίδας που ζητήσατε είναι κενός ή περιέχει μόνο όνομα ονοματοχώρου.",
        "title-invalid-utf8": "Ο τίτλος σελίδας που ζητήσατε περιέχει μη έγκυρη ακολουθία UTF-8.",
-       "title-invalid-interwiki": "Î\9f Ï\84ίÏ\84λοÏ\82 Ï\80εÏ\81ιέÏ\87ει Ï\83Ï\8dνδεÏ\83μο interwiki",
+       "title-invalid-interwiki": "Î\9f Ï\84ίÏ\84λοÏ\82 Ï\80οÏ\85 Î¶Î·Ï\84ήÏ\83αÏ\84ε Ï\80εÏ\81ιέÏ\87ει Ï\83Ï\8dνδεÏ\83μο interwiki Ï\80οÏ\85 Î´ÎµÎ½ Î¼Ï\80οÏ\81εί Î½Î± Ï\87Ï\81ηÏ\83ιμοÏ\80οιηθεί Ï\83ε Ï\84ίÏ\84λοÏ\85Ï\82.",
        "title-invalid-talk-namespace": "Ο τίτλος σελίδας που ζητήσατε αναφέρεται σε σελίδα συζήτησης που δεν μπορεί να υπάρχει.",
        "title-invalid-characters": "Ο τίτλος σελίδας που ζητήσατε περιέχει μη έγκυρους χαρακτήρες: «$1».",
        "title-invalid-relative": "Ο τίτλος έχει σχετική διαδρομή. Τίτλοι παρόμοιων σελίδων (./, ../) δεν είναι έγκυροι, διότι συχνά δεν θα είναι προσβάσιμοι όταν χειρίζονται από το πρόγραμμα περιήγησης του χρήστη.",
        "title-invalid-magic-tilde": "Ο τίτλος σελίδας που ζητήσατε περιέχει μη έγκυρη ακολουθίας μαγικών περισπωμένων (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Ο τίτλος σελίδας που ζητήσατε είναι υπερβολικά μεγάλος. Δεν πρέπει να είναι μεγαλύτερος από $1 bytes σε κωδικοποίηση UTF-8.",
+       "title-invalid-too-long": "Ο τίτλος σελίδας που ζητήσατε είναι υπερβολικά μεγάλος. Δεν πρέπει να είναι μεγαλύτερος από $1 {{PLURAL:$1|byte|bytes}} σε κωδικοποίηση UTF-8.",
        "title-invalid-leading-colon": "Ο τίτλος σελίδας που ζητήσατε περιέχει μια μη έγκυρη άνω και κάτω τελεία στην αρχή.",
        "perfcached": "Τα δεδομένα που ακολουθούν είναι cached και είναι πιθανόν να μην είναι επικαιροποιημένα. Ένα μέγιστο των  {{PLURAL:$1|one result is|$1 results are}} διαθέσιμο στην cache.",
        "perfcachedts": "Τα ακόλουθα δεδομένα είναι αποθηκευμένα στην προσωρινή μνήμη και ενημερώθηκαν τελευταία φορά στις $2 στις $3. Υπάρχει διαθέσιμο ένα μέγιστο {{PLURAL:$4|ενός αποτελέσματος|$4 αποτελεσμάτων}} στην προσωρινή μνήμη.",
        "querypage-no-updates": "Οι ενημερώσεις για αυτή τη σελίδα είναι απενεργοποιημένες. Τα δεδομένα εδώ δεν θα ανανεωθούν προς το παρόν.",
        "viewsource": "Προβολή κώδικα",
        "viewsource-title": "Προβολή πηγαίου κώδικα για τη σελίδα $1",
-       "actionthrottled": "ΠεÏ\81ιοÏ\81ιÏ\83μένη ÎµÎ½Î­Ï\81γεια",
+       "actionthrottled": "Î\97 ÎµÎ½Î­Ï\81γεια Ï\80αÏ\81εμÏ\80οδίÏ\83Ï\84ηκε",
        "actionthrottledtext": "Σαν μέτρο κατά του spam, υπάρχει όριο στην εκτέλεση αυτής της ενέργειας πολλές φορές μέσα σε μικρό χρονικό διάστημα και έχετε ξεπεράσει αυτό το όριο.\nΠαρακαλούμε δοκιμάστε ξανά σε λίγα λεπτά.",
        "protectedpagetext": "Αυτή η σελίδα έχει προστατευθεί για πρόληψη επεξεργασίας ή άλλες ενέργειες.",
-       "viewsourcetext": "Μπορείτε να δείτε και να αντιγράψετε τον κώδικα αυτής της σελίδας:",
-       "viewyourtext": "Μπορείτε να προβάλετε και να αντιγράψετε τον κώδικα των '''επεξεργασιών σας''' σε αυτήν τη σελίδα:",
-       "protectedinterface": "Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.\n\nΓια να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wikis, παρακαλούμε χρησιμοποιήστε  [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικοποίησης του  MediaWiki.",
+       "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",
        "passwordreset": "Κωδικός επαναφοράς",
        "passwordreset-text-one": "Συμπληρώστε την παρακάτω φόρμα για να επαναφέρετε τον κωδικό πρόσβασής σας.",
        "passwordreset-text-many": "{{PLURAL:$1|Συμπληρώστε ένα από τα πεδία για να λάβετε προσωρινό κωδικό πρόσβαση μέσω ηλεκτρονικού ταχυδρομείου.}}",
-       "passwordreset-legend": "Επαναφορά κωδικού πρόσβασης",
        "passwordreset-disabled": "Η επαναφορά κωδικού πρόσβασης έχει απενεργοποιηθεί σε αυτό το wiki",
        "passwordreset-emaildisabled": "Τα χαρακτηριστικά ηλεκτρονικού ταχυδρομείου έχουν απενεργοποιηθεί σ' αυτό το wiki.",
        "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|αλλαγών σε σελίδες στη λίστα παρακολούθησής σας]]",
        "creating": "Δημιουργία: $1",
        "editingsection": "Επεξεργασία $1 (ενότητα)",
        "editingcomment": "Επεξεργασία $1 (νέο τμήμα)",
-       "editconflict": "ΣÏ\8dγκÏ\81οÏ\85Ï\83η ÎµÏ\80εξεÏ\81γαÏ\83ίαÏ\82: $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α;",
        "explainconflict": "Κάποιος άλλος χρήστης έχει αλλάξει αυτή τη σελίδα από τότε που αρχίσατε να την επεξεργάζεστε.\nΣτο επάνω τμήμα βρίσκεται το τρέχον κείμενο της σελίδας.\nΟι δικές σας αλλαγές εμφανίζονται στο κάτω τμήμα.\nΘα πρέπει να ενσωματώσετε τις αλλαγές σας στο τρέχον κείμενο.\n'''Μόνο''' το επάνω τμήμα θα αποθηκευθεί όταν πατήσετε \"{{int:savearticle}}\".",
        "yourtext": "Το κείμενό σας",
        "storedversion": "Αποθηκευμένη έκδοση",
        "yourdiff": "Διαφορές",
        "copyrightwarning": "Παρακαλούμε σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} θεωρούνται ότι δημοσιεύονται σύμφωνα με την $2 (βλ. $1 για λεπτομέρειες).\nΑν δεν επιθυμείτε τα κείμενά σας να τα επεξεργάζονται ανηλεώς άλλοι χρήστες και να τα διαδίδουν κατά βούληση, τότε να μην τα υποβάλλετε εδώ.<br />Μας υπόσχεστε επίσης ότι αυτό το γράψατε μόνοι σας ή το αντιγράψατε από κάποια ελεύθερη πηγή ως κοινό κτήμα ή κάτι ανάλογο.\n<strong>Μην υποβάλλετε δουλειά που προστατεύεται από πνευματικά δικαιώματα χωρίς άδεια!</strong>",
        "copyrightwarning2": "Σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} μπορούν να υποστούν επεξεργασία, να αλλαχθούν, ή να αφαιρεθούν από άλλους συνεισφέροντες. Αν δεν θέλετε τα γραπτά σας να υποστούν επεξεργασία κατά βούληση, τότε μην τα τοποθετήσετε σε αυτό το χώρο.<br />\nΕπίσης μας υπόσχεστε πως ό,τι γράφετε είναι δικό σας, ή αντιγραμμένο από μια πηγή που είναι κοινό κτήμα, ή μια παρόμοια ελεύθερη πηγή (δείτε $1 για λεπτομέρειες).\n'''ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΤΟΠΟΘΕΤΕΙΤΕ ΠΝΕΥΜΑΤΙΚΑ ΚΑΤΟΧΥΡΩΜΕΝΟ ΕΡΓΟ ΧΩΡΙΣ ΑΔΕΙΑ!'''",
+       "editpage-cannot-use-custom-model": "Το μοντέλο περιεχομένου αυτής της σελίδας δεν μπορεί να αλλάξει.",
        "longpageerror": "'''Σφάλμα: Το κείμενο που καταχωρήσατε έχει μήκος {{PLURAL:$1|ένα kilobyte|$1 kilobytes}}, το οποίο είναι μεγαλύτερο από το μέγιστο {{PLURAL:$2|του ενός kilobyte|των $2 kilobytes}}.'''\nΔεν μπορεί να αποθηκευτεί.",
        "readonlywarning": "'''Προειδοποίηση: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε τις επεξεργασίες σας αυτή τη στιγμή.'''\nΜπορείτε αν θέλετε να μεταφέρετε με αντιγραφή-επικόλληση το κείμενό σας σε αρχείο κειμένου και να το αποθηκεύσετε για αργότερα.\n\nΟ διαχειριστής που την κλείδωσε έδωσε την εξής εξήγηση: $1",
        "protectedpagewarning": "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή μπορούν να την επεξεργαστούν.'''\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
        "cascadeprotectedwarning": "'''Προσοχή:''' Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή συστήματος (sysop) να μπορούν να την επεξεργαστούν, επειδή περιλαμβάνεται {{PLURAL:$1|στην|στις}} {{PLURAL:$1|ακόλουθη|ακόλουθες}} διαδοχικά (cascaded) {{PLURAL:$1|προστατευμένη|προστατευμένες}} {{PLURAL:$1|σελίδα|σελίδες}}:",
        "titleprotectedwarning": "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε χρειάζονται [[Special:ListGroupRights|ειδικά δικαιώματα]] για να δημιουργηθεί.'''\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
        "templatesused": "{{PLURAL:$1|Πρότυπο που χρησιμοποιείται|Πρότυπα που χρησιμοποιούνται}} στη σελίδα αυτή:",
-       "templatesusedpreview": "{{PLURAL:$1|Πρότυπο|Πρότυπα}} που χρησιμοποιούνται σε αυτή την προεπισκόπηση:",
+       "templatesusedpreview": "{{PLURAL:$1|Πρότυπο που χρησιμοποιείται|Πρότυπα που χρησιμοποιούνται}} σε αυτήν την προεπισκόπηση:",
        "templatesusedsection": "{{PLURAL:$1|Πρότυπο|Πρότυπα}} που χρησιμοποιούνται σε αυτή την ενότητα:",
        "template-protected": "(προστατευμένη)",
        "template-semiprotected": "(ημιπροστατευμένη)",
        "revdelete-nooldid-title": "Άκυρη έκδοση-στόχος",
        "revdelete-nooldid-text": "Είτε δεν έχετε ορίσει μία έκδοση-στόχο για να εκτελεστεί η λειτουργία σε αυτή, είτε η ορισμένη έκδοση δεν υπάρχει, είτε προσπαθείτε να κρύψετε την τρέχουσα έκδοση.",
        "revdelete-no-file": "Το αρχείο που καθορίσατε δεν υπάρχει.",
-       "revdelete-show-file-confirm": "Î\95ίÏ\83Ï\84ε Ï\83ίγοÏ\85Ï\81οι Ï\8cÏ\84ι Î¸Î­Î»ÎµÏ\84ε Î½Î± Î´ÎµÎ¯Ï\84ε Î¼Î¯Î± Î´Î¹ÎµÎ³Ï\81αμμένη Î±Î½Î±Î¸ÎµÏ\8eÏ\81ηÏ\83η Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85 \"<nowiki>$1</nowiki>\" από τις $2 στις $3;",
+       "revdelete-show-file-confirm": "Î\95ίÏ\83Ï\84ε Ï\83ίγοÏ\85Ï\81οι Ï\8cÏ\84ι Î¸Î­Î»ÎµÏ\84ε Î½Î± Î´ÎµÎ¯Ï\84ε Î¼Î¯Î± Î´Î¹Î±Î³ÎµÎ³Ï\81αμμένη Î±Î½Î±Î¸ÎµÏ\8eÏ\81ηÏ\83η Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85 Â«<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-text-text": "Οι διαγραμμένες αναθεωρήσεις θα εξακολουθούν να εμφανίζονται στο ιστορικό της σελίδας, αλλά τα μέρη του περιεχομένου τους θα είναι απροσπέλαστα για το κοινό.",
-       "revdelete-text-file": "Οι διαγραμμένες αναθεωρήσεις θα εξακολουθούν να εμφανίζονται στο ιστορικό του αρχείου, αλλά μέρη του περιεχομένου τους δεν θα είναι προσβάσιμα για το κοινό.",
-       "logdelete-text": "Οι διαγραμμένες καταγραφές ενεργειών θα εξακολουθούν να εμφανίζονται στις σελίδες καταγραφών, αλλά μέρη του περιεχομένου τους, θα είναι απροσπέλαστα για το κοινό.",
+       "revdelete-text-text": "Οι διαγεγραμμένες αναθεωρήσεις θα εξακολουθούν να εμφανίζονται στο ιστορικό της σελίδας, αλλά τα μέρη του περιεχομένου τους θα είναι απροσπέλαστα για το κοινό.",
+       "revdelete-text-file": "Οι διαγεγραμμένες αναθεωρήσεις θα εξακολουθούν να εμφανίζονται στο ιστορικό του αρχείου, αλλά μέρη του περιεχομένου τους θα είναι απροσπέλαστα από το κοινό.",
+       "logdelete-text": "Οι διαγεγραμμένες καταγραφές συμβάντων θα εξακολουθούν να εμφανίζονται στις σελίδες καταγραφών, αλλά μέρη του περιεχομένου τους θα είναι απροσπέλαστα για το κοινό.",
        "revdelete-text-others": "Άλλοι διαχειριστές θα εξακολουθεί να είναι σε θέση να αποκτήσουν πρόσβαση στο κρυφό περιεχόμενο και για να αναιρέσουν τη διαγραφή, εκτός αν τίθενται πρόσθετοι περιορισμοί.",
        "revdelete-confirm": "Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
        "revdelete-suppress-text": "Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:\n* Ενδεχόμενη συκοφαντική δυσφήμιση\n* Ακατάλληλες προσωπικές πληροφορίες\n*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>",
        "logdelete-failure": "'''Η ορατότητα του καταλόγου δεν μπορούσε να ρυθμιστεί:'''\n$1",
        "revdel-restore": "αλλαγή ορατότητας",
        "pagehist": "Ιστορικό σελίδας",
-       "deletedhist": "Διαγραμμένο ιστορικό",
+       "deletedhist": "Διαγεγραμμένο ιστορικό",
        "revdelete-hide-current": "Σφάλμα κατά την απόκρυψη του αντικειμένου στις $2, $1: αυτή είναι η τωρινή έκδοση.\nΔεν μπορεί να αποκρυφθεί.",
        "revdelete-show-no-access": "Σφάλμα στην προβολή του αντικειμένου στις $2, $1: αυτό το αντικείμενο έχει σημειωθεί ως \"περιορισμένο\".\nΔεν έχετε πρόσβαση σε αυτό.",
        "revdelete-modify-no-access": "Σφάλμα κατά τη μετατροπή του αντικειμένου στις $2, $1: αυτό το αντικείμενο σημάνθηκε ως \"περιορισμένο\".\nΔεν έχετε πρόσβαση σε αυτό.",
        "searchmenu-new": "<strong>Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!</strong>\n{{PLURAL:$2|0=|Δείτε επίσης τη σελίδα που βρέθηκε με την αναζήτησή σας.|Δείτε επίσης τα αποτελέσματα της αναζήτησης που βρέθηκαν.}}",
        "searchprofile-articles": "Σελίδες περιεχομένου",
        "searchprofile-images": "Πολυμέσα",
-       "searchprofile-everything": "Î\9fÏ\84ιδήÏ\80οÏ\84ε",
+       "searchprofile-everything": "Τα Ï\80άνÏ\84α",
        "searchprofile-advanced": "Προχωρημένο",
        "searchprofile-articles-tooltip": "Αναζήτηση σε $1",
        "searchprofile-images-tooltip": "Αναζήτηση αρχείων",
        "badsig": "Άκυρη υπογραφή raw: ελέγξτε τις ετικέτες HTML.",
        "badsiglength": "Η υπογραφή σας είναι πολύ μεγάλη.\nΠρέπει να είναι κάτω από $1 {{PLURAL:$1|χαρακτήρα|χαρακτήρες}}.",
        "yourgender": "Πώς προτιμάτε να χαρακτηρίζεστε;",
-       "gender-unknown": "ΠÏ\81οÏ\84ιμÏ\8e Î½Î± Î¼Î·Î½ Î¼Ï\80Ï\89 Ï\83ε Î»ÎµÏ\80Ï\84ομέÏ\81ειεÏ\82",
+       "gender-unknown": "Î\8cÏ\84αν Î¸Î± Î±Î½Î±Ï\86έÏ\81ει ÎµÏ\83άÏ\82, Ï\84ο Î»Î¿Î³Î¹Ï\83μικÏ\8c Î¸Î± Ï\87Ï\81ηÏ\83ιμοÏ\80οιεί Î»Î­Î¾ÎµÎ¹Ï\82 Î¿Ï\85δέÏ\84εÏ\81εÏ\82 Ï\86Ï\8dλοÏ\85 Ï\8cÏ\80οÏ\84ε ÎµÎ¯Î½Î±Î¹ Î´Ï\85ναÏ\84Ï\8cν.",
        "gender-male": "Άντρας",
        "gender-female": "Γυναίκα",
        "prefs-help-gender": "Η ρύθμιση αυτή της προτίμησης είναι προαιρετική.\nΤο λογισμικό χρησιμοποιεί την τιμή αυτής της παραμέτρου για να απευθύνεται προς εσάς και για να αναφέρεται σε σας όταν απευθύνεται σε άλλους, χρησιμοποιώντας το κατάλληλο γραμματικό γένος.\nΑυτή η πληροφορία θα είναι δημόσια.",
        "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-deletelogentry": "Διαγραφή και επαναφορά διαγραφής συγκεκριμένων καταχωρήσεων στη λίστα καταγραφών",
        "right-deleterevision": "Διαγραφή και επαναφορά συγκεκριμένων αναθεωρήσεων σελίδων",
        "right-deletedhistory": "Προβολή διαγραμμένων εκδόσεων του ιστορικού, χωρίς το σχετικό κείμενο",
-       "right-deletedtext": "Î\95μÏ\86άνιÏ\83η Î´Î¹ÎµÎ³Ï\81αμμένοÏ\85 ÎºÎµÎ¹Î¼Î­Î½Î¿Ï\85 ÎºÎ±Î¹ Î±Î»Î»Î±Î³Ï\8eν Î±Î½Î¬Î¼ÎµÏ\83α Ï\83Ï\84ιÏ\82 Î´Î¹ÎµÎ³Ï\81αμμένεÏ\82 ÎµÎºÎ´Ï\8cÏ\83ειÏ\82",
-       "right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
+       "right-deletedtext": "Î\95μÏ\86άνιÏ\83η Î´Î¹Î±Î³ÎµÎ³Ï\81αμμένοÏ\85 ÎºÎµÎ¹Î¼Î­Î½Î¿Ï\85 ÎºÎ±Î¹ Î±Î»Î»Î±Î³Ï\8eν Î¼ÎµÏ\84αξÏ\8d Î´Î¹Î±Î³ÎµÎ³Ï\81αμμένÏ\89ν ÎµÎºÎ´Ï\8cÏ\83εÏ\89ν",
+       "right-browsearchive": "Αναζήτηση στις διαγεγραμμένες σελίδες",
        "right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
        "right-suppressrevision": "Προβολή, απόκρυψη και επανεμφάνιση από οποιονδήποτε χρήστη συγκεκριμένων αναθεωρήσεων σελίδων",
        "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
        "action-writeapi": "να χρησιμοποιήσετε το API για εγγραφή",
        "action-delete": "να διαγράψετε αυτή τη σελίδα",
        "action-deleterevision": "να διαγράψετε αυτή την έκδοση",
-       "action-deletedhistory": "να δείτε το διαγραμμένο ιστορικό αυτής της σελίδας",
-       "action-browsearchive": "να ÎµÏ\81εÏ\85νήÏ\83εÏ\84ε Î³Î¹Î± Î´Î¹Î±γραμμένες σελίδες",
+       "action-deletedhistory": "να προβάλετε το διαγεγραμμένο ιστορικό αυτής της σελίδας",
+       "action-browsearchive": "να Î±Î½Î±Î¶Î·Ï\84ήÏ\83εÏ\84ε Î´Î¹Î±Î³Îµγραμμένες σελίδες",
        "action-undelete": "να ακυρώσετε τη διαγραφή αυτής της σελίδας",
        "action-suppressrevision": "να επιθεωρήσετε και αποκαταστήσετε αυτή την κρυμμένη αναθεώρηση",
        "action-suppressionlog": "να δείτε αυτόν τον ιδιωτικό κατάλογο",
        "uploaddisabledtext": "Το ανέβασμα αρχείων είναι απενεργοποιημένο.",
        "php-uploaddisabledtext": "Οι επιφορτώσεις αρχείων ειναι απενεργοποιημένες στην PHP. Παρακαλούμε, ελέγξτε την ρύθμιση file_uploads.",
        "uploadscripted": "Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.",
+       "upload-scripted-pi-callback": "Δεν είναι δυνατό να ανεβάσετε αρχείο που περιέχει οδηγία επεξεργασίας φύλλου στυλ XML.",
+       "uploaded-script-svg": "Βρέθηκε στοιχείο με δυνατότητα δημιουργίας δέσμης ενεργειών «$1» στο ανεβασμένο αρχείο SVG.",
+       "uploaded-hostile-svg": "Βρέθηκε μη ασφαλές CSS στο στοιχείο στυλ του ανεβασμένου αρχείου 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.",
+       "uploaded-remote-url-svg": "Κάθε SVG που θέτει οποιοδήποτε χαρακτηριστικό στυλ με απομακρυσμένη διεύθυνση URL είναι αποκλεισμένο. Βρέθηκε <code>$1=\"$2\"</code> στο ανεβασμένο αρχείο SVG.",
+       "uploaded-image-filter-svg": "Βρέθηκε φίλτρο εικόνας με διεύθυνση URL: <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploadscriptednamespace": "Αυτό το αρχείο SVG περιέχει μη αποδεκτό ονοματοχώρο «$1».",
        "uploadinvalidxml": "Δεν ήταν δυνατή η ανάλυση του κώδικα XML στο αρχείο.",
        "uploadvirus": "Το αρχείο περιέχει ιό! Λεπτομέρειες: $1",
        "listfiles-delete": "διαγραφή",
        "listfiles-summary": "Αυτή η ειδική σελίδα δείχνει όλα τα επιφορτωμένα αρχεία.",
        "listfiles_search_for": "Αναζήτηση για όνομα πολυμέσου:",
+       "listfiles-userdoesnotexist": "Ο λογαριασμός χρήστη «$1» δεν είναι εγγεγραμμένος.",
        "imgfile": "αρχείο",
        "listfiles": "Κατάλογος εικόνων",
        "listfiles_thumb": "Μικρογραφία",
        "unwatchedpages": "Μη παρακολουθούμενες σελίδες",
        "listredirects": "Λίστα ανακατευθύνσεων",
        "listduplicatedfiles": "Κατάλογος αρχείων με διπλότυπα",
+       "listduplicatedfiles-entry": "Το [[:File:$1|$1]] έχει [[$3|{{PLURAL:$2|διπλότυπο|$2 διπλότυπα}}]].",
        "unusedtemplates": "Αχρησιμοποίητα πρότυπα",
        "unusedtemplatestext": "Αυτή η σελίδα περιέχει όλες τις σελίδες στην περιοχή ονομάτος των {{ns:template}}, οι οποίες δεν περιλαμβάνονται σε άλλη σελίδα. Θυμηθείτε να ελέγξετε για άλλους συνδέσμους προς τα πρότυπα πριν τα διαγράψετε.",
        "unusedtemplateswlh": "άλλοι σύνδεσμοι",
        "randomincategory-nopages": "Δεν υπάρχουν σελίδες στην κατηγορία [[:Category:$1|$1]].",
        "randomincategory-category": "Κατηγορία:",
        "randomincategory-legend": "Τυχαία σελίδα στην κατηγορία",
+       "randomincategory-submit": "Πήγαινε",
        "randomredirect": "Τυχαία ανακατεύθυνση",
        "randomredirect-nopages": "Δεν υπάρχουν ανακατευθύνσεις στον ονοματοχώρο \"$1\".",
        "statistics": "Στατιστικά",
        "pageswithprop-prop": "Όνομα ιδιότητας:",
        "pageswithprop-submit": "Μετάβαση",
        "doubleredirects": "Διπλές ανακατευθύνσεις",
-       "doubleredirectstext": "Αυτή η σελίδα συγκαταλέγει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή. Τα <del>διεγραμμένα</del> λήμματα έχουν επιλυθεί.",
+       "doubleredirectstext": "Αυτή η σελίδα καταγράφει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. \nΚάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη ανακατεύθυνση, όπως επίσης και προς τον προορισμό της δεύτερης ανακατεύθυνσης, η οποία και είναι συνήθως η «πραγματική» σελίδα προορισμού στην οποία πρέπει να δείχνει η πρώτη ανακατεύθυνση. \nΤα <del>διαγεγραμμένα</del> λήμματα έχουν επιλυθεί.",
        "double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί.\nΕνημερώθηκε αυτόματα και τώρα είναι ανακατεύθυνση στην [[$2]].",
        "double-redirect-fixed-maintenance": "Αυτόματη διόρθωση διπλής ανακατεύθυνσης από [[$1]] σε [[$2]] σε εργασία συντήρησης.",
        "double-redirect-fixer": "Διορθωτής ανακατευθύνσεων",
        "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": "Αυτή η σελίδα είναι κενή.",
        "wantedfiletext-nocat-noforeign": "Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν.",
        "wantedtemplates": "Ζητούμενα πρότυπα",
        "mostlinked": "Σελίδες με τους περισσότερους συνδέσμους προς αυτές",
-       "mostlinkedcategories": "ΠεÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81ο Ï\87Ï\81ηÏ\83ιμοÏ\80οιοÏ\8dμενεÏ\82 ÎºÎ±Ï\84ηγοÏ\81ίες",
+       "mostlinkedcategories": "Î\9aαÏ\84ηγοÏ\81ίεÏ\82 Î¼Îµ Ï\84οÏ\85Ï\82 Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81οÏ\85Ï\82 Ï\83Ï\85νδέÏ\83μοÏ\85Ï\82 Ï\80Ï\81οÏ\82 Î±Ï\85Ï\84ές",
        "mostlinkedtemplates": "Σελίδες που έχουν ενσωματωθεί περισσότερο από όλες τις άλλες",
        "mostcategories": "Σελίδες με τις περισσότερες κατηγορίες",
-       "mostimages": "ΠεÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81ο Ï\87Ï\81ηÏ\83ιμοÏ\80οιοÏ\8dμενα Î±Ï\81Ï\87εία",
+       "mostimages": "Î\91Ï\81Ï\87εία Î¼Îµ Ï\84οÏ\85Ï\82 Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81οÏ\85Ï\82 Ï\83Ï\85νδέÏ\83μοÏ\85Ï\82 Ï\80Ï\81οÏ\82 Î±Ï\85Ï\84ά",
        "mostinterwikis": "Σελίδες με τους περισσότερους διαγλωσσικούς συνδέσμους",
        "mostrevisions": "Σελίδες με τις περισσότερες αναθεωρήσεις",
        "prefixindex": "Όλες οι σελίδες με πρόθεμα",
        "categoriesfrom": "Εμφάνιση κατηγοριών που αρχίζουν από:",
        "special-categories-sort-count": "ταξινόμηση κατά απαρίθμηση",
        "special-categories-sort-abc": "αλφαβητική ταξινόμηση",
-       "deletedcontributions": "Διαγραμμένες συνεισφορές χρήστη",
-       "deletedcontributions-title": "Διαγραμμένες συνεισφορές χρήστη",
+       "deletedcontributions": "Διαγεγραμμένες συνεισφορές χρήστη",
+       "deletedcontributions-title": "Διαγεγραμμένες συνεισφορές χρήστη",
        "sp-deletedcontributions-contribs": "συνεισφορές",
        "linksearch": "Αναζήτηση εξωτερικών συνδέσμων",
        "linksearch-pat": "Μοτίβο αναζήτησης:",
        "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].",
        "broken-file-category-desc": "Η σελίδα περιέχει ένα σπασμένο σύνδεσμο αρχείου (σύνδεσμο για να ενσωμάτωση ενός αρχείου, ενώ το αρχείο δεν υπάρχει).",
        "hidden-category-category-desc": "Η κατηγορία περιέχει <code><nowiki>__HIDDENCAT__</nowiki></code> στο περιεχόμενο της σελίδας της, που την εμποδίζει εκ προεπιλογής να εμφανίζεται στο πλαίσιο συνδέσμων κατηγοριών των σελίδων.",
        "trackingcategories-nodesc": "Καμία διαθέσιμη περιγραφή.",
        "emailccsubject": "Αντίγραφο του μηνυματός σας στο $1: $2",
        "emailsent": "Το μήνυμα έχει σταλεί",
        "emailsenttext": "Το μήνυμά σας έχει σταλεί.",
-       "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|τον χρήστη|την χρήστρια}} $1 σ{{GENDER:$2|τον χρήστη|την χρήστρια}} $2 μέσω της λειτουργίας «αποστολής μηνύματος ηλεκτρονικού ταχυδρομείου σε χρήστη» στο {{SITENAME}}.",
+       "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|το χρήστη|τη χρήστρια}} $1 σ{{GENDER:$2|το χρήστη|τη χρήστρια}} $2 μέσω της λειτουργίας «{{int:emailpage}}» στο {{SITENAME}}.",
        "usermessage-summary": "Φεύγετε από τις ειδοποιήσεις συστήματος.",
        "usermessage-editor": "Μηνύματα συστήματος",
        "usermessage-template": "MediaWiki:UserMessage",
        "restriction-level-all": "οποιοδήποτε επίπεδο",
        "undelete": "Αποκατάσταση σελίδων που έχουν διαγραφεί",
        "undeletepage": "Εμφάνιση και αποκατάσταση σελίδων που έχουν διαγραφεί",
-       "undeletepagetitle": "'''Οι ακόλουθες είναι διαγραμμένες επεξεργασίες του [[:$1|$1]]'''.",
+       "undeletepagetitle": "<strong>Οι ακόλουθες είναι διαγεγραμμένες επεξεργασίες του [[:$1|$1]]</strong>.",
        "viewdeletedpage": "Εμφάνιση διεγραμμένων σελίδων",
        "undeletepagetext": "{{PLURAL:$1|Η σελίδα που ακολουθεί έχει|$1 Οι σελίδες που ακολουθούν έχουν}} διαγραφεί αλλά {{PLURAL:βρίσκεται|βρίσκονται}} ακόμα {{PLURAL:αποθηκευμένη|αποθηκευμένες}} στο αρχείο και {{PLURAL:μπορεί να αποκατασταθεί|μπορούν να αποκατασταθούν}}. Κατά καιρούς γίνεται εκκαθάριση του αρχείου.",
        "undelete-fieldset-title": "Αποκατάσταση αναθεωρήσεων",
        "undeleteextrahelp": "Για να επαναφέρετε ολόκληρο το ιστορικό της σελίδας, μην επιλέγετε κανένα πλαίσιο ελέγχου και κάντε κλικ στο '''''{{int:undeletebtn}}'''''.\nΓια να κάνετε μια προσαρμοσμένη επαναφορά, επιλέξτε τα πλαίσια που αντιστοιχούν στις αναθεωρήσεις που πρόκειται να επαναφερθούν και κάντε κλικ στο '''''{{int:undeletebtn}}'''''.",
        "undeleterevisions": "$1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}} αρχειοθετήθηκαν.",
        "undeletehistory": "Αν επαναφέρετε την σελίδα, όλες οι εκδόσεις θα επαναφερθούν στο ιστορικό.\n\nΑν μια νέα σελίδα με το ίδιο όνομα δημιουργήθηκε μετά την διαγραφή, οι επαναφερμένες εκδόσεις θα εμφανιστούν στο πρότερο ιστορικό.",
-       "undeleterevdel": "Η επαναφορά δεν θα εκτελεστεί αν θα έχει ως αποτέλεσμα η πιο πρόσφατη έκδοση της σελίδας ή αρχείου να είναι διαγραμμένη μερικώς. Σε τέτοιες περιπτώσεις, πρέπει να αποεπιλέξετε ή να εμφανίσετε την νεότερη διαγραμμένη έκδοση.",
+       "undeleterevdel": "Η επαναφορά δεν θα εκτελεστεί αν θα έχει ως αποτέλεσμα η πιο πρόσφατη έκδοση της σελίδας ή αρχείου να είναι διαγεγραμμένη μερικώς. Σε τέτοιες περιπτώσεις, πρέπει να αποεπιλέξετε ή να εμφανίσετε την νεότερη διαγεγραμμένη έκδοση.",
        "undeletehistorynoadmin": "Αυτό το άρθρο έχει διαγραφεί. Ο λόγος για τη διαγραφή φαίνεται\nστη σύνοψη παρακάτω, μαζί με λεπτομέρειες των χρηστών που επεξεργάστηκαν τη σελίδα\nπριν τη διαγραφή. Το αρχικό κείμενο αυτών των διεγραμμένων αναθεωρήσεων είναι διαθέσιμο μόνο στους διαχειριστές.",
-       "undelete-revision": "Διαγραμμένη αναθεώρηση του $1 (από $4, στις $5) από $3:",
+       "undelete-revision": "Διαγεγραμμένη αναθεώρηση του $1 (από τις $4, στις $5) από $3:",
        "undeleterevision-missing": "Άκυρη ή ανύπαρκτη αναθεώρηση. Μπορεί να έχετε έναν κακό σύνδεσμο, ή η\nαναθεώρηση μπορεί να έχει επαναφερθεί ή αφαιρεθεί από το αρχείο.",
        "undelete-nodiff": "Δεν βρέθηκε προηγούμενη αναθεώρηση.",
        "undeletebtn": "Επαναφορά",
        "undeletedfiles": "$1 {{PLURAL:$1|αρχείο|αρχεία}} επαναφέρθηκαν",
        "cannotundelete": "Η αναίρεση διαγραφής απέτυχε: $1",
        "undeletedpage": "'''Η $1 έχει επαναφερθεί'''\n\nΣυμβουλευτείτε το [[Special:Log/delete|αρχείο καταγραφής διαγραφών]] για ένα μητρώο των πρόσφατων διαγραφών και επαναφορών.",
-       "undelete-header": "Δείτε [[Special:Log/delete|το αρχείο καταγραφής διαγραφών]] για πρόσφατα διεγραμμένες σελίδες.",
-       "undelete-search-title": "Αναζήτηση στις διεγραμμένες σελίδες",
+       "undelete-header": "Î\94είÏ\84ε [[Special:Log/delete|Ï\84ο Î±Ï\81Ï\87είο ÎºÎ±Ï\84αγÏ\81αÏ\86ήÏ\82 Î´Î¹Î±Î³Ï\81αÏ\86Ï\8eν]] Î³Î¹Î± Ï\80Ï\81Ï\8cÏ\83Ï\86αÏ\84α Î´Î¹Î±Î³ÎµÎ³Ï\81αμμένεÏ\82 Ï\83ελίδεÏ\82.",
+       "undelete-search-title": "Αναζήτηση διαγεγραμμένων σελίδων",
        "undelete-search-box": "Αναζήτηση διεγραμμένων σελίδων",
        "undelete-search-prefix": "Εμφάνισε σελίδες που αρχίζουν με:",
        "undelete-search-submit": "Αναζήτηση",
        "undelete-error": "Σφάλμα κατά την αναίρεση διαγραφής της σελίδας",
        "undelete-error-short": "Σφάλμα κατά τη διαγραφή του αρχείου: $1",
        "undelete-error-long": "Αντιμετωπίστηκαν σφάλματα καθώς επαναφερόταν το αρχείο:\n\n$1",
-       "undelete-show-file-confirm": "Είστε σίγουρος ότι θέλετε να δείτε μια διεγραμμένη έκδοση του αρχείου \"<nowiki>$1</nowiki>\" από $2 σε $3;",
+       "undelete-show-file-confirm": "Είστε σίγουροι ότι θέλετε να δείτε μια διαγεγραμμένη έκδοση του αρχείου «<nowiki>$1</nowiki>» από τις $2 στις $3;",
        "undelete-show-file-submit": "Ναι",
        "namespace": "Ονοματοχώρος:",
        "invert": "Αντιστροφή επιλογής",
        "sp-contributions-newbies-title": "Συνεισφορές χρηστών για νέους λογαριασμούς",
        "sp-contributions-blocklog": "αρχείο καταγραφών φραγών",
        "sp-contributions-suppresslog": "διαγεγραμμένες συνεισφορές χρήστη",
-       "sp-contributions-deleted": "διαγραμμένες συνεισφορές χρήστη",
+       "sp-contributions-deleted": "διαγεγραμμένες συνεισφορές χρήστη",
        "sp-contributions-uploads": "ανεβάσματα αρχείων",
        "sp-contributions-logs": "καταγραφές",
        "sp-contributions-talk": "συζήτηση",
        "whatlinkshere-prev": "{{PLURAL:$1|προηγούμενη|προηγούμενες $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|επόμενη|επόμενες $1}}",
        "whatlinkshere-links": "← σύνδεσμοι",
-       "whatlinkshere-hideredirs": "$1 ανακατευθύνσεις",
+       "whatlinkshere-hideredirs": "$1 ανακατευθύνσεων",
        "whatlinkshere-hidetrans": "$1 ενσωματώσεων",
        "whatlinkshere-hidelinks": "$1 συνδέσμων",
        "whatlinkshere-hideimages": "$1 σύνδεσμοι αρχείων",
        "immobile-target-namespace-iw": "Ο σύνδεσμος-interwiki δεν είναι έγκυρος στόχος για την μετακίνηση σελίδας.",
        "immobile-source-page": "Αυτή η σελίδα δεν είναι δυνατό να μετακινηθεί.",
        "immobile-target-page": "Δεν μπορεί να μετακινηθεί σε αυτόν τον τίτλο.",
+       "bad-target-model": "Ο επιθυμητός προορισμός χρησιμοποιεί διαφορετικό μοντέλο περιεχομένου. Δεν είναι δυνατή η μετατροπή από $1 σε $2.",
        "imagenocrossnamespace": "Δεν είναι δυνατή η μετακίνηση του αρχείου σε περιοχή ονομάτων που δεν αφορά αρχεία",
        "nonfile-cannot-move-to-file": " Δεν είναι δυνατή η μετακίνηση μη αρχείων σε αρχείο ονομάτων",
        "imagetypemismatch": "Η νέα επέκταση του αρχείου δεν ταιριάζει με τον τύπο του",
        "thumbnail_image-type": "Δεν υποστηρίζεται αυτός ο τύπος εικόνας",
        "thumbnail_gd-library": "Ατελής ενεργοποίηση της βιβλιοθήκης GD: αγνοούμενη λειτουργία $1",
        "thumbnail_image-missing": "Το αρχείο φαίνεται να λείπει: $1",
+       "thumbnail_image-failure-limit": "Έχουν γίνει πάρα πολλές πρόσφατες αποτυχημένες προσπάθειες ($1 ή περισσότερες) για να αποδοθεί αυτή μικρογραφία. Παρακαλούμε δοκιμάστε ξανά αργότερα.",
        "import": "Εισαγωγή σελίδων",
        "importinterwiki": "Εισαγωγή από άλλο wiki",
        "import-interwiki-text": "Επιλέξτε ένα wiki και τίτλο σελίδας για την εισαγωγή.\nΟι ημερομηνίες των αναθεωρήσεων και τα ονόματα των συντακτών θα διατηρηθούν.\nΌλες οι ενέργειες εισαγωγής από άλλα wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
        "pageinfo-header-edits": "Ιστορικό επεξεργασίας",
        "pageinfo-header-restrictions": "Προστασία σελίδας",
        "pageinfo-header-properties": "Ιδιότητες σελίδας",
-       "pageinfo-display-title": "Î\95μÏ\86άνιÏ\83η Ï\84ίÏ\84λοÏ\85",
+       "pageinfo-display-title": "Î\95μÏ\86ανιζÏ\8cμενοÏ\82 Ï\84ίÏ\84λοÏ\82",
        "pageinfo-default-sort": "Προεπιλεγμένο κλειδί ταξινόμησης",
        "pageinfo-length": "Μήκος σελίδας (σε bytes)",
        "pageinfo-article-id": "Αναγνωριστικό σελίδας",
-       "pageinfo-language": "Î\93λÏ\8eÏ\83Ï\83α Ï\83ελίδαÏ\82 Ï\80εÏ\81ιεÏ\87ομένοÏ\85",
+       "pageinfo-language": "Î\93λÏ\8eÏ\83Ï\83α Ï\80εÏ\81ιεÏ\87ομένοÏ\85 Ï\83ελίδαÏ\82",
        "pageinfo-content-model": "Μοντέλο περιεχομένου σελίδας",
        "pageinfo-robot-policy": "Ευρετηρίαση από ρομπότ",
        "pageinfo-robot-index": "Επιτρεπτό",
        "file-no-thumb-animation-gif": "'''Σημείωση: λόγω τεχνικών περιορισμών, μικρογραφίες εικόνων GIF υψηλής ανάλυσης όπως αυτή εδώ δεν θα είναι κινούμενες.'''",
        "newimages": "Πινακοθήκη νέων εικόνων",
        "imagelisttext": "Ακολουθεί κατάλογος '''$1''' {{PLURAL:$1|αρχείου|αρχείων}} ταξινομημένων κατά σειρά $2.",
-       "newimages-summary": "Αυτή η ειδική σελίδα δείχνει τα πιο πρόσφατα φορτωμένα αρχεία.",
+       "newimages-summary": "Αυτή η ειδική σελίδα δείχνει τα πιο πρόσφατα ανεβασμένα αρχεία.",
        "newimages-legend": "Φίλτρο",
        "newimages-label": "Όνομα αρχείου (ή μέρος αυτού):",
        "newimages-showbots": "Εμφάνιση αρχείων ανεβασμένων από ρομπότ",
        "deletedwhileediting": "'''Προσοχή''': Αυτή η σελίδα έχει διαγραφεί αφότου ξεκινήσατε την επεξεργασία!",
        "confirmrecreate": "Ο χρήστης [[User:$1|$1]] ([[User talk:$1|συζήτηση]]) διέγραψε αυτή τη σελίδα αφότου ξεκινήσατε την επεξεργασία με αιτιολόγηση:\n: ''$2''\nΠαρακαλώ επιβεβαιώστε ότι θέλετε πραγματικά να ξαναδημιουργήσετε αυτή τη σελίδα.",
        "confirmrecreate-noreason": "Ο χρήστης [[User:$1|$1]] ([[User talk:$1|συζήτηση]]) διέγραψε αυτή τη σελίδα αφότου ξεκινήσατε την επεξεργασία.\nΠαρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να ξαναδημιουργήσετε αυτή τη σελίδα.",
-       "recreate": "Î\95Ï\80αναδημιοÏ\85Ï\81γία",
+       "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ε Î¾Î±Î½Î¬.",
        "confirm_purge_button": "Εντάξει",
        "confirm-purge-top": "Καθαρισμός της λανθάνουσας μνήμης αυτής της σελίδας.",
        "confirm-purge-bottom": "Η εκκαθάριση μιας σελίδας εκκαθαρίζει την μνήμη cache και εξαναγκάζει την πλέον πρόσφατη έκδοση να εμφανιστεί.",
        "watchlistedit-clear-legend": "Εκκαθάριση λίστας παρακολούθησης",
        "watchlistedit-clear-explain": "Όλοι οι τίτλοι θα αφαιρεθούν από τη λίστα παρακολούθησής σας",
        "watchlistedit-clear-titles": "Τίτλοι:",
-       "watchlistedit-clear-submit": "Î\9aαθαÏ\81ίÏ\83Ï\84ε Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ηÏ\82 (αÏ\85Ï\84Ï\8c ÎµÎ¯Î½Î±Î¹ Î¼Ï\8cνιμο!)",
+       "watchlistedit-clear-submit": "Î\95κκαθάÏ\81ιÏ\83η Ï\84ηÏ\82 Î»Î¯Ï\83Ï\84αÏ\82 Ï\80αÏ\81ακολοÏ\8dθηÏ\83ηÏ\82 (Î\91Ï\85Ï\84Ï\8c ÎµÎ¯Î½Î±Î¹ Î¿Ï\81ιÏ\83Ï\84ικÏ\8c!)",
        "watchlistedit-clear-done": "Η λίστα παρακολούθησής σας έχει καθαριστεί.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 τίτλος αφαιρέθηκε|$1 τίτλοι αφαιρέθηκαν}}:",
        "watchlistedit-too-many": "Υπάρχουν υπερβολικά πολλές σελίδες και δεν μπορούν να εμφανιστούν εδώ.",
        "specialpages-group-changes": "Πρόσφατες αλλαγές και καταγραφές γεγονότων",
        "specialpages-group-media": "Αναφορές πολυμέσων και ανέβασμα αρχείων",
        "specialpages-group-users": "Χρήστες και δικαιώματα",
-       "specialpages-group-highuse": "ΠολÏ\85Ï\83Ï\8dÏ\87ναÏ\83Ï\84εÏ\82 Ï\83ελίδες",
+       "specialpages-group-highuse": "ΣελίδεÏ\82 Ï\85Ï\88ηλήÏ\82 Ï\87Ï\81ήÏ\83ης",
        "specialpages-group-pages": "Κατάλογοι σελίδων",
        "specialpages-group-pagetools": "Εργαλεία σελίδων",
        "specialpages-group-wiki": "Δεδομένα και εργαλεία",
-       "specialpages-group-redirects": "Î\91νακαÏ\84εÏ\8dθÏ\85νÏ\83η ÎµÎ¹Î´Î¹ÎºÏ\8eν Ï\83ελίδÏ\89ν",
+       "specialpages-group-redirects": "Î\91νακαÏ\84εÏ\85θÏ\85νÏ\84ικέÏ\82 ÎµÎ¹Î´Î¹ÎºÎ­Ï\82 Ï\83ελίδεÏ\82",
        "specialpages-group-spam": "Εργαλεία κατά των ανεπιθύμητων διαφημιστικών",
        "specialpages-group-developer": "Εργαλεία προγραμματιστών",
        "blankpage": "Κενή σελίδα",
        "tag-filter-submit": "Φίλτρο",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ετικέτα|Ετικέτες}}]]: $2)",
        "tags-title": "Ετικέτες",
-       "tags-intro": "Η σελίδα συγκαταλέγει τις ετικέτες (καθώς και το τι σημαίνει η κάθε μία) με τις οποίες το software μπορεί να μαρκάρει μία επεξεργασία.",
+       "tags-intro": "Η σελίδα καταγράφει τις ετικέτες, καθώς και το τι σημαίνει η κάθε μία, με τις οποίες το λογισμικό μπορεί να μαρκάρει μία επεξεργασία.",
        "tags-tag": "Όνομα ετικέτας",
        "tags-display-header": "Εμφάνιση στις λίστες αλλαγής",
        "tags-description-header": "Πλήρης περιγραφή του νοήματος",
        "tags-actions-header": "Ενέργειες",
        "tags-active-yes": "Ναι",
        "tags-active-no": "Όχι",
+       "tags-source-extension": "Οριζόμενη από επέκταση",
+       "tags-source-manual": "Εφαρμοζόμενη με μη αυτόματο τρόπο από χρήστες και ρομπότ",
        "tags-source-none": "Όχι σε χρήση πλέον",
        "tags-edit": "επεξεργασία",
+       "tags-delete": "διαγραφή",
+       "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-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": "Θέλετε να συνεχιστεί η δημιουργία της ετικέτας;",
        "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-activate-title": "Ενεργοποίηση ετικέτας",
+       "tags-activate-question": "Πρόκειται να ενεργοποιήσετε την ετικέτα «$1».",
        "tags-activate-reason": "Αιτία:",
        "tags-activate-not-allowed": "Δεν είναι δυνατή η ενεργοποίηση της ετικέτας «$1».",
        "tags-activate-not-found": "Η ετικέτα «$1» δεν υπάρχει.",
        "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-apply-not-allowed-one": "Η ετικέτα «$1» δεν επιτρέπεται να εφαρμοστεί με το χέρι.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Η ακόλουθη ετικέτα δεν επιτρέπεται να εφαρμοστεί|Οι ακόλουθες ετικέτες δεν επιτρέπεται να εφαρμοστούν}} με το χέρι: $1",
+       "tags-update-add-not-allowed-one": "Η ετικέτα «$1» δεν επιτρέπεται να προστεθεί με το χέρι.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Η ακόλουθη ετικέτα δεν επιτρέπεται να προστεθεί|Οι ακόλουθες ετικέτες δεν επιτρέπεται να προστεθούν}} με το χέρι: $1",
+       "tags-update-remove-not-allowed-one": "Η ετικέτα «$1» δεν επιτρέπεται να αφαιρεθεί.",
        "tags-edit-title": "Επεξεργασία ετικετών",
        "tags-edit-manage-link": "Διαχείριση ετικετών",
        "tags-edit-existing-tags": "Υπάρχουσες ετικέτες:",
        "tags-edit-chosen-placeholder": "Επιλέξτε μερικές ετικέτες",
        "tags-edit-chosen-no-results": "Δεν βρέθηκαν ετικέτες που να ταιριάζουν",
        "tags-edit-reason": "Αιτία:",
+       "tags-edit-success": "Οι αλλαγές εφαρμόστηκαν με επιτυχία.",
+       "tags-edit-failure": "Οι αλλαγές δεν ήταν δυνατόν να εφαρμοστούν:\n$1",
        "tags-edit-nooldid-title": "Μη έγκυρη αναθεώρηση προορισμού",
        "tags-edit-none-selected": "Παρακαλώ επιλέξτε τουλάχιστον μία ετικέτα για να προσθέσετε ή να αφαιρέσετε.",
        "comparepages": "Σύγκριση σελίδων",
        "revdelete-uname-unhid": "το όνομα χρήστη έπαψε να είναι κρυφό",
        "revdelete-restricted": "εφήρμοσε περιορισμούς στους sysops",
        "revdelete-unrestricted": "αφαίρεσε περιορισμούς στους sysops",
+       "logentry-block-block": "{{GENDER:$2|Ο|Η}} $1 έθεσε φραγή {{GENDER:$4|στον $3|στην $3}} με χρόνο λήξης $5 $6",
        "logentry-block-unblock": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε τη φραγή {{GENDER:$4|του|της}} $3",
-       "logentry-move-move": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4",
-       "logentry-move-move-noredirect": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 χωρίς να αφήσει ανακατεύθυνση",
-       "logentry-move-move_redir": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 πάνω από την ανακατεύθυνση",
+       "logentry-block-reblock": "{{GENDER:$2|Ο|Η}} $1 άλλαξε τις ρυθμίσεις φραγής {{GENDER:$4|για τον $3|για την $3}} με χρόνο λήξης $5 $6",
+       "logentry-suppress-block": "{{GENDER:$2|Ο|Η}} $1 έθεσε φραγή {{GENDER:$4|στον $3|στην $3}} με χρόνο λήξης $5 $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Ο|Η}} $1 άλλαξε τις ρυθμίσεις φραγής {{GENDER:$4|για τον $3|για την $3}} με χρόνο λήξης $5 $6",
+       "logentry-import-upload": "{{GENDER:$2|Ο|Η}} $1 εισήγαγε τη σελίδα $3 μέσω ανεβάσματος αρχείου",
+       "logentry-import-interwiki": "{{GENDER:$2|Ο|Η}} $1 εισήγαγε τη σελίδα $3 από άλλο wiki",
+       "logentry-merge-merge": "{{GENDER:$2|Ο|Η}} $1 συγχώνευσε τη σελίδα $3 με την $4 (αναθεωρήσεις μέχρι $5)",
+       "logentry-move-move": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στην $4",
+       "logentry-move-move-noredirect": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στην $4 χωρίς να αφήσει ανακατεύθυνση",
+       "logentry-move-move_redir": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στην $4 πάνω από την ανακατεύθυνση",
        "logentry-move-move_redir-noredirect": "{{GENDER:$2|Ο|Η}} $1 μετακίνησε την σελίδα $3 στην $4 πάνω από μια ανακατεύθυνση χωρίς να αφήσει ανακατεύθυνση",
        "logentry-patrol-patrol": "{{GENDER:$2|Ο|Η}} $1 επισήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη",
        "logentry-patrol-patrol-auto": "{{GENDER:$2|Ο|Η}} $1 αυτόματα σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη",
        "feedback-bugornote": "Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλούμε [$1  κάντε μια αναφορά σφάλματος].\nΔιαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα \"[$3  $2]\", μαζί με το όνομα χρήστη σας.",
        "feedback-cancel": "Ακύρωση",
        "feedback-close": "Ολοκληρώθηκε",
+       "feedback-dialog-title": "Υποβολή παρατηρήσεων",
+       "feedback-dialog-intro": "Μπορείτε να χρησιμοποιήσετε την παρακάτω εύκολη φόρμα για να υποβάλετε τις παρατηρήσεις σας. Το σχόλιό σας θα προστεθεί στην σελίδα «$1», μαζί με το όνομα χρήστη σας.",
        "feedback-error-title": "Σφάλμα",
        "feedback-error1": "Σφάλμα: Μη αναγνωρίσιμο αποτέλεσμα από το API",
        "feedback-error2": "Σφάλμα: Η επεξεργασία απέτυχε",
        "feedback-message": "Μήνυμα:",
        "feedback-subject": "Θέμα:",
        "feedback-submit": "Υποβολή",
+       "feedback-termsofuse": "Συμφωνώ να παρέχω παρατηρήσεις σύμφωνα με τους Όρους Χρήσης.",
        "feedback-thanks": "Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα \"[$2 $1]\".",
        "feedback-thanks-title": "Σας ευχαριστούμε!",
        "searchsuggest-search": "Αναζήτηση",
        "pagelang-select-lang": "Επιλογή γλώσσας",
        "right-pagelang": "Αλλαγή γλώσσας σελίδας",
        "action-pagelang": "αλλαγή της γλώσσας σελίδας",
+       "log-name-pagelang": "Αρχείο καταγραφών αλλαγών γλώσσας",
        "logentry-pagelang-pagelang": "{{GENDER:$2|Ο|Η}} $1 άλλαξε τη γλώσσα σελίδας της σελίδας $3 από $4 σε $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> /$2 (ενεργοποιημένο)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')",
        "mediastatistics-header-executable": "Εκτελέσιμα",
        "mediastatistics-header-archive": "Συμπιεσμένες μορφές",
        "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, πιθανόν εσφαλμένα κωδικοποιημένοι",
        "json-error-recursion": "Μία ή περισσότερες αναδρομικές αναφορές στην προς κωδικοποίηση τιμή.",
        "json-error-inf-or-nan": "Μία ή περισσότερες τιμές NAN ή INF στην προς κωδικοποίηση τιμή.",
        "json-error-unsupported-type": "Δόθηκε τιμή τύπου που δεν μπορεί να κωδικοποιηθεί.",
index 9ade1fc..3a47bce 100644 (file)
        "passwordreset": "Reset password",
        "passwordreset-text-one": "Complete this form to receive a temporary password via email.",
        "passwordreset-text-many": "{{PLURAL:$1|Fill in one of the fields to receive a temporary password via email.}}",
-       "passwordreset-legend": "Reset password",
        "passwordreset-disabled": "Password resets have been disabled on this wiki.",
        "passwordreset-emaildisabled": "Email features have been disabled on this wiki.",
        "passwordreset-username": "Username:",
        "resettokens-summary": "",
        "resettokens-text": "You can reset tokens which allow access to certain private data associated with your account here.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
        "resettokens-no-tokens": "There are no tokens to reset.",
-       "resettokens-legend": "Reset tokens",
        "resettokens-tokens": "Tokens:",
        "resettokens-token-label": "$1 (current value: $2)",
        "resettokens-watchlist-token": "Token for the web feed (Atom/RSS) of [[Special:Watchlist|changes to pages on your watchlist]]",
        "copyrightwarning2": "Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors.\nIf you do not want your writing to be edited mercilessly, then do not submit it here.<br />\nYou are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details).\n<strong>Do not submit copyrighted work without permission!</strong>",
        "editpage-head-copy-warn": "-",
        "editpage-tos-summary": "-",
+       "editpage-cannot-use-custom-model": "The content model of this page cannot be changed.",
        "longpage-hint": "-",
        "longpageerror": "<strong>Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.</strong>\nIt cannot be saved.",
        "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",
        "badsig": "Invalid raw signature.\nCheck HTML tags.",
        "badsiglength": "Your signature is too long.\nIt must not be more than $1 {{PLURAL:$1|character|characters}} long.",
        "yourgender": "How do you prefer to be described?",
-       "gender-unknown": "I prefer not to say",
+       "gender-unknown": "When mentioning you, the software will use gender neutral words whenever possible",
        "gender-male": "He edits wiki pages",
        "gender-female": "She edits wiki pages",
        "prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
        "uploaddisabledtext": "File uploads are disabled.",
        "php-uploaddisabledtext": "File uploads are disabled in PHP.\nPlease check the file_uploads setting.",
        "uploadscripted": "This file contains HTML or script code that may be erroneously interpreted by a web browser.",
-       "upload-scripted-pi-callback": "Cannot upload a file that contains xml-stylesheet processing instruction.",
+       "upload-scripted-pi-callback": "Cannot upload a file that contains XML-stylesheet processing instruction.",
        "uploaded-script-svg": "Found scriptable element \"$1\" in the uploaded SVG file.",
        "uploaded-hostile-svg": "Found unsafe CSS in the style element of uploaded SVG file.",
        "uploaded-event-handler-on-svg": "Setting event-handler attributes <code>$1=\"$2\"</code> is not allowed in SVG files.",
-       "uploaded-href-attribute-svg": "Href attributes <code>&lt;$1 $2=\"$3\"&gt;</code> with non-local target (e.g. http://, javascript:, etc) are not allowed in SVG files.",
+       "uploaded-href-attribute-svg": "href attributes <code>&lt;$1 $2=\"$3\"&gt;</code> with non-local target (e.g. http://, javascript:, etc) are not allowed in SVG files.",
        "uploaded-href-unsafe-target-svg": "Found href to unsafe target <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-animate-svg": "Found \"animate\" tag that might be changing href, using the \"from\" attribute <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-setting-event-handler-svg": "Setting event-handler attributes is blocked, found <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "randomincategory-nopages": "There are no pages in the [[:Category:$1|$1]] category.",
        "randomincategory-category": "Category:",
        "randomincategory-legend": "Random page in category",
+       "randomincategory-submit": "Go",
        "randomredirect": "Random redirect",
        "randomredirect-nopages": "There are no redirects in the namespace \"$1\".",
        "statistics": "Statistics",
        "nmembers": "$1 {{PLURAL:$1|member|members}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|member|members}}",
        "nrevisions": "$1 {{PLURAL:$1|revision|revisions}}",
-       "nviews": "$1 {{PLURAL:$1|view|views}}",
        "nimagelinks": "Used on $1 {{PLURAL:$1|page|pages}}",
        "ntransclusions": "used on $1 {{PLURAL:$1|page|pages}}",
        "specialpage-empty": "There are no results for this report.",
        "rollback-success": "Reverted edits by $1;\nchanged back to last revision by $2.",
        "sessionfailure-title": "Session failure",
        "sessionfailure": "There seems to be a problem with your login session;\nthis action has been canceled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
+       "changecontentmodel" : "Change content model of a page",
+       "changecontentmodel-legend": "Change content model",
+       "changecontentmodel-title-label": "Page title",
+       "changecontentmodel-model-label": "New content model",
+       "changecontentmodel-reason-label": "Reason:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|changed}} the content model of the page $3 from \"$4\" to \"$5\"",
+       "logentry-contentmodel-change-revertlink": "revert",
+       "logentry-contentmodel-change-revert": "revert",
        "protectlogpage": "Protection log",
        "protectlogtext": "Below is a list of changes to page protections.\nSee the [[Special:ProtectedPages|protected pages list]] for the list of currently operational page protections.",
        "protectedarticle": "protected \"[[$1]]\"",
        "tooltip-pt-logout": "Log out",
        "tooltip-pt-createaccount": "You are encouraged to create an account and log in; however, it is not mandatory",
        "tooltip-ca-talk": "Discussion about the content page",
-       "tooltip-ca-edit": "You can edit this page. Please use the preview button before saving",
+       "tooltip-ca-edit": "Edit this page",
        "tooltip-ca-addsection": "Start a new section",
        "tooltip-ca-viewsource": "This page is protected.\nYou can view its source",
        "tooltip-ca-history": "Past revisions of this page",
        "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-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",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Number of subpages of this page",
        "watchlistedit-normal-submit": "Remove titles",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 title was|$1 titles were}} removed from your watchlist:",
        "watchlistedit-raw-title": "Edit raw watchlist",
-        "watchlistedit-raw-legend": "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]].",
-        "watchlistedit-raw-titles": "Titles:",
-        "watchlistedit-raw-submit": "Update watchlist",
-        "watchlistedit-raw-done": "Your watchlist has been updated.",
-        "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 titles were}} added:",
-        "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
+       "watchlistedit-raw-titles": "Titles:",
+       "watchlistedit-raw-submit": "Update watchlist",
+       "watchlistedit-raw-done": "Your watchlist has been updated.",
+       "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 titles were}} added:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
        "watchlistedit-clear-title": "Cleared watchlist",
        "watchlistedit-clear-legend": "Clear watchlist",
        "watchlistedit-clear-explain": "All of the titles will be removed from your watchlist",
        "version-libraries": "Installed libraries",
        "version-libraries-library": "Library",
        "version-libraries-version": "Version",
+       "version-libraries-license": "License",
+       "version-libraries-description": "Description",
+       "version-libraries-authors": "Authors",
        "redirect": "Redirect by file, user, page or revision ID",
        "redirect-legend": "Redirect to a file or page",
        "redirect-text": "",
        "special-characters-group-khmer": "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": "page does not exist yet",
+       "mw-widgets-titleinput-description-redirect": "redirect to $1"
 }
index 83fe0b1..5f5be28 100644 (file)
        "passwordreset": "Restablecer contraseña",
        "passwordreset-text-one": "Completa este formulario para recibir una contraseña temporal por correo electrónico.",
        "passwordreset-text-many": "{{PLURAL:$1|Elige una de las opciones para recibir una contraseña temporal por correo electrónico.}}",
-       "passwordreset-legend": "Restablecer contraseña",
        "passwordreset-disabled": "Se ha desactivado el restablecimiento de contraseñas en este wiki.",
        "passwordreset-emaildisabled": "Se han desactivado las funciones de correo electrónico en este wiki.",
        "passwordreset-username": "Nombre de usuario:",
        "resettokens": "Restablecer claves",
        "resettokens-text": "Aquí puedes restablecer las claves que permiten el acceso a ciertos datos privados asociados a tu cuenta.\n\nDeberías hacerlo si los has compartido por accidente, o si ha habido intrusiones en tu cuenta.",
        "resettokens-no-tokens": "No hay claves para restablecer.",
-       "resettokens-legend": "Restablecer claves",
        "resettokens-tokens": "Claves:",
        "resettokens-token-label": "$1 (valor actual: $2)",
        "resettokens-watchlist-token": "Clave para el canal (RSS/Atom) de los [[Special:Watchlist|cambios a las páginas en tu lista de seguimiento]]",
        "creating": "Creación de «$1»",
        "editingsection": "Edición de «$1» (sección)",
        "editingcomment": "Edición de «$1» (sección nueva)",
-       "editconflict": "Conflicto de edición: $1",
+       "editconflict": "No se pudieron guardar tus cambios debido a un conflicto de edición. {{GENDER:|¿Deseas}} resolver el conflicto manualmente?",
        "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",
        "yourdiff": "Diferencias",
        "copyrightwarning": "Ten en cuenta que todas las contribuciones a {{SITENAME}} se consideran publicadas bajo la $2 (véase $1 para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.<br />Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre. <strong>¡No uses textos con copyright sin permiso!</strong>",
        "copyrightwarning2": "Ten en cuenta que todas las contribuciones a {{SITENAME}} pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.<br />Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase $1 para más detalles).\n<strong>¡No uses textos con copyright sin permiso!</strong>",
+       "editpage-cannot-use-custom-model": "El modelo de contenido de esta página no se puede cambiar.",
        "longpageerror": "<strong>Error: el texto que has enviado ocupa {{PLURAL:$1|un kilobyte|$1 kilobytes}}, que supera el máximo de {{PLURAL:$2|un kilobyte|$2 kilobytes}}.</strong>\nPor tanto, no lo podemos guardar.",
        "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:",
        "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]] usa [[:$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]] convoca 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}}.",
        "expansion-depth-exceeded-warning": "La página ha sobrepasado el límite de profundidad de expansión",
        "parser-unstrip-loop-warning": "Se ha detectado un bucle en la función \"unstrip\"",
        "parser-unstrip-recursion-limit": "Se ha superado el límite de recursividad de la función \"unstrip\" ($1)",
-       "converter-manual-rule-error": "Se ha detectado un error en una regla de conversión de lenguaje manual",
+       "converter-manual-rule-error": "Se ha detectado un error en una regla manual de conversión de idioma",
        "undo-success": "Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.",
        "undo-failure": "No se ha podido deshacer la edición ya que otro usuario ha realizado una edición intermedia.",
        "undo-norev": "No se ha podido deshacer la edición porque no existe o ha sido borrada.",
        "badsig": "El código de tu firma no es válido; comprueba las etiquetas HTML.",
        "badsiglength": "Tu firma es muy larga.\nDebe contener un máximo de {{PLURAL:$1|un carácter|$1 caracteres}}.",
        "yourgender": "Sexo:",
-       "gender-unknown": "Prefiero no especificarlo",
+       "gender-unknown": "Al mencionarte, el software usará palabras de género neutro siempre que sea posible",
        "gender-male": "Masculino",
        "gender-female": "Femenino",
        "prefs-help-gender": "Este campo es opcional. El software lo utiliza para dirigirse a ti con el género gramatical apropiado. Esta información será pública.",
        "email": "Correo electrónico",
-       "prefs-help-realname": "El nombre real es opcional. Si lo proporcionas, se usará para dar atribución a tu trabajo.",
+       "prefs-help-realname": "El nombre real es opcional.\nSi lo proporcionas, se usará para dar atribución a tu trabajo.",
        "prefs-help-email": "La dirección de correo electrónico es opcional, pero es necesaria para el restablecimiento de tu contraseña, en caso de que la olvides.",
        "prefs-help-email-others": "También puedes permitir que otros usuarios te contacten por correo a través de un enlace en tus páginas de usuario y de discusión.\nTu dirección de correo no se revela cuando otros usuarios te contactan.",
        "prefs-help-email-required": "Es necesario proporcionar una dirección de correo electrónico.",
        "upload-proto-error": "Protocolo incorrecto",
        "upload-proto-error-text": "Para subir archivos desde otra página la URL debe comenzar por <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Error interno al subir el archivo",
-       "upload-file-error-text": "Ha ocurrido un error interno mientras se intentaba crear un fichero temporal en el servidor. Por favor, contacta con un [[Special:ListUsers/sysop|administrador]].",
+       "upload-file-error-text": "Ha ocurrido un error interno mientras se intentaba crear un archivo temporal en el servidor. Contacta con un [[Special:ListUsers/sysop|administrador]].",
        "upload-misc-error": "Error desconocido en la subida",
-       "upload-misc-error-text": "Ha ocurrido un error durante la subida. Por favor verifica que la URL es válida y accesible e inténtalo de nuevo. Si el problema persiste, contacta con un [[Special:ListUsers/sysop|administrador]].",
+       "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.",
        "filedelete-nofile-old": "No existe una versión guardada de '''$1''' con los atributos especificados.",
        "filedelete-otherreason": "Otra razón:",
        "filedelete-reason-otherlist": "Otra razón",
-       "filedelete-reason-dropdown": "*Razones de borrado habituales\n** Violación de copyright\n** Archivo duplicado",
+       "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",
        "randomincategory-nopages": "No hay páginas en la categoría [[:Category:$1|$1]].",
        "randomincategory-category": "Categoría:",
        "randomincategory-legend": "Página aleatoria en categoría",
+       "randomincategory-submit": "Ir",
        "randomredirect": "Ir a una redirección cualquiera",
        "randomredirect-nopages": "No hay redirecciones en el espacio de nombres «$1».",
        "statistics": "Estadísticas",
        "nmembers": "$1 {{PLURAL:$1|artículo|artículos}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|miembro|miembros}}",
        "nrevisions": "$1 {{PLURAL:$1|revisión|revisiones}}",
-       "nviews": "$1 {{PLURAL:$1|vista|vistas}}",
        "nimagelinks": "Usado en {{PLURAL:$1|una página|$1 páginas}}",
        "ntransclusions": "usado en {{PLURAL:$1|una página|$1 páginas}}",
        "specialpage-empty": "Esta página está vacía.",
        "unwatchthispage": "Dejar de vigilar",
        "notanarticle": "No es un artículo",
        "notvisiblerev": "La última revisión de un usuario diferente ha sido borrada",
-       "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} en su lista de seguimiento, sin contar las de discusión.",
+       "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.",
        "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]].",
        "actioncomplete": "Acción completada",
-       "actionfailed": "Acción fallida",
+       "actionfailed": "Falló la acción",
        "deletedtext": "«$1» ha sido borrado.\nVéase $2 para un registro de los borrados recientes.",
        "dellogpage": "Registro de borrados",
        "dellogpagetext": "A continuación se muestra una lista de los borrados más recientes.",
        "deletereason-dropdown": "*Razones comunes de borrado\n** Spam\n** Vandalismo\n** Violación de copyright\n** A petición del mismo autor\n** Redirección incorrecta",
        "delete-edit-reasonlist": "Editar razones de borrado",
        "delete-toobig": "Esta página tiene un historial muy grande, con más de $1 {{PLURAL:$1|revisión|revisiones}}. Borrar este tipo de páginas ha sido restringido para prevenir posibles problemas en {{SITENAME}}.",
-       "delete-warning-toobig": "Esta página tiene un historial de más de $1 {{PLURAL:$1|revisión|revisiones}}. Eliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}. Ten cuidado al borrar.",
+       "delete-warning-toobig": "Esta página tiene un historial de más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}.\nProcede con cautela.",
        "deleteprotected": "No puedes eliminar esta página porque ha sido protegida.",
        "deleting-backlinks-warning": "'''Advertencia:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otras páginas]] enlazan o transcluyen la página que vas a eliminar.",
        "rollback": "Revertir ediciones",
        "rollback-success": "Revertidas las ediciones de $1; recuperada la última versión de $2.",
        "sessionfailure-title": "Error de sesión",
        "sessionfailure": "Parece que hay un problema con tu sesión;\nesta acción ha sido cancelada como medida de precaución contra secuestros de sesión.\nPor favor, pulsa «Atrás», recarga la página de la que viniste e inténtalo de nuevo.",
+       "changecontentmodel": "Cambiar el modelo de contenido de una página",
+       "changecontentmodel-legend": "Cambiar el modelo de contenido",
+       "changecontentmodel-title-label": "Título de página",
+       "changecontentmodel-model-label": "Modelo de contenido nuevo",
+       "changecontentmodel-reason-label": "Motivo:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambió}} el modelo de contenido de la página $3 de \"$4\" a \"$5\"",
+       "logentry-contentmodel-change-revertlink": "revertir",
+       "logentry-contentmodel-change-revert": "revertir",
        "protectlogpage": "Registro de protección",
        "protectlogtext": "Abajo se presenta una lista de protección y desprotección de página.\nVéase [[Special:ProtectedPages|la lista de páginas protegidas]] para ver las protecciones activas en páginas.",
        "protectedarticle": "protegió «[[$1]]»",
        "sp-contributions-uploads": "subidas",
        "sp-contributions-logs": "registros",
        "sp-contributions-talk": "discusión",
-       "sp-contributions-userrights": "administración de derechos de usuarios",
+       "sp-contributions-userrights": "gestión de permisos del usuario",
        "sp-contributions-blocked-notice": "Este usuario está actualmente bloqueado. La última entrada del registro de bloqueos es presentada debajo para mayor referencia:",
        "sp-contributions-blocked-notice-anon": "Esta dirección IP se encuentra actualmente bloqueada.\nA continuación se muestra la última entrada del registro de bloqueos para mayor referencia.",
        "sp-contributions-search": "Buscar contribuciones",
        "tooltip-pt-logout": "Salir de la sesión",
        "tooltip-pt-createaccount": "Te recomendamos crear una cuenta e iniciar sesión; sin embargo, no es obligatorio",
        "tooltip-ca-talk": "Discusión acerca de la página de contenido",
-       "tooltip-ca-edit": "Puedes editar esta página. Utiliza el botón de previsualización antes de guardar",
+       "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-addsection": "Iniciar una sección nueva",
        "tooltip-ca-viewsource": "Esta página está protegida.\nPuedes ver su código fuente",
        "tooltip-ca-history": "Versiones anteriores de esta página",
        "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-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-redirects-value": "$1",
        "pageinfo-subpages-name": "Subpáginas de esta página",
        "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": "Crear de nuevo",
+       "recreate": "La página fue borrada después de que comenzaste a editarla. Pulsa en «$1» para crearla de nuevo.",
        "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.",
        "version-libraries": "Bibliotecas instaladas",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versión",
+       "version-libraries-license": "Licencia",
+       "version-libraries-description": "Descripción",
+       "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]].",
        "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-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 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-suppress-revision-legacy": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de varias ediciones en la página $3",
        "revdelete-content-hid": "contenido ocultado",
        "logentry-import-interwiki": "$1 {{GENDER:$2|importó}} $3 desde otro wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|combinó}} $3 en $4 (revisiones hasta el $5)",
        "logentry-move-move": "$1 {{GENDER:$2|trasladó}} la página $3 a $4",
-       "logentry-move-move-noredirect": "$1 movió la página $3 a $4 sin dejar una redirección",
+       "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-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 creada por $1",
-       "logentry-newusers-byemail": "la cuenta de usuario $3 ha sido creada por $1 y la contraseña ha sido enviada por correo",
+       "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-rights-rights": "$1 modificó los grupos a los que pertenece $3: de $4 a $5",
-       "logentry-rights-rights-legacy": "$1 modificó los grupos a los que pertenece $3",
+       "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",
        "logentry-upload-upload": "$1 {{GENDER:$2|subió}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|subió}} una nueva versión de $3",
        "special-characters-group-khmer": "Jemer",
        "special-characters-title-endash": "semirraya",
        "special-characters-title-emdash": "raya",
-       "special-characters-title-minus": "signo de resta"
+       "special-characters-title-minus": "signo de resta",
+       "mw-widgets-titleinput-description-new-page": "la página aún no existe",
+       "mw-widgets-titleinput-description-redirect": "redirigir a $1"
 }
index 2d52780..c0f3da4 100644 (file)
@@ -23,7 +23,8 @@
                        "WikedKentaur",
                        "לערי ריינהארט",
                        "Boxmein",
-                       "Roland"
+                       "Roland",
+                       "Postituvi"
                ]
        },
        "tog-underline": "Linkide allakriipsutus:",
        "passwordreset": "Parooli lähtestamine",
        "passwordreset-text-one": "Täida see vorm, et oma parool lähtestada.",
        "passwordreset-text-many": "{{PLURAL:$1|Täida üks väljadest, et saada e-kiri ajutise parooliga.}}",
-       "passwordreset-legend": "Parooli lähtestamine",
        "passwordreset-disabled": "Selles vikis on paroolide lähtestamine keelatud.",
        "passwordreset-emaildisabled": "E-posti funktsioonid on selles vikis keelatud.",
        "passwordreset-username": "Kasutajanimi:",
        "resettokens": "Lubade lähtestamine",
        "resettokens-text": "Saad lähtestada load, mida on vaja siin sinu kontoga seotud kindlatele eraandmetele ligipääsuks.\n\nPeaksid load lähtestama, kui jagasid neid kogemata või kui su konto on kellegi teise võimusesse sattunud.",
        "resettokens-no-tokens": "Lähtestatavad load puuduvad.",
-       "resettokens-legend": "Lubade lähtestamine",
        "resettokens-tokens": "Load:",
        "resettokens-token-label": "$1 (praegune väärtus: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|Jälgimisloendis olevatel lehekülgedel tehtud muudatuste]] veebivoo (Atom/RSS) luba",
        "yourdiff": "Erinevused",
        "copyrightwarning": "Pea silmas, et kogu kaastöö võrgukohale {{SITENAME}} loetakse avaldatuks litsentsi $2 all (üksikasjad leheküljel $1). Kui sa ei soovi, et sinu kirjutatut halastamatult redigeeritakse ja oma äranägemise järgi kasutatakse, siis ära seda siia salvesta.<br />\nKinnitad ka, et kirjutasid selle ise või võtsid selle allikast, mille materjale ei kaitsta autoriõigusega või muust sarnasest vabast allikast.<br />\n'''Ära salvesta autoriõigusega kaitstud materjali ilma loata!'''",
        "copyrightwarning2": "Pea silmas, et teised kaastöölised võivad kogu {{GRAMMAR:inessive|{{SITENAME}}}} tehtud kaastööd muuta või eemaldada. Kui sa ei soovi, et su kirjutatut halastamatult redigeeritakse, siis ära seda siia salvesta.<br />\nSa kinnitad ka, et kirjutasid selle ise või võtsid selle kopeerimiskitsenduseta allikast (vaata ka $1).\n'''Ära saada autoriõigusega kaitstud materjali loata!'''",
+       "editpage-cannot-use-custom-model": "Selle lehekülje sisumudelit ei saa muuta.",
        "longpageerror": "'''Tõrge: Lehekülge ei saa salvestada, sest sinu esitatud {{PLURAL:$1|ühe|$1}} kilobaidi suurune tekst ületab {{PLURAL:$2|ühekilobaidist|$2-kilobaidist}} ülemmäära.'''",
        "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:",
        "uploaddisabledtext": "Faili üleslaadimine on keelatud.",
        "php-uploaddisabledtext": "Failide üleslaadmine on PHP seadetes keelatud.\nPalun vaata <code>file_uploads</code> sätet.",
        "uploadscripted": "See fail sisaldab HTML- või skriptikoodi, mida veebilehitseja võib valesti kuvada.",
-       "upload-scripted-pi-callback": "Üles ei saa laadida faili, mis sisaldab XML-laadilehe protsessikäsku.",
+       "upload-scripted-pi-callback": "Üles ei saa laadida faili, mis sisaldab XML-laadilehe töötluskäsku.",
        "uploaded-script-svg": "Üleslaaditud SVG-failist leiti skriptitav element \"$1\".",
        "uploaded-hostile-svg": "Üleslaaditud SVG-faili laadielemendist leiti ebaturvaline CSS.",
        "uploaded-event-handler-on-svg": "Sündmuse halduse atribuutide <code>$1=\"$2\"</code> seadmine pole SVG-failis lubatud.",
        "randomincategory-nopages": "Kategoorias \"[[:Category:$1|$1]]\" puuduvad leheküljed.",
        "randomincategory-category": "Kategooria:",
        "randomincategory-legend": "Juhuslik lehekülg kategoorias",
+       "randomincategory-submit": "Mine",
        "randomredirect": "Juhuslik ümbersuunamine",
        "randomredirect-nopages": "Nimeruumis \"$1\" ei ole ümbersuunamislehekülgi.",
        "statistics": "Arvandmestik",
        "nmembers": "$1 {{PLURAL:$1|liige|liiget}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|liige|liiget}}",
        "nrevisions": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}}",
-       "nviews": "$1 {{PLURAL:$1|külastus|külastust}}",
        "nimagelinks": "Kasutuses {{PLURAL:$1|ühel leheküljel|$1 leheküljel}}",
        "ntransclusions": "kasutuses {{PLURAL:$1|ühel leheküljel|$1 leheküljel}}",
        "specialpage-empty": "Vasteid ei leidu.",
        "version-libraries": "Paigaldatud teegid",
        "version-libraries-library": "Teek",
        "version-libraries-version": "Versioon",
+       "version-libraries-license": "Litsents",
+       "version-libraries-description": "Kirjeldus",
+       "version-libraries-authors": "Autorid",
        "redirect": "Ümbersuunamine faili, kasutaja, lehekülje või redaktsiooni identifikaatori järgi",
        "redirect-legend": "Ümbersuunamine faili juurde või leheküljele",
        "redirect-summary": "See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni või lehekülje identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde. Kasutamine: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] või [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmeeri",
        "special-characters-title-endash": "mõttekriips",
        "special-characters-title-emdash": "pikk mõttekriips",
-       "special-characters-title-minus": "miinusmärk"
+       "special-characters-title-minus": "miinusmärk",
+       "mw-widgets-titleinput-description-new-page": "lehekülge pole veel",
+       "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\""
 }
index 346514a..0a74c8f 100644 (file)
        "passwordreset": "Pasahitzaren berrezarpena",
        "passwordreset-text-one": "Bete formulario hau zure pasahitza berrezartzeko.",
        "passwordreset-text-many": "{{PLURAL:$1|Sartu datuetako bat zure pasahitza berrezartzeko.}}",
-       "passwordreset-legend": "Pasahitza berrezarri",
        "passwordreset-disabled": "Pasahitza berrezartzea ez da posible wiki honetan.",
        "passwordreset-emaildisabled": "E-posta aukerak ez daude eskuragarri wiki honetan.",
        "passwordreset-username": "Lankide izena:",
        "changeemail-submit": "E-posta aldatu",
        "resettokens": "Tokenak berrezarri",
        "resettokens-no-tokens": "Ez dago tokenik berrezartzeko.",
-       "resettokens-legend": "Tokenak berrezarri",
        "resettokens-tokens": "Tokenak:",
        "resettokens-token-label": "$1 (oraingo balioa: $2)",
        "resettokens-watchlist-token": "(Atom/RSS) jarioarentzako tokenak [[Special:Watchlist|jarraitzen dituzun orrialdeen aldaketetarako]]",
        "creating": "«$1» sortzen",
        "editingsection": "«$1» aldatzen (atala)",
        "editingcomment": "«$1» aldatzen (atal berria)",
-       "editconflict": "Aldaketa gatazka: $1",
+       "editconflict": "Zure aldaketak ezin izan dira gorde, edizio gatazka bat izan delako. Gatazka eskuz konpondu nahi {{GENDER:|duzu}}?",
        "explainconflict": "Zu orrialdea aldatzen hasi ondoren beste norbaitek ere aldaketak egin ditu.\nGoiko testu koadroan ikus daiteke orrialdeak uneotan duen edukia.\nZure aldaketak beheko testu koadroan ikus daitezke.\nZure testua dagoenarekin elkartu beharko duzu.\nOrrialdea gordetzeko erabakitzen duzun unean goiko koadroko edukia '''bakarrik''' gordeko da.",
        "yourtext": "Zure testua",
        "storedversion": "Gordetako bertsioa",
        "currentrev": "Oraingo berrikuspena",
        "currentrev-asof": "Hauxe da oraingo bertsioa, $1 data duena",
        "revisionasof": "$1(e)ko berrikuspena",
-       "revision-info": "$2(r)en berrikusketa, ordua: $1",
+       "revision-info": "{{GENDER:$6|$2}}$7(r)en berrikusketa, ordua: $1",
        "previousrevision": "←Berrikuspen zaharragoa",
        "nextrevision": "Berrikuspen berriagoa→",
        "currentrevisionlink": "Oraingo berrikuspena ikusi",
        "license": "Lizentzia:",
        "license-header": "Lizentzia",
        "nolicense": "Hautatu gabe",
+       "licenses-edit": "Aldatu lizentzien aukerak",
        "license-nopreview": "(Aurreikuspenik ez)",
        "upload_source_url": " (baliozko URL publikoa)",
        "upload_source_file": " (zure ordenagailuko fitxategi bat)",
        "randomincategory-invalidcategory": "\"$1\" ez da kategoria izen baliagarri bat.",
        "randomincategory-nopages": "Ez dago orrialderik [[:Category:$1|$1]] kategorian.",
        "randomincategory-category": "Kategoria:",
+       "randomincategory-submit": "Joan",
        "randomredirect": "Ausazko birbideratzea",
        "randomredirect-nopages": "Ez dago birzuzenketarik \"$1\" izen-tartean.",
        "statistics": "Estatistikak",
        "nmembers": "{{PLURAL:$1|partaide 1|$1 partaide}}",
        "nmemberschanged": "$1 → {{PLURAL:$2|kide $2|$2 kide}}",
        "nrevisions": "{{PLURAL:$1|berrikuspen 1|$1 berrikuspen}}",
-       "nviews": "{{PLURAL:$1|ikusketa 1|$1 ikusketa}}",
        "nimagelinks": "{{PLURAL:$1|Orrialde batean erabilia|$1 orrialdetan erabilia}}",
        "ntransclusions": "{{PLURAL:$1|orrialde batean erabilia|$1 orrialdetan erabilia}}",
        "specialpage-empty": "Ez dago emaitzarik bilaketa honetarako.",
        "protectedpages-indef": "Babes mugagabeak bakarrik",
        "protectedpages-cascade": "Kaskada moduko babesak bakarrik",
        "protectedpagesempty": "Ez dago parametro horiek dituen babesturiko orrialderik oraintxe.",
+       "protectedpages-page": "Orria",
+       "protectedpages-expiry": "Epemuga:",
        "protectedpages-reason": "Arrazoia",
        "protectedpages-unknown-timestamp": "Ezezaguna",
        "protectedpages-unknown-performer": "Erabiltzaile ezezaguna",
        "pager-older-n": "{{PLURAL:$1|zaharragoa den 1|zaharragoak diren $1}}",
        "suppress": "Gain-ikuspena",
        "querypage-disabled": "Orrialde berezi hau desgaituta dago funtzionamendu arrazoiengatik.",
+       "apihelp": "API laguntza",
        "apihelp-no-such-module": "Ez da \"$1\" modulua aurkitu.",
        "booksources": "Iturri liburuak",
        "booksources-search-legend": "Liburuen bilaketa",
        "rollback-success": "$1 wikilariaren aldaketak deseginda,\nedukia $2 wikilariaren azken bertsiora itzuli da.",
        "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",
        "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\"",
        "ipb-unblock-addr": "$1 lankide edo IP helbideari blokeoa baliogabetu",
        "ipb-unblock": "Erabiltzaile izen edo IP helbide bati blokeoa kendu",
        "ipb-blocklist": "Blokeaketak ikusi",
-       "ipb-blocklist-contribs": "$1(r)en ekarpenak",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1(r)en}} ekarpenak",
        "unblockip": "Erabiltzailea desblokeatu",
        "unblockiptext": "Erabili beheko formularioa lehenago blokeatutako IP helbide edo erabiltzaile baten idazketa baimenak leheneratzeko.",
        "ipusubmit": "Blokeoa ezabatu",
        "import": "Orrialdeak inportatu",
        "importinterwiki": "Wikien arteko inportazioa",
        "import-interwiki-text": "Aukeratu inportatzeko wiki eta orrialde izenburu bat. Berrikuspenen datak eta egileak gorde egingo dira. Inportazio ekintza guzti hauek [[Special:Log/import|inportazio erregistroan]] gordetzen dira.",
+       "import-interwiki-sourcewiki": "Jatorrizko wikia:",
+       "import-interwiki-sourcepage": "Jatorrizko orria:",
        "import-interwiki-history": "Orrialde honen historiako bertsio guztiak kopiatu",
        "import-interwiki-templates": "Txantiloi guztiak sartu",
        "import-interwiki-submit": "Inportatu",
        "tooltip-pt-logout": "Saioa itxi",
        "tooltip-pt-createaccount": "Kontu bat sortu eta horrekin saioa hastea eskatu nahi genizuke; ez da ezinbestekoa, ordea.",
        "tooltip-ca-talk": "Artikuluari buruzko eztabaida",
-       "tooltip-ca-edit": "Artikulu hau aldatu dezakezu. Mesedez, aurrebista botoia erabil ezazu gorde baino lehen.",
+       "tooltip-ca-edit": "Orri hau aldatu iturburu kodea erabiliz",
        "tooltip-ca-addsection": "Iruzkin berria erantsi",
        "tooltip-ca-viewsource": "Artikulu hau babesturik dago. Bere kodea soilik ikus dezakezu.",
        "tooltip-ca-history": "Artikulu honen aurreko bertsioak.",
        "version-entrypoints-header-entrypoint": "Sarrera puntua",
        "version-entrypoints-header-url": "URL",
        "version-libraries-version": "Bertsioa",
+       "version-libraries-license": "Lizentzia",
+       "version-libraries-description": "Deskribapena",
+       "version-libraries-authors": "Egileak",
        "redirect": "Birzuzendu fitxategi, lankide edo berrikuspen IDaren arabera",
        "redirect-legend": "Orrialde edo fitxategi batera birzuzendu",
        "redirect-submit": "Joan",
        "tags": "Etiketa aldaketa zuzena",
        "tag-filter": "[[Special:Tags|Etiketa]] iragazkia:",
        "tag-filter-submit": "Iragazkia",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketak}}]]: $2)",
        "tags-title": "Etiketak",
        "tags-intro": "Orri honek softwareak aldatzeko bezala marka ditzazkeen etiketak zerrendatzen ditu, eta berauen esanahia.",
        "tags-tag": "Etiketaren izena",
        "tags-active-yes": "Bai",
        "tags-active-no": "Ez",
        "tags-edit": "aldatu",
+       "tags-delete": "ezabatu",
+       "tags-activate": "aktibatu",
        "tags-hitcount": "$1 {{PLURAL:$1|aldaketa|aldaketa}}",
        "tags-create-reason": "Arrazoia:",
        "tags-create-submit": "Sortu",
        "tags-delete-reason": "Arrazoia:",
        "tags-activate-reason": "Arrazoia:",
+       "tags-activate-submit": "Aktibatu",
        "tags-deactivate-reason": "Arrazoia:",
+       "tags-edit-new-tags": "Etiketa berriak:",
+       "tags-edit-add": "Gehitu etiketa hauek:",
+       "tags-edit-remove": "Kendu etiketa hauek:",
+       "tags-edit-remove-all-tags": "(kendu etiketa guztiak)",
+       "tags-edit-chosen-placeholder": "Hautatu etiketa batzuk",
        "tags-edit-reason": "Arrazoia:",
        "comparepages": "Orrialdeak alderatu",
        "compare-page1": "1. orrialdea",
        "mediastatistics-table-mimetype": "MIME mota",
        "mediastatistics-table-count": "Fitxategi kopurua",
        "mediastatistics-header-unknown": "Ezezaguna",
+       "mediastatistics-header-bitmap": "Bit-mapako irudiak",
+       "mediastatistics-header-drawing": "Marrazkiak (irudi bektorialak)",
        "mediastatistics-header-video": "Bideoak",
        "json-error-syntax": "Sintaxi-errorea",
        "special-characters-group-latin": "Latina",
        "special-characters-group-persian": "Persiera",
        "special-characters-group-hebrew": "Hebreera",
        "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Sinhala",
        "special-characters-group-gujarati": "Guajarati",
        "special-characters-group-thai": "Thaiera",
        "special-characters-group-lao": "Laosera",
-       "special-characters-group-khmer": "Khmerrera"
+       "special-characters-group-khmer": "Khmerrera",
+       "special-characters-title-minus": "minus zeinua"
 }
index d68dc90..288e4b8 100644 (file)
        "nospecialpagetext": "<strong>شما یک صفحهٔ ویژهٔ نامجاز را درخواست کرده‌اید.</strong>\n\nفهرستی از صفحه‌های ویژهٔ مجاز در [[Special:SpecialPages|{{int:specialpages}}]] وجود دارد.",
        "error": "خطا",
        "databaseerror": "خطای پایگاه داده",
-       "databaseerror-text": "مشکلی در پایگاه‌داده‌ها رخ دادهاست. \nاین ممکن است نشان‌دهندهٔ ایرادی در نرم‌افزار باشد.",
-       "databaseerror-textcl": "یک خطای پرس‌وجوی پایگاه داده‌های رخ دادهاست.",
+       "databaseerror-text": "مشکلی در پایگاه‌داده‌ها رخ داده است. \nاین ممکن است نشان‌دهندهٔ ایرادی در نرم‌افزار باشد.",
+       "databaseerror-textcl": "یک خطای پرس‌وجوی پایگاه داده‌های رخ داده است.",
        "databaseerror-query": "پرس‌وجو: $1",
        "databaseerror-function": "تابع: $1",
        "databaseerror-error": "خطا: $1",
        "userlogin-signwithsecure": "از ورود امن استفاده کنید",
        "yourdomainname": "دامنهٔ شما:",
        "password-change-forbidden": "شما نمی‌توانید گذرواژه‌ها را در این ویکی تغییر دهید.",
-       "externaldberror": "خطایی در ارتباط با پایگاه داده رخ دادهاست یا اینکه شما اجازهٔ به‌روزرسانی حساب خارجی خود را ندارید.",
+       "externaldberror": "خطایی در ارتباط با پایگاه داده رخ داده است یا اینکه شما اجازهٔ به‌روزرسانی حساب خارجی خود را ندارید.",
        "login": "ورود به سامانه",
        "nav-login-createaccount": "ورود به سامانه / ایجاد حساب کاربری",
        "userlogin": "ورود به سامانه / ایجاد حساب کاربری",
        "userlogin-helplink2": "کمک با ورود",
        "userlogin-loggedin": "شما در حال حاضر به عنوان {{GENDER:$1|$1}} وارد شده‌اید.\nاز فرم پایین برای ورود به عنوان یک کاربر دیگر استفاده کنید.",
        "userlogin-createanother": "ایجاد یک حساب کاربری دیگر",
-       "createacct-emailrequired": "آدرس ایمیل",
-       "createacct-emailoptional": "آدرس ایمیل (اختیاری)",
-       "createacct-email-ph": "آدرس ایمیل خود را وارد کنید",
+       "createacct-emailrequired": "نشانی ایمیل",
+       "createacct-emailoptional": "نشانی ایمیل (اختیاری)",
+       "createacct-email-ph": "نشانی ایمیل خود را وارد کنید",
        "createacct-another-email-ph": "آدرس ایمیل را وارد کنید",
        "createaccountmail": "استفاده از رمز عبور موقت تصادفی و ارسال آن به آدرس ایمیل مشخص شده",
        "createacct-realname": "نام واقعی (اختیاری)",
        "createacct-imgcaptcha-ph": "متن تصویری که در بالا می‌بینید، وارد کنید",
        "createacct-submit": "حسابتان را بسازید",
        "createacct-another-submit": "ایجاد حساب کاربری دیگر",
-       "createacct-benefit-heading": "{{SITENAME}} توسط افرادی مانند شما ساخته شدهاست",
+       "createacct-benefit-heading": "{{SITENAME}} توسط افرادی مانند شما ساخته شده است",
        "createacct-benefit-body1": "{{PLURAL:$1|ویرایش}}",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحه}}",
        "createacct-benefit-body3": "{{PLURAL:$1|مشارکت‌کنندهٔ}} اخیر",
        "passwordreset": "بازنشانی گذرواژه",
        "passwordreset-text-one": "برای بازنشانی گذرواژه‌تان این فرم را کامل کنید.",
        "passwordreset-text-many": "{{PLURAL:$1|برای دریافت یک گذرواژهٔ موقت از طریق ایمیل، یکی از خانه‌ها را پر کنید.}}",
-       "passwordreset-legend": "بازنشانی گذرواژه",
        "passwordreset-disabled": "بازنشانی گذرواژه در این ویکی غیرفعال شده است.",
        "passwordreset-emaildisabled": "قابلیت‌های ایمیل در این ویکی غیرفعال شده‌اند.",
        "passwordreset-username": "نام کاربری:",
        "passwordreset-capture-help": "اگر این گزینه را علامت بزنید، ایمیل (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.",
        "passwordreset-email": "نشانی ایمیل:",
        "passwordreset-emailtitle": "جزئیات حساب در {{SITENAME}}",
-       "passwordreset-emailtext-ip": "یک نفر (احتمالاً شما، با نشانی آی‌پی $1) درخواست بازنشانی گذرواژه‌تان در {{SITENAME}} ($4) را کرده‌است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این آدرس ایمیل مرتبط هستند:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} پس از {{PLURAL:$5|یک روز|$5 روز}} باطل خواهند شد.\nشما باید هم‌اکنون ثبت ورود کنید و گذرواژه‌ای جدید برگزینید. اگر فکر می‌کنید شخص دیگری این درخواست را دادهاست یا اگر گذرواژهٔ اصلی‌تان را به یاد آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
+       "passwordreset-emailtext-ip": "یک نفر (احتمالاً شما، با نشانی آی‌پی $1) درخواست بازنشانی گذرواژه‌تان در {{SITENAME}} ($4) را کرده‌است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این آدرس ایمیل مرتبط هستند:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} پس از {{PLURAL:$5|یک روز|$5 روز}} باطل خواهند شد.\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": "تغییر آدرس ایمیل",
+       "changeemail": "تغییر نشانی ایمیل",
        "changeemail-text": "این فرم را تکمیل کنید تا آدرس ایمیلتان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
        "changeemail-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
        "changeemail-oldemail": "آدرس ایمیل کنونی:",
        "resettokens": "بازنشانی شناساننده‌ها",
        "resettokens-text": "شما می توانید شناساننده‌ها که اجازهٔ دسترسی به برخی داده‌های خصوصی مرتبط با حسابتان را می‌دهد بازنشانی کنید.\nدر صورتی باید این کار را انجام دهید که تصادقاً آن‌ها را با کسی در میان گذاشته‌اید یا به حسابتان نفوذ شده است.",
        "resettokens-no-tokens": "هیچ شناساننده‌ای برای بازنشانی وجود ندارد.",
-       "resettokens-legend": "بازنشانی شناساننده‌ها",
        "resettokens-tokens": "شناساننده‌ها:",
        "resettokens-token-label": "$1 (مقدار کنونی: $2)",
        "resettokens-watchlist-token": "شناسانندهٔ خوراک وبِی [[Special:Watchlist|تغییرات صفحه‌هایی که پی‌گیری می‌کنید]] (اتم/آراس‌اس)",
        "creating": "ایجاد $1",
        "editingsection": "در حال ویرایش $1 (بخش)",
        "editingcomment": "در حال ویرایش $1 (بخش تازه)",
-       "editconflict": "تعارض Ù\88Û\8cراÛ\8cØ´Û\8c: $1",
-       "explainconflict": "از وقتی ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده‌است.\nناحیهٔ متنی بالایی شامل متن صفحه به شکل کنونی آن است.\nتغییرات شما در ناحیهٔ متنی پایینی نشان داده شده‌است.\nشما باید تغییراتتان را با متن کنونی ترکیب کنید.\nبا فشردن دکمهٔ «{{int:savearticle}}» '''فقط''' متن ناحیهٔ متنی بالایی ذخیره خواهد شد.",
+       "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",
+       "explainconflict": "از وقتی ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده است.\nناحیهٔ متنی بالایی شامل متن صفحه به شکل کنونی آن است.\nتغییرات شما در ناحیهٔ متنی پایینی نشان داده شده‌است.\nشما باید تغییراتتان را با متن کنونی ترکیب کنید.\nبا فشردن دکمهٔ «{{int:savearticle}}» <strong>فقط</strong> متن ناحیهٔ متنی بالایی ذخیره خواهد شد.",
        "yourtext": "متن شما",
        "storedversion": "نسخهٔ ذخیره شده",
        "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحات را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
        "yourdiff": "تفاوت‌ها",
        "copyrightwarning": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} منتشرشده تحت $2 در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر $1 را ببینید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر $1 را ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
        "copyrightwarning2": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} ممکن است توسط دیگر مشارکت‌کنندگان تغییر یابند، ویرایش یا حذف شوند.\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید ($1 را برای جزئیات بیشتر ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
+       "editpage-cannot-use-custom-model": "مدل محتوای این صفحه نمی‌تواند عوض شود.",
        "longpageerror": "'''خطا: متنی که ارسال کرده‌اید {{PULAR:$1|یک کیلوبایت|$1 کیلوبایت}} طول دارد. این مقدار از مقدار بیشینهٔ {{PLURAL:$2|یک کیلوبایت|$2 کیلوبایت}} بیشتر است.'''\nنمی‌توان آن را ذخیره کرد.",
        "readonlywarning": "'''هشدار: پایگاه داده برای نگهداری قفل شده‌است، به همین علت هم‌اکنون نمی‌توانید ویرایش‌هایتان را ذخیره کنید.'''\nاگر می‌خواهید متن را در یک پروندهٔ متنی کپی کنید و برای آینده ذخیره‌اش کنید.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
        "protectedpagewarning": "'''هشدار: این صفحه قفل شده‌است تا فقط کاربران با دسترسی مدیریت بتوانند ویرایشش کنند.'''\nآخرین موارد سیاهه در زیر آمده‌است:",
        "content-model-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|فراخوانی|فراخوانی}} باشد، و اینک {{PLURAL:$1|$1 فراخوانی|$1 فراخوانی}} است.",
        "prefs-watchlist-token": "رمز فهرست پی‌گیری:",
        "prefs-misc": "متفرقه",
        "prefs-resetpass": "تغییر گذرواژه",
-       "prefs-changeemail": "تغییر آدرس ایمیل",
+       "prefs-changeemail": "تغییر نشانی ایمیل",
        "prefs-setemail": "تنظیم آدرس ایمیل",
        "prefs-email": "گزینه‌های ایمیل",
        "prefs-rendering": "نمایش صفحه",
        "badsig": "امضای خام نامجاز.\nلطفاً برچسب‌های اچ‌تی‌ام‌ال را بررسی کنید.",
        "badsiglength": "امضای شما بیش از اندازه طولانی است.\nامضا باید کمتر از $1 {{PLURAL:$1|نویسه}} طول داشته باشد.",
        "yourgender": "ترجیح می‌دهید چگونه توصیف شوید؟",
-       "gender-unknown": "ترجیح می‌دهم مشخص نکنم",
+       "gender-unknown": "هنگام ذکر شما، نرم‌افزار تا جای ممکن از کلمات خنثی از نظر جنسیت استفاده خواهد",
        "gender-male": "مرد",
        "gender-female": "زن",
        "prefs-help-gender": "انجام این تنظیم اختیاری است.\nنرم‌افزار از این مقدار برای اشارهٔ صحیح به جنسیت و ذکر شما برای دیگران با استفاده از دستور زبان درست استفاده می‌کند.\nاین اطلاعات عمومی خواهند بود.",
        "right-createpage": "ایجاد صفحه (در مورد صفحه‌های غیر بحث)",
        "right-createtalk": "ایجاد صفحه‌های بحث",
        "right-createaccount": "ایجاد حساب‌های کاربری",
-       "right-minoredit": "علامتزدن ویرایش‌ها به عنوان جزئی",
+       "right-minoredit": "علامت زدن ویرایش‌ها به عنوان جزئی",
        "right-move": "انتقال صفحه",
        "right-move-subpages": "انتقال صفحات به همراه زیر‌صفحات‌شان",
        "right-move-rootuserpages": "انتقال صفحه‌های کاربری سرشاخه",
        "right-editmyprivateinfo": "داده‌های خصوصی خود را ویرایش کنید (مانند آدرس ایمیل و نام واقعی)",
        "right-editmyoptions": "ترجیحات خود را ویرایش",
        "right-rollback": "واگردانی سریع ویرایش‌های آخرین کاربری که یک صفحه را ویرایش کرده‌است",
-       "right-markbotedits": "علامتزدن ویرایش‌های واگردانی‌شده به عنوان ویرایش ربات",
+       "right-markbotedits": "علامت زدن ویرایش‌های واگردانی‌شده به عنوان ویرایش ربات",
        "right-noratelimit": "تاثیر نپذیرفتن از محدودیت سرعت",
        "right-import": "واردکردن صفحه از ویکی‌های دیگر",
        "right-importupload": "واردکردن صفحه از طریق بارگذاری پرونده",
        "recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پی‌گیری کنید.",
        "recentchanges-label-newpage": "این ویرایش صفحه‌ای تازه ایجاد کرد",
        "recentchanges-label-minor": "این یک ویرایش جزئی‌است",
-       "recentchanges-label-bot": "این ویرایش را یک ربات انجام دادهاست",
-       "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشدهاست",
+       "recentchanges-label-bot": "این ویرایش را یک ربات انجام داده است",
+       "recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده است",
        "recentchanges-label-plusminus": "حجم صفحه به اندازه این مقدار بایت تغییر یافته است",
        "recentchanges-legend-heading": "'''اختصارها:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات تازه]] نگاه کنید)",
        "rcshowhidebots-hide": "پنهان کردن",
        "rcshowhideliu": "$1 کاربران ثبت‌نام‌کردە",
        "rcshowhideliu-show": "نمایش",
-       "rcshowhideliu-hide": "Ù¾Ù\86Ù\87اÙ\86 Ú©Ø±Ø¯ن",
+       "rcshowhideliu-hide": "Ù\86Ù\87Ù\81تن",
        "rcshowhideanons": "$1 کاربران ناشناس",
        "rcshowhideanons-show": "نمایش",
        "rcshowhideanons-hide": "پنهان کردن",
        "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:, etc) در پرونده‌های اس‌وی‌جی مجاز نیست.",
        "uploadscriptednamespace": "این پوشه اس‌وی‌جی شامل فضای نام غیرقانونی '$1' است",
        "uploadinvalidxml": "XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.",
        "uploadvirus": "این پرونده ویروس دارد!\nجزئیات : $1",
        "uploadstash-nofiles": "شما هیچ پروندهٔ انبارشده‌ای ندارید.",
        "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. دوباره امتحان کنید.",
        "uploadstash-errclear": "پاک‌کردن پرونده‌ها ناموفق بود.",
-       "uploadstash-refresh": "تازهکردن فهرست پرونده‌ها",
+       "uploadstash-refresh": "تازه کردن فهرست پرونده‌ها",
        "invalid-chunk-offset": "جابجایی نامعتبر قطعه",
        "img-auth-accessdenied": "منع دسترسی",
        "img-auth-nopathinfo": "PATH_INFO موجود نیست.\nسرور شما برای ردکردن این مقدار تنظیم نشده‌است.\nممکن است مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization را ببینید.",
        "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": "نتیجه‌ای برای این گزارش وجود ندارد.",
        "noautoblockblock": "بستن خودکار غیرفعال است",
        "createaccountblock": "امکان ساخت حساب گرفته‌شده",
        "emailblock": "ایمیل بسته‌شده",
-       "blocklist-nousertalk": "نمی تواند صفحهٔ بحث خود را ویرایش کند",
+       "blocklist-nousertalk": "نمیتواند صفحهٔ بحث خود را ویرایش کند",
        "ipblocklist-empty": "فهرست بسته‌شدن‌ها خالی‌است.",
        "ipblocklist-no-results": "دسترسی حساب کاربری یا نشانی آی‌پی مورد نظر قطع نیست.",
        "blocklink": "بستن",
        "ip_range_toolarge": "قطع دسترسی بازه‌های بزرگتر از /$1 مجاز نیست.",
        "proxyblocker": "مسدود کننده پروکسی",
        "proxyblockreason": "نشانی آی‌پی شما بسته شده است چون متعلق به یک پروکسی باز است.\nلطفاً با ارائه دهندهً خدمات اینترنت خود یا پشتیبانی فنی تماس بگیرید و آنها را از این مشکل امنیتی جدی آگاه کنید.",
-       "sorbsreason": "نشانی آی‌پی شما توسط DNSBL مورد استفاده {{SITENAME}} به عنوان یک پروکسی باز گزارش شدهاست.",
+       "sorbsreason": "نشانی آی‌پی شما توسط DNSBL مورد استفاده {{SITENAME}} به عنوان یک پروکسی باز گزارش شده است.",
        "sorbs_create_account_reason": "نشانی آی‌پی شما توسط DNSBL مورد استفاده {{SITENAME}} به عنوان یک پروکسی باز گزارش شده‌است.\nشما اجازهٔ ساختن حساب کاربری ندارید.",
        "xffblockreason": "نشانی آی‌پی در X-Forwarded-For header موجود است و پروکسی شما یا سروری که از آن استفاده می‌کنید بسته‌شده‌است. دلیل بسته‌شدن: $1",
        "cant-see-hidden-user": "کاربری که می‌خواهید ببندید قبلاً بسته شده و پنهان گردیده است. چون شما دسترسی پنهان کردن کاربران را ندارید، نمی‌توانید قطع دسترسی کاربر را ببینید یا ویرایش کنید.",
        "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_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nآدرس ایمیل حساب «$2» در {{SITENAME}} را به این آدرس تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز تا تغییر آدرس ایمیل، لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
        "confirmemail_invalidated": "تأیید آدرس ایمیل لغو شد",
        "invalidateemail": "لغو تأیید آدرس ایمیل",
        "scarytranscludedisabled": "[تراگنجانش بین‌ویکیانه فعال نیست]",
        "deletedwhileediting": "'''هشدار''': این صفحه پس از اینکه شما آغاز به ویرایش آن کرده‌اید، حذف شده است!",
        "confirmrecreate": "کاربر [[User:$1|$1]] ([[User talk:$1|بحث]]) این مقاله را پس از اینکه شما آغاز به ویرایش آن نموده‌اید به دلیل زیر حذف کرده است :\n: ''$2''\nلطفاً تأیید کنید که مجدداً می‌خواهید این مقاله را بسازید.",
        "confirmrecreate-noreason": "کاربر [[User:$1|$1]] ([[User talk:$1|بحث]]) این صفحه را پس از شروع ویرایش‌تان پاک کرده‌است.  لطفاً تأیید کنید که شما واقعاً می‌خواهید آن را دوباره ایجاد کنید.",
-       "recreate": "بازاÛ\8cجاد",
+       "recreate": "صÙ\81Ø­Ù\87 Ø§Ø² Ø²Ù\85اÙ\86Û\8c Ú©Ù\87 Ø´Ù\85ا Ù\85شغÙ\88Ù\84 Ù\88Û\8cراÛ\8cØ´ Ø´Ø¯Û\8cد Ø­Ø°Ù\81 Ø´Ø¯. Ø¨Ø±Ø§Û\8c Ø³Ø§Ø®Øª Ù\85جدد ØµÙ\81Ø­Ù\87 \"$1\" Ø±Ø§ Ù\81شار Ø¯Ù\87Û\8cد.",
        "confirm_purge_button": "تأیید",
        "confirm-purge-top": "پاک‌کردن نسخهٔ حافظهٔ نهانی (Cache) این صفحه را تأیید می‌کنید؟",
        "confirm-purge-bottom": "خالی کردن میانگیر یک صفحه باعث می‌شود که آخرین نسخهٔ آن نمایش یابد.",
        "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/Example.jpg]]، \n[[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یا [[{{#Special:Redirect}}/user/101]].",
        "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 89f878d..a76cdcd 100644 (file)
        "passwordreset": "Salasanan uudistus",
        "passwordreset-text-one": "Täytä tämä lomake uudistaaksesi salasanasi.",
        "passwordreset-text-many": "{{PLURAL:$1|Täytä yksi kentistä, jotta saat väliaikaisen salasanan sähköpostitse.}}",
-       "passwordreset-legend": "Salasanan uudistus",
        "passwordreset-disabled": "Salasanojen uudistaminen ei ole mahdollista tässä wikissä.",
        "passwordreset-emaildisabled": "Sähköpostitoiminnot on poistettu käytöstä tässä wikissä.",
        "passwordreset-username": "Käyttäjätunnus:",
        "resettokens": "Uudista avaimet",
        "resettokens-text": "Tällä sivulla voit uudistaa avaimesi (''eng.'' reset tokens), jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.\n\nSinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.",
        "resettokens-no-tokens": "Avaimia ei ole uudistettavaksi.",
-       "resettokens-legend": "Uudista avaimet",
        "resettokens-tokens": "Avaimet:",
        "resettokens-token-label": "$1 (nykyinen arvo: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|Tarkkailulistan]] verkkosyötteen (Atom tai RSS) avain",
        "yourdiff": "Eroavaisuudet",
        "copyrightwarning": "'''Muutoksesi astuvat voimaan välittömästi.''' Kaikki {{GRAMMAR:illative|{{SITENAME}}}} tehtävät tuotokset katsotaan julkaistuksi $2 -lisenssin mukaisesti ($1). Jos et halua, että kirjoitustasi muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi. Tallentamalla muutoksesi lupaat, että kirjoitit tekstisi itse, tai kopioit sen jostain vapaasta lähteestä. '''ÄLÄ KÄYTÄ TEKIJÄNOIKEUDEN ALAISTA MATERIAALIA ILMAN LUPAA!'''",
        "copyrightwarning2": "Huomaa, että kuka tahansa voi muokata, muuttaa ja poistaa kaikkia sivustolle tekemiäsi lisäyksiä ja muutoksia. Muokkaamalla sivustoa luovutat sivuston käyttäjille tämän oikeuden ja takaat, että lisäämäsi aineisto on joko itse kirjoittamaasi tai peräisin jostain vapaasta lähteestä. Lisätietoja sivulla $1. '''TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!'''",
+       "editpage-cannot-use-custom-model": "Tämän sivun sisältömallia (content model) ei voida muuttaa.",
        "longpageerror": "'''Virhe: Lähettämäsi tekstin pituus on {{PLURAL:$1|kilotavu|$1 kilotavua}}. Tekstiä ei voida tallentaa, koska se on pitempi kuin sallittu enimmäispituus {{PLURAL:$2|yksi kilotavu|$2 kilotavua}}.'''",
        "readonlywarning": "'''Varoitus: Tietokanta on lukittu huoltoa varten, joten et pysty tallentamaan muokkauksiasi juuri nyt.'''\nSaattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin.\n\nLukitsemisen syy: $1",
        "protectedpagewarning": "'''Varoitus: Tämä sivu on suojattu niin, että vain ylläpitäjät voivat muokata sitä.'''\nAlla on viimeisin lokitapahtuma:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Tyhjä objekti",
        "content-json-empty-array": "Tyhjä array",
+       "duplicate-args-warning": "<strong>Varoitus:</strong> [[:$1]] kutsuu mallinetta [[:$2]] niin, että parametrille \"$3\" on annettu enemmän kuin yksi arvo. Ainoastaan viimeksi annettu arvo otetaan huomioon.",
        "duplicate-args-category": "Sivut, jotka käyttävät kaksinkertaisia argumentteja mallinekutsuissa",
        "duplicate-args-category-desc": "Tämä sivu sisältää sellaisia mallinekutsuja, jotka käyttävät kaksi kertaa samaa argumenttia kuten <nowiki>{{foo|bar=1|bar=2}}</nowiki></code> taikka <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Tällä sivulla on liian monta hitaiden laajennusfunktioiden kutsua.\nKutsuja pitäisi olla alle $2 {{PLURAL:$2|kappale|kappaletta}}, mutta nyt niitä on $1 {{PLURAL:$1|kappale|kappaletta}}.",
        "badsig": "Allekirjoitus ei kelpaa.",
        "badsiglength": "Allekirjoitus on liian pitkä – sen on oltava alle $1 {{PLURAL:$1|merkki|merkkiä}}.",
        "yourgender": "Mikä seuraavista kuvaa sinua?",
-       "gender-unknown": "En halua määritellä",
+       "gender-unknown": "Kun ohjelmisto mainitsee sinut, sinusta pyritään käyttämään ilmaisuja, jotka eivät määritä sukupuoltasi",
        "gender-male": "Mies",
        "gender-female": "Nainen",
        "prefs-help-gender": "Tämän asetuksen määrittäminen on vapaaehtoista.\nOhjelmisto käyttää annettua arvoa viitaten sinuun oikealla kieliopillisella suvulla.\nTämä tieto on julkinen.",
        "uploaddisabledtext": "Tiedostojen tallennus on poistettu käytöstä.",
        "php-uploaddisabledtext": "PHP:n tiedostojen lähetys ei ole käytössä. Tarkista asetukset kohdasta file_uploads.",
        "uploadscripted": "Tämä tiedosto sisältää HTML-koodia tai skriptejä, jotka selain saattaa virheellisesti suorittaa.",
+       "upload-scripted-pi-callback": "Ei voida tallentaa tiedostoa, joka sisältää XML-tyylimääritteen käsittelyohjeen.",
+       "uploaded-script-svg": "Found scriptable element \"$1\" in the uploaded SVG file.",
+       "uploaded-hostile-svg": "Tallennetun SVG-tiedoston tyylielementissä löytyi turvaton CSS.",
+       "uploaded-event-handler-on-svg": "Setting event-handler attributes <code>$1=\"$2\"</code> is not allowed in SVG files.",
+       "uploaded-href-attribute-svg": "href attributes <code>&lt;$1 $2=\"$3\"&gt;</code> with non-local target (e.g. http://, javascript:, etc) are not allowed in SVG files.",
+       "uploaded-href-unsafe-target-svg": "Found href to unsafe target <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
+       "uploaded-animate-svg": "Found \"animate\" tag that might be changing href, using the \"from\" attribute <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
+       "uploaded-setting-event-handler-svg": "Setting event-handler attributes is blocked, found <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
+       "uploaded-setting-href-svg": "Using the \"set\" tag to add \"href\" attribute to parent element is blocked.",
+       "uploaded-wrong-setting-svg": "Using the \"set\" tag to add a remote/data/script target to any attribute is blocked. Found <code>&lt;set to=\"$1\"&gt;</code> in the uploaded SVG file.",
+       "uploaded-setting-handler-svg": "SVG that sets the \"handler\" attribute with remote/data/script is blocked. Found <code>$1=\"$2\"</code> in the uploaded SVG file.",
+       "uploaded-remote-url-svg": "SVG that sets any style attribute with remote URL is blocked. Found <code>$1=\"$2\"</code> in the uploaded SVG file.",
+       "uploaded-image-filter-svg": "Found image filter with URL: <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploadscriptednamespace": "Tämä SVG-tiedosto sisältää nimiavaruuden ”$1”, joka ei ole sallittu.",
        "uploadinvalidxml": "Ladatun tiedoston XML-koodia ei voitu jäsentää kunnolla.",
        "uploadvirus": "Tiedosto sisältää viruksen. Tarkemmat tiedot: $1",
        "randomincategory-nopages": "Luokassa [[:Category:$1|$1]] ei ole sivuja.",
        "randomincategory-category": "Luokka:",
        "randomincategory-legend": "Satunnainen sivu luokassa",
+       "randomincategory-submit": "Siirry",
        "randomredirect": "Satunnainen ohjaus",
        "randomredirect-nopages": "Nimiavaruudessa ”$1” ei ole ohjaussivuja.",
        "statistics": "Tilastot",
        "nmembers": "$1 {{PLURAL:$1|jäsen|jäsentä}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|jäsen|jäsentä}}",
        "nrevisions": "$1 {{PLURAL:$1|muutos|muutosta}}",
-       "nviews": "$1 {{PLURAL:$1|lataus|latausta}}",
        "nimagelinks": "Käytössä $1 {{PLURAL:$1|sivulla}}",
        "ntransclusions": "käytössä $1 {{PLURAL:$1|sivulla}}",
        "specialpage-empty": "Tämä sivu on tyhjä.",
        "rollback-success": "Käyttäjän $1 tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän $2 versioon.",
        "sessionfailure-title": "Istuntovirhe",
        "sessionfailure": "Istuntosi kanssa on ongelma. Muutosta ei toteutettu varotoimena istuntokaappauksien takia. Käytä selaimen paluutoimintoa ja päivitä sivu, jolta tulit, ja yritä uudelleen.",
+       "changecontentmodel": "Muuta sivun sisältömallia",
+       "changecontentmodel-legend": "Muuta sisältömallia",
+       "changecontentmodel-title-label": "Sivun otsikko",
+       "changecontentmodel-model-label": "Uusi sisältömalli",
+       "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-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-revertlink": "kumoa",
+       "logentry-contentmodel-change-revert": "kumottu",
        "protectlogpage": "Suojausloki",
        "protectlogtext": "Alla on loki muutoksista sivujen suojauksiin. Luettelo tällä hetkellä suojatuista sivuista löytyy [[Special:ProtectedPages|suojattujen sivujen luettelosta]].",
        "protectedarticle": "suojasi sivun [[$1]]",
        "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-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",
        "pageinfo-subpages-name": "Sivun alasivut",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|ohjaus|ohjausta}}; $3 {{PLURAL:$3|ei-ohjausta}})",
        "version-libraries": "Asennetut kirjastot",
        "version-libraries-library": "Kirjasto",
        "version-libraries-version": "Versio",
+       "version-libraries-license": "Lisenssi",
+       "version-libraries-description": "Kuvaus",
+       "version-libraries-authors": "Tekijät",
        "redirect": "Ohjaus tiedoston, käyttäjän, sivun tai version tunnisteen mukaan",
        "redirect-legend": "Ohjaus tiedostoon tai sivulle",
        "redirect-summary": "Tämä toimintosivu ohjaa tiedostoon (tiedostonimen mukaan), sivulle (version numeron tai sivun tunnisteen mukaan) tai käyttäjäsivulle (käyttäjän numeron mukaan). Käyttö: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] tai [[{{#Special:Redirect}}/user/101]].",
        "log-name-pagelang": "Kielenvaihtoloki",
        "log-description-pagelang": "Tämä on loki, johon merkitään muutokset sivujen kieliasetuksissa.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutti}} sivun kieltä sivulla $3 kielestä $4 kieleksi $5.",
-       "default-skin-not-found": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi, joka on määritelty koodissa <code dir=\"ltr\">$wgDefaultSkin</code> muotoon <code>$1</code>, ei ole saatavilla.\n\n\n<strong>Alla on ohjeita englanniksi:</strong>\n\nYour installation seems to include the following {{PLURAL:$4|skin|skins}}. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} currently installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>",
-       "default-skin-not-found-no-skins": "Hupsista! Oletusulkoasua sinun wikillesi ei ole saatavilla. Se on määritelty ulkoasuksi <code>$1</code> kohteessa <code>$wgDefaultSkin</code>.\n\nSinulla ei ole lainkaan asennettuja ulkoasuja. (You have no installed skins.)\n\nAlla on lisäohjeita englanniksi:\n\n\n; If you have just installed or upgraded MediaWiki: \n\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by: \n\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it. \n\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation. \n\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": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi, joka on määritelty koodissa <code dir=\"ltr\">$wgDefaultSkin</code> muotoon <code>$1</code>, ei ole saatavilla.\n\nAlla on ohjeet englannin kielellä:\n\nYour installation seems to include the following {{PLURAL:$4|skin|skins}}. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [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.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
+       "default-skin-not-found-no-skins": "Hupsista! Oletusulkoasua sinun wikillesi ei ole saatavilla. Se on määritelty ulkoasuksi <code>$1</code> kohteessa <code>$wgDefaultSkin</code>.\n\nAlla on ohjeet englannin kielellä:\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [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 (käytössä)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')",
        "mediastatistics": "Median tilastotiedot",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "ajatusviiva",
        "special-characters-title-emdash": "pitkä ajatusviiva",
-       "special-characters-title-minus": "miinusmerkki"
+       "special-characters-title-minus": "miinusmerkki",
+       "mw-widgets-titleinput-description-new-page": "sivua ei ole olemassa vielä",
+       "mw-widgets-titleinput-description-redirect": "ohjaus kohteeseen $1"
 }
index 49ae8ae..696ed8e 100644 (file)
                        "Housterdam",
                        "Chlomoh",
                        "Wladek92",
-                       "Framafan"
+                       "Framafan",
+                       "Lucky"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "invalidtitle-unknownnamespace": "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus",
        "exception-nologin": "Non connecté",
        "exception-nologin-text": "Veuillez vous connecter pour pouvoir accéder à cette page ou cette action.",
-       "exception-nologin-text-manual": "Veuillez $1 pour pouvoir accéder à cette page ou cette action.",
+       "exception-nologin-text-manual": "Veuillez vous $1 pour pouvoir accéder à cette page ou cette action.",
        "virus-badscanner": "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
        "virus-scanfailed": "Échec de la recherche (code $1)",
        "virus-unknownscanner": "antivirus inconnu :",
        "passwordreset": "Remise à zéro du mot de passe",
        "passwordreset-text-one": "Remplissez ce formulaire pour réinitialiser votre mot de passe.",
        "passwordreset-text-many": "{{PLURAL:$1|Remplissez un des champs pour recevoir un mot de passe temporaire par courriel.}}",
-       "passwordreset-legend": "Remise à zéro du mot de passe",
        "passwordreset-disabled": "La réinitialisation des mots de passe a été désactivée sur ce wiki.",
        "passwordreset-emaildisabled": "Les fonctionnalités e-mail ont été désactivées sur ce wiki.",
        "passwordreset-username": "Nom d'utilisateur :",
        "resettokens": "Réinitialiser les jetons",
        "resettokens-text": "Ici, vous pouvez réinitialiser les jetons qui permettent d’accéder à certaines données privées associées à votre compte.\n\nVous devriez le faire si vous les avez partagés accidentellement avec quelqu'un ou si votre compte a été compromis.",
        "resettokens-no-tokens": "Il n’y a aucun jeton à réinitialiser.",
-       "resettokens-legend": "Réinitialiser les jetons",
        "resettokens-tokens": "Jetons :",
        "resettokens-token-label": "$1 (valeur actuelle : $2)",
        "resettokens-watchlist-token": "Jeton pour le flux (Atom/RSS) web de [[Special:Watchlist|modifications de pages de votre liste de suivi]]",
        "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.",
        "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 être $1 pour avoir la permission de modifier le contenu.",
+       "whitelistedittext": "Vous devez vous $1 pour avoir la permission de modifier le contenu.",
        "confirmedittext": "Vous devez confirmer votre adresse de courriel avant de modifier les pages.\nVeuillez entrer et valider votre adresse de courriel dans vos [[Special:Preferences|préférences]].",
        "nosuchsectiontitle": "Impossible de trouver la section",
        "nosuchsectiontext": "Vous avez essayé de modifier une section qui n'existe pas.\nElle a peut-être été déplacée ou supprimée depuis que vous avez lu cette page.",
        "yourdiff": "Différences",
        "copyrightwarning": "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />\nVous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. '''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
        "copyrightwarning2": "Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br \n/>Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).\n'''N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !'''",
+       "editpage-cannot-use-custom-model": "Le modèle de contenu de cette page ne peut pas être modifié.",
        "longpageerror": "'''Erreur: Le texte que vous avez soumis fait {{PLURAL:$1|un Kio|$1 Kio}}, ce qui dépasse la limite fixée à {{PLURAL:$2|un Kio|$2 Kio}}.'''\nIl ne peut pas être sauvegardé.",
        "readonlywarning": "'''AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l’instant.'''\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 :",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objet vide",
        "content-json-empty-array": "Tableau vide",
+       "duplicate-args-warning": "<strong>Avertissement:</strong> [[:$1]] appelle [[:$2]] avec plus d'une valeur pour le paramètre \"$3\". Seule la dernière valeur fournie sera utilisée.",
        "duplicate-args-category": "Pages utilisant des arguments dupliqués dans les appels de modèle",
        "duplicate-args-category-desc": "La page contient des appels de modèle qui utilisent des arguments dupliqués, comme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l'analyseur syntaxique.\n\nIl devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu'il y en a maintenant $1.",
        "badsig": "Signature brute incorrecte.\nVérifiez les balises HTML.",
        "badsiglength": "Votre signature est trop longue.\nElle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.",
        "yourgender": "Comment préférez-vous être décrit ?",
-       "gender-unknown": "Je préfère ne pas l’indiquer",
+       "gender-unknown": "Lorsqu’il fera mention de vous, le logiciel utilisera des mots de genre neutre, quand c’est possible",
        "gender-male": "Il modifie des pages du wiki",
        "gender-female": "Elle modifie des pages du wiki",
        "prefs-help-gender": "Définir cette préférence est facultatif.\nCe logiciel utilise sa valeur pour s’adresser à vous et vous mentionner aux autres en utilisant le bon genre grammatical.\nCette information sera publique.",
        "reuploaddesc": "Annuler et retourner au formulaire d'import",
        "upload-tryagain": "Envoyer la description du fichier modifiée",
        "uploadnologin": "Non connecté",
-       "uploadnologintext": "Vous devez $1 pour importer des fichiers.",
+       "uploadnologintext": "Vous devez vous $1 pour importer des fichiers.",
        "upload_directory_missing": "Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.",
        "upload_directory_read_only": "Le répertoire d’import de fichier ($1) n’est pas accessible en écriture depuis le serveur web.",
        "uploaderror": "Erreur lors de l’import",
        "uploaddisabledtext": "L’import de fichiers est désactivé sur ce wiki.",
        "php-uploaddisabledtext": "L'import de fichiers a été désactivé dans PHP. Vérifiez l'option de configuration file_uploads.",
        "uploadscripted": "Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.",
+       "upload-scripted-pi-callback": "Impossible de charger un fichier qui contient des instructions de traitement de feuille de style XML.",
+       "uploaded-script-svg": "Élément scriptable « $1 » trouvé dans le fichier SVG téléchargé.",
+       "uploaded-hostile-svg": "CSS non sûr trouvé dans l’élément style d’un fichier SVG téléchargé.",
+       "uploaded-event-handler-on-svg": "Fixer des attributs de gestionnaire d’événement <code>$1=\"$2\"</code> n’est pas autorisé dans les fichiers SVG.",
+       "uploaded-href-attribute-svg": "Les attributs href <code>&lt;$1 $2=\"$3\"&gt;</code> avec une cible non locale (par ex. http://, javascript:, etc.) ne sont pas autorisés dans les fichiers SVG.",
+       "uploaded-href-unsafe-target-svg": "href vers une cible non sûre <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé dans le fichier SVG téléchargé.",
+       "uploaded-animate-svg": "Balise « animate » trouvée, qui pourrait modifier le href en utilisant l’attribut « from » <code>&lt;$1 $2=\"$3\"&gt;</code> dans le fichier SVG téléchargé.",
+       "uploaded-setting-event-handler-svg": "Positionner des attributs de gestionnaire d’événement est bloqué, <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé dans le fichier SVG téléchargé.",
+       "uploaded-setting-href-svg": "L’utilisation de la balise « set » pour ajouter un attribut « href » à l’élément parent est interdite.",
+       "uploaded-wrong-setting-svg": "L’utilisation de la balise « set » pour ajouter une cible distante/données/script à un attribut quelconque est interdite. <code>&lt;set to=\"$1\"&gt;</code> a été trouvé dans le fichier SVG téléchargé.",
+       "uploaded-setting-handler-svg": "Les SVG qui positionnent l’attribut « handler » avec distant/données/script sont interdits. <code>$1=\"$2\"</code> a été trouvé dans le fichier SVG téléchargé.",
+       "uploaded-remote-url-svg": "Les SVG qui positionnent un attribut de style avec une URL distante sont bloqués. <code>$1=\"$2\"</code> trouvé dans le fichier SVG téléchargé.",
+       "uploaded-image-filter-svg": "Filtre d’image avec URL trouvé : <code>&lt;$1 $2=\"$3\"&gt;</code> dans le fichier SVG téléchargé.",
        "uploadscriptednamespace": "Ce fichier SVG contient un espace de noms '$1' non autorisé.",
        "uploadinvalidxml": "Le XML dans le fichier importé n’a pas pu être analysé.",
        "uploadvirus": "Ce fichier contient un virus ! Pour plus de détails, consultez : $1",
        "randomincategory-nopages": "Il n’y a pas de page dans [[:Category:$1]].",
        "randomincategory-category": "Catégorie :",
        "randomincategory-legend": "Page aléatoire dans la catégorie",
+       "randomincategory-submit": "Lancer",
        "randomredirect": "Page de redirection au hasard",
        "randomredirect-nopages": "Il n'y a aucune page de redirection dans l'espace de noms « $1 ».",
        "statistics": "Statistiques",
        "nmembers": "$1 membre{{PLURAL:$1||s}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membre|membres}}",
        "nrevisions": "$1 version{{PLURAL:$1||s}}",
-       "nviews": "$1 consultation{{PLURAL:$1||s}}",
        "nimagelinks": "Utilisé sur $1 {{PLURAL:$1|page|pages}}",
        "ntransclusions": "Utilisé sur $1 {{PLURAL:$1|page|pages}}",
        "specialpage-empty": "Il n'y a aucun résultat à afficher.",
        "unusedimages": "Fichiers orphelins",
        "wantedcategories": "Catégories les plus demandées",
        "wantedpages": "Pages les plus demandées",
-       "wantedpages-summary": "Liste des pages inexistantes ayant le plus de lien vers elles, en excluant les pages n’ayant que des redirections pointant vers elles. Pour avoir une liste des pages inexistantes qui ont des redirections pointant vers elles, voyez [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Liste des pages inexistantes ayant le plus de lien vers elles, en excluant les pages n’ayant que des redirections pointant vers elles. Pour avoir une liste des pages inexistantes qui ont des redirections pointant vers elles, voyez [[{{#special:BrokenRedirects}}|la liste des redirections cassées]].",
        "wantedpages-badtitle": "Titre invalide dans les résultats : $1",
        "wantedfiles": "Fichiers les plus demandés",
        "wantedfiletext-cat": "Les fichiers suivants sont utilisés, mais n'existent pas localement. S'ils se trouvent sur un dépôt partagé, ils peuvent être listés ici, bien qu'ils soient, de fait, déjà disponibles. Tous ces faux positifs seront <del>barrés</del>. En outre, les pages qui intègrent des fichiers qui n'existent pas sont répertoriées dans [[:$1]].",
        "rollback-success": "Révocation des modifications effectuées par $1 ;\nrétablissement de la dernière version par $2.",
        "sessionfailure-title": "Erreur de session",
        "sessionfailure": "Votre session de connexion semble avoir des problèmes ;\ncette action a été annulée en prévention d'un piratage de session.\nVeuillez cliquer sur « Précédent », rechargez la page d'où vous venez, puis réessayez.",
+       "changecontentmodel": "Modifier le modèle de contenu d’une page",
+       "changecontentmodel-legend": "Modifier le modèle de contenu",
+       "changecontentmodel-title-label": "Titre de la page",
+       "changecontentmodel-model-label": "Nouveau modèle de contenu",
+       "changecontentmodel-reason-label": "Motif :",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|a modifié}} le modèle de contenu de la page $3 de « $4 » en « $5 »",
+       "logentry-contentmodel-change-revertlink": "rétablir",
+       "logentry-contentmodel-change-revert": "rétablir",
        "protectlogpage": "Journal des protections",
        "protectlogtext": "Voici une liste des modifications des protections de pages.\nConsultez la [[Special:ProtectedPages|liste des pages protégées]] pour la liste des protections actuellement opérationnelles.",
        "protectedarticle": "a protégé « [[$1]] »",
        "tooltip-pt-logout": "Se déconnecter",
        "tooltip-pt-createaccount": "Il vous est conseillé de créer un compte et de vous connecter ; cependant, ce n’est pas obligatoire",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
-       "tooltip-ca-edit": "Vous pouvez modifier cette page.\nVeuillez utiliser le bouton de prévisualisation avant d'enregistrer.",
+       "tooltip-ca-edit": "Modifier le wikicode",
        "tooltip-ca-addsection": "Commencer une nouvelle section",
        "tooltip-ca-viewsource": "Cette page est protégée.\nVous pouvez toutefois en visualiser la source.",
        "tooltip-ca-history": "Les versions passées de cette page (avec leurs contributeurs)",
        "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-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",
        "pageinfo-subpages-name": "Sous-pages de cette page",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirection|redirections}}; $3 {{PLURAL:$3|non-redirection|non-redirections}})",
        "version-libraries": "Bibliothèques installées",
        "version-libraries-library": "Bibliothèque",
        "version-libraries-version": "Version",
+       "version-libraries-license": "Licence",
+       "version-libraries-description": "Description",
+       "version-libraries-authors": "Auteurs",
        "redirect": "Redirigé par fichier, utilisateur, page ou ID de révision",
        "redirect-legend": "Rediriger vers une page ou un fichier",
        "redirect-summary": "Cette page spéciale redirige vers un fichier (nom de fichier fourni), une page (ID de révision ou de page fourni) ou une page d’utilisateur (identifiant numérique de l’utilisateur fourni). Utilisation : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ou [[{{#Special:Redirect}}/user/101]].",
        "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
        "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure {{PLURAL:$4|l’habillage suivant|les habillages suivants}}. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment {{PLURAL:$4|l’|les }}activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Téléchargeant des habillages avec Git].\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller {{PLURAL:$5|la ligne suivante|les lignes suivantes}} dans <code>LocalSettings.php</code> pour activer {{PLURAL:$5|l’habillage actuellement installé|tous les habillages actuellement installés}} :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
-       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
+       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Utiliser Git pour télécharger des habillages].\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
        "mediastatistics": "Statistiques sur les médias",
        "special-characters-group-telugu": "télougou",
        "special-characters-group-sinhala": "cingalais",
        "special-characters-group-gujarati": "gujarâtî",
-       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-devanagari": "vanagari",
        "special-characters-group-thai": "thaï",
        "special-characters-group-lao": "laotien",
        "special-characters-group-khmer": "khmer",
-       "special-characters-title-endash": "tiret anglais",
-       "special-characters-title-emdash": "tiret em",
-       "special-characters-title-minus": "signe moins"
+       "special-characters-title-endash": "tiret demi-cadratin",
+       "special-characters-title-emdash": "tiret cadratin",
+       "special-characters-title-minus": "signe moins",
+       "mw-widgets-titleinput-description-new-page": "la page n’existe pas encore",
+       "mw-widgets-titleinput-description-redirect": "redirection vers $1"
 }
index 31e7e3e..7eb4d8e 100644 (file)
        "passwordreset": "Paaswurd turagsaat",
        "passwordreset-text-one": "Fal detheer formulaar ütj, am din paaswurd turag tu saaten.",
        "passwordreset-text-many": "{{PLURAL:$1|Fal ian faan jodiat fialen ütj, am en tidjwiis paaswurd tuschüürd tu fun.}}",
-       "passwordreset-legend": "Paaswurd turagsaat",
        "passwordreset-disabled": "Dü könst din paaswurd uun detdiar wiki ei turagsaat.",
        "passwordreset-emaildisabled": "E-mail as üüb detheer Wiki ufknipset wurden.",
        "passwordreset-username": "Brükernööm:",
        "resettokens": "Tokens turagsaat",
        "resettokens-text": "Dü könst 'tokens' turagsaat, am priwoot dooten tu bewerkin, diar mä din brükerkonto ferbünjen san.",
        "resettokens-no-tokens": "Diar san nian tokens turagtusaaten.",
-       "resettokens-legend": "Tokens turagsaat",
        "resettokens-tokens": "Tokens:",
        "resettokens-token-label": "$1 (aktuel wäärs: $2)",
        "resettokens-watchlist-token": "Token för webfeed (Atom/RSS) mä [[Special:Watchlist|feranrangen faan sidjen, diar dü uun't uug behual wel]]",
        "nmembers": "{{PLURAL:$1|1 iindrach|$1 iindracher}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|lasmoot|lasmooten}}",
        "nrevisions": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
-       "nviews": "$1 {{PLURAL:$1|klik|kliks}}",
        "nimagelinks": "Brükt üüb $1 {{PLURAL:$1|sidj|sidjen}}",
        "ntransclusions": "brükt üüb $1 {{PLURAL:$1|sidj|sidjen}}",
        "specialpage-empty": "Diar san tu tidj nian iindracher.",
        "tooltip-pt-logout": "Ufmelde",
        "tooltip-pt-createaccount": "Wees so gud an racht en brükerkonto iin an melde di uun. Dü säärst det oober ei.",
        "tooltip-ca-talk": "Diskuschuun auer di artiikel",
-       "tooltip-ca-edit": "Sidj bewerke. Luke di det iarst ans uun, iar dü det seekerst.",
+       "tooltip-ca-edit": "Detdiar sidj bewerke.",
        "tooltip-ca-addsection": "Nei kirew began",
        "tooltip-ca-viewsource": "Detdiar sidj as seekert wurden.\nDü könst di kweltekst uunluke.",
        "tooltip-ca-history": "Ääler werjuunen faan detdiar sidj",
index c6b998a..7e1e4d4 100644 (file)
        "versionrequiredtext": "Necesítase a versión $1 de MediaWiki para utilizar esta páxina. Vexa [[Special:Version|a páxina da versión]].",
        "ok": "Aceptar",
        "retrievedfrom": "Traído desde \"$1\"",
-       "youhavenewmessages": "Ten $1 ($2).",
-       "youhavenewmessagesfromusers": "Ten $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Ten}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Ten}} $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).",
        "youhavenewmessagesmanyusers": "Ten $1 de moitos usuarios ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|unha mensaxe nova|999=mensaxes novas}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|última modificación|999=últimas modificacións}}",
        "passwordreset": "Restablecer o contrasinal",
        "passwordreset-text-one": "Encha este formulario para restablecer o seu contrasinal.",
        "passwordreset-text-many": "{{PLURAL:$1|Encha un dos campos para recibir por correo electrónico un contrasinal temporal.}}",
-       "passwordreset-legend": "Restablecer o contrasinal",
        "passwordreset-disabled": "O restablecemento de contrasinais está desactivado neste wiki.",
        "passwordreset-emaildisabled": "As funcións do correo electrónico están desactivadas neste wiki.",
        "passwordreset-username": "Nome de usuario:",
        "resettokens": "Restablecer os pases",
        "resettokens-text": "Aquí pode restablecer os pases que permiten acceder a certos datos privados asociados á súa conta.\n\nDebería facelo se os compartiu accidentalmente con alguén ou se a súa conta foi comprometida.",
        "resettokens-no-tokens": "Non hai ningún pase que restablecer.",
-       "resettokens-legend": "Restablecer os pases",
        "resettokens-tokens": "Pases:",
        "resettokens-token-label": "$1 (valor actual: $2)",
        "resettokens-watchlist-token": "Pase para a fonte de novas (Atom/RSS) web dos [[Special:Watchlist|cambios feitos nas páxinas da súa lista de vixilancia]]",
        "creating": "Creando \"$1\"",
        "editingsection": "Editando unha sección de \"$1\"",
        "editingcomment": "Editando unha nova sección de \"$1\"",
-       "editconflict": "Conflito de edición: \"$1\"",
+       "editconflict": "Conflito de edición: $1",
        "explainconflict": "Alguén cambiou esta páxina desde que comezou a editala.\nA área de texto superior contén o texto da páxina tal e como existe na actualidade.\nOs seus cambios móstranse na área inferior.\nPode mesturar os seus cambios co texto existente.\n'''Só''' se gardará o texto na área superior cando prema en \"{{int:savearticle}}\".",
        "yourtext": "O seu texto",
        "storedversion": "Versión gardada",
        "yourdiff": "Diferenzas",
        "copyrightwarning": "Por favor, teña en conta que todas as contribucións a {{SITENAME}} considéranse publicadas baixo a $2 (vexa $1 para máis detalles). Se non quere que o que escriba se edite sen piedade e se redistribúa sen límites, entón non o envíe aquí.<br />\nAo mesmo tempo, prométanos que o que escribiu é da súa autoría ou que está copiado dun recurso do dominio público ou que permite unha liberdade semellante.\n'''NON ENVÍE MATERIAL CON DEREITOS DE AUTOR SEN PERMISO!'''",
        "copyrightwarning2": "Por favor, decátese de que todas as súas contribucións a {{SITENAME}} poden ser editadas, alteradas ou eliminadas por outras persoas. Se non quere que os seus escritos sexan editados sen piedade, non os publique aquí.<br />\nDo mesmo xeito, comprométese a que o que vostede escriba sexa da súa autoría ou copiado dunha fonte de dominio público ou recurso público semellante (vexa $1 para detalles).\n'''NON ENVÍE SEN PERMISO TRABALLOS CON DEREITOS DE COPIA!'''",
+       "editpage-cannot-use-custom-model": "O modelo de contido desta páxina non se pode modificar.",
        "longpageerror": "'''Erro: O texto que pretende gardar ocupa {{PLURAL:$1|$1 kilobyte|$1 kilobytes}}, e existe un límite dun máximo de {{PLURAL:$2|$2 kilobyte|$2 kilobytes}}.'''\nPolo tanto, non se pode gardar.",
        "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:",
        "searchall": "todo",
        "showingresults": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong>.",
        "showingresultsinrange": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.",
-       "search-showingresults": "{{PLURAL:$5|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados do <strong>$1</strong> ao <strong>$2</strong>, dun total de <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados do <strong>$1</strong> ao <strong>$2</strong>, dun total de <strong>$3</strong>}}",
        "search-nonefound": "Non se atopou ningún resultado que coincidise coa procura.",
        "powersearch-legend": "Busca avanzada",
        "powersearch-ns": "Procurar nos espazos de nomes:",
        "badsig": "Sinatura non válida; comprobe o código HTML utilizado.",
        "badsiglength": "A súa sinatura é demasiado longa.\nHa de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.",
        "yourgender": "Cal das seguintes oracións referidas a vostede é a máis axeitada?",
-       "gender-unknown": "Prefiro non indicalo",
+       "gender-unknown": "Ao mencionarlle, o software empregará verbas de xénero neutral sempre que sexa posible",
        "gender-male": "El edita as páxinas do wiki",
        "gender-female": "Ela edita as páxinas do wiki",
        "prefs-help-gender": "Definir esta preferencia é opcional.\nO software usa este valor para dirixirse á súa persoa e para facerlle mencións mediante o xénero gramatical axeitado.\nEsta información será pública.",
        "prefs-tokenwatchlist": "Pase",
        "prefs-diffs": "Diferenzas",
        "prefs-help-prefershttps": "Esta preferencia ha aplicarse no seu vindeiro acceso ao sistema.",
-       "prefswarning-warning": "Fixo cambios nas súas preferencias que aínda non se gardaron.\nSe deixa esta páxina sen premer en \"Gardar\", non se actualizarán as súas preferencias.",
+       "prefswarning-warning": "Fixo cambios nas súas preferencias que aínda non se gardaron.\nSe deixa esta páxina sen premer en \"$1\", non se actualizarán as súas preferencias.",
        "prefs-tabs-navigation-hint": "Consello: Pode empregar as frechas esquerda e dereita para navegar polas lapelas da lista.",
        "email-address-validity-valid": "O enderezo de correo electrónico semella válido",
        "email-address-validity-invalid": "Escriba un enderezo de correo electrónico válido",
        "recentchangeslinked-page": "Nome da páxina:",
        "recentchangeslinked-to": "Mostrar os cambios relacionados das páxinas que ligan coa dada",
        "upload": "Subir un ficheiro",
-       "uploadbtn": "Subir o ficheiro",
+       "uploadbtn": "Subir un ficheiro",
        "reuploaddesc": "Cancelar a carga e volver ao formulario de carga",
        "upload-tryagain": "Enviar a descrición do ficheiro modificada",
        "uploadnologin": "Non accedeu ao sistema",
        "uploaddisabledtext": "A carga de ficheiros está desactivada.",
        "php-uploaddisabledtext": "As cargas de ficheiros PHP están desactivadas. Por favor, comprobe a característica file_uploads.",
        "uploadscripted": "Este ficheiro contén código HTML ou script que pode producir erros ao ser interpretado polo navegador.",
-       "upload-scripted-pi-callback": "Non se pode subir un ficheiro que contén instruccións de proceso xml-stylesheet.",
+       "upload-scripted-pi-callback": "Non se pode subir un ficheiro que conteña instruccións de proceso de folla de estilo XML.",
        "uploaded-script-svg": "Atopado elemento de comandos \"$1\" no ficheiro SVG subido.",
        "uploaded-hostile-svg": "Atopado CSS non seguro no elemento de estilo do ficheiro SVG subido.",
        "uploaded-event-handler-on-svg": "Fixar atributos de xestión de eventos <code>$1=\"$2\"</code> no está permitido en ficheiros SVG.",
-       "uploaded-href-attribute-svg": "Atributos Href <code>&lt;$1 $2=\"$3\"&gt;</code> con obxectivos non locais (p. ex. http://, javascript:, etc) non están permitidos en ficheiros SVG.",
+       "uploaded-href-attribute-svg": "Atributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con obxectivos non locais (p. ex. http://, javascript:, etc) non están permitidos en ficheiros SVG.",
        "uploaded-href-unsafe-target-svg": "Atopado href a obxectivo non seguro <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploaded-animate-svg": "Atopada etiqueta \"animate\" que podería estar cambiando a href, usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploaded-setting-event-handler-svg": "Fichar os atributos de xestión de eventos non está permitido, atopado <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "randomincategory-nopages": "Non hai páxinas na [[:Category:$1]].",
        "randomincategory-category": "Categoría:",
        "randomincategory-legend": "Páxina aleatoria na categoría",
+       "randomincategory-submit": "Continuar",
        "randomredirect": "Redirección aleatoria",
        "randomredirect-nopages": "Non hai redireccións no espazo de nomes \"$1\".",
        "statistics": "Estatísticas",
        "nmembers": "$1 {{PLURAL:$1|páxina|páxinas}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
        "nrevisions": "$1 {{PLURAL:$1|revisión|revisións}}",
-       "nviews": "vista {{PLURAL:$1|unha vez|$1 veces}}",
        "nimagelinks": "Empregada {{PLURAL:$1|nunha páxina|en $1 páxinas}}",
        "ntransclusions": "empregado en $1 {{PLURAL:$1|páxina|páxinas}}",
        "specialpage-empty": "Non hai resultados para o que solicitou.",
        "rollback-success": "Desfixéronse as edicións de $1;\nvolveuse á última edición, feita por $2.",
        "sessionfailure-title": "Erro de sesión",
        "sessionfailure": "Parece que hai un problema co rexistro da súa sesión;\nesta acción cancelouse como precaución fronte ao secuestro de sesións.\nPrema no botón \"atrás\", volva cargar a páxina da que proviña e inténteo de novo.",
+       "changecontentmodel": "Cambiar o modelo do contido dunha páxina",
+       "changecontentmodel-legend": "Cambiar o modelo do contido",
+       "changecontentmodel-title-label": "Título da páxina",
+       "changecontentmodel-model-label": "Novo modelo de contido",
+       "changecontentmodel-reason-label": "Motivo:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiou}} o modelo de contido da páxina $3 de \"$4\" a \"$5\"",
+       "logentry-contentmodel-change-revertlink": "reverter",
+       "logentry-contentmodel-change-revert": "reverter",
        "protectlogpage": "Rexistro de proteccións",
        "protectlogtext": "A continuación móstrase a lista cos cambios de protección nas páxinas.\nVexa a [[Special:ProtectedPages|lista de páxinas protexidas]] se quere obter a lista coas proteccións de páxinas vixentes.",
        "protectedarticle": "protexeu \"[[$1]]\"",
        "tooltip-pt-logout": "Saír ao anonimato",
        "tooltip-pt-createaccount": "Recoméndaselle crear unha conta e acceder ao sistema, se ben non é obrigatorio",
        "tooltip-ca-talk": "Conversa acerca do contido desta páxina",
-       "tooltip-ca-edit": "Pode modificar esta páxina; antes de gardala, por favor, utilice o botón de vista previa",
+       "tooltip-ca-edit": "Edite esta páxina",
        "tooltip-ca-addsection": "Comezar unha nova sección",
        "tooltip-ca-viewsource": "Esta páxina está protexida.\nPode ver o código fonte.",
        "tooltip-ca-history": "Versións anteriores desta páxina",
        "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-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",
        "pageinfo-subpages-name": "Subpáxinas desta páxina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirección|redireccións}}; $3 {{PLURAL:$3|non-redirección|non-redireccións}})",
        "version-libraries": "Bibliotecas instaladas",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versión",
+       "version-libraries-license": "Licenza",
+       "version-libraries-description": "Descrición",
+       "version-libraries-authors": "Autores",
        "redirect": "Redirixir por nome de ficheiro, ID de usuario, ID de páxina ou ID de revisión",
        "redirect-legend": "Redirixir a un ficheiro ou unha páxina",
        "redirect-summary": "Esta páxina especial redirixe cara a un ficheiro (dado o nome), unha páxina (dado o ID da páxina ou o dunha revisión) ou unha páxina de usuario (dado o ID dun usuario). Utilización: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]].",
        "feedback-bugornote": "Se está listo para describir un problema técnico en detalle, [$1 informe do erro].\nEn caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario aparecerá na páxina \"[$3 $2]\" xunto ao seu nome de usuario e o navegador que está usando.",
        "feedback-cancel": "Cancelar",
        "feedback-close": "Feito",
-       "feedback-external-bug-report-button": "Gardar unha tarefa técnica",
+       "feedback-external-bug-report-button": "Enviar unha tarefa técnica",
        "feedback-dialog-title": "Enviar comentarios",
        "feedback-dialog-intro": "Pode usar o formulario simple de abaixo para enviar os seus comentarios sobre o editor visual. O seu comentario será engadido á páxina \"$1\", xunto co seu nome de usuario.",
        "feedback-error-title": "Erro",
        "special-characters-group-khmer": "Camboxano",
        "special-characters-title-endash": "guión",
        "special-characters-title-emdash": "raia",
-       "special-characters-title-minus": "signo menos"
+       "special-characters-title-minus": "signo menos",
+       "mw-widgets-titleinput-description-new-page": "a páxina aínda non existe",
+       "mw-widgets-titleinput-description-redirect": "redirección cara a $1"
 }
index 478b55e..a710ada 100644 (file)
@@ -9,11 +9,13 @@
                        "Sanket.prabhu26",
                        "Santhosh.thottingal",
                        "Supriya kankumbikar",
-                       "Vaishali Parab"
+                       "Vaishali Parab",
+                       "The Discoverer",
+                       "Cliffa fernandes"
                ]
        },
        "tog-hideminor": "हालींच बदल केल्ल्यांतले बारीक संपादन लिपय",
-       "tog-numberheadings": "शà¥\80रà¥\8dषà¤\95 स्वंय क्रमांकित कर",
+       "tog-numberheadings": "माथाळà¥\87 स्वंय क्रमांकित कर",
        "tog-showtoolbar": "संपादन उपकरणाची पट्टी दाखय",
        "tog-editondblclick": "दोट्टी क्लिकाचेर पानां संपादीत कर",
        "tog-watchdefault": "हांवें संपादीत केल्लीं पानां आनी फायल म्हजे ध्यानसूचीक जोड",
@@ -23,7 +25,7 @@
        "tog-oldsig": "सद्याची निशाणी",
        "tog-uselivepreview": "लायव पुर्वनियाळाचो उपेग कर",
        "tog-watchlisthideown": "ध्यानसुचीतलें म्हजे संपादन लिपय",
-       "tog-watchlisthidebots": "ध्यानसुचीतले बोट संपादन लिपय",
+       "tog-watchlisthidebots": "धà¥\8dयानसà¥\81à¤\9aà¥\80तलà¥\87 à¤°à¥\8bबà¥\8bà¤\9f à¤¸à¤\82पादन à¤²à¤¿à¤ªà¤¯",
        "tog-watchlisthideminor": "ध्यानसुचीतले ल्हान संपादन लिपय",
        "tog-showhiddencats": "लिपोवन दवरिल्ले विभाग दाखय",
        "underline-always": "सदा (केधन्नय) (केन्नय)",
        "october-date": "ऑक्टोबर $1",
        "november-date": "नोव्हेंबर $1",
        "december-date": "डिसेंबर $1",
-       "pagecategories": "{{PLURAL:$1|à¤\97à¤\9f}}",
-       "category_header": "\"$1\" à¤¹à¥\8dया à¤¶à¥\8dरà¥\87णà¥\80à¤\82तलीं पानां",
-       "subcategories": "à¤\89पशà¥\8dरà¥\87णà¥\80",
-       "category-media-header": "\"$1\" à¤¶à¥\8dरà¥\87णà¥\80à¤\82तलें प्रसार माध्यम",
-       "hidden-categories": "{{PLURAL:$1|लिपिलà¥\8dलà¥\87à¤\82 à¤\97à¤\9f|लिपिलà¥\8dलà¥\87à¤\82 à¤\97à¤\9f }}",
+       "pagecategories": "{{PLURAL:$1|वरà¥\8dà¤\97}}",
+       "category_header": "\"$1\" à¤¹à¥\8dया à¤µà¤°à¥\8dà¤\97ातलीं पानां",
+       "subcategories": "à¤\89पवरà¥\8dà¤\97",
+       "category-media-header": "\"$1\" à¤µà¤°à¥\8dà¤\97ातलें प्रसार माध्यम",
+       "hidden-categories": "{{PLURAL:$1|लिपिलà¥\8dलà¥\87à¤\82 à¤µà¤°à¥\8dà¤\97|लिपिलà¥\8dलà¥\87à¤\82 à¤µà¤°à¥\8dà¤\97 }}",
        "hidden-category-category": "लिपयिल्ले विभाग",
-       "category-subcat-count": "{{PLURAL:$2|हà¥\8dया à¤µà¤¿à¤­à¤¾à¤\97ान à¤«à¤\95त à¤¸à¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\87 à¤\89पविभाà¤\97 à¤\86सात.|हà¥\8dया à¤µà¤¿à¤­à¤¾à¤\97ातलà¥\8dया $2 à¤µà¤\9fà¥\8dà¤\9f {{PLURAL:$1|सà¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\87 à¤\89पविभाà¤\97 à¤\86सात.|$1सà¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\87 à¤\89पविभाग आसात.}}}}",
-       "category-article-count": "{{PLURAL:$2|हà¥\8dया à¤µà¤¿à¤­à¤¾à¤\97ाà¤\82त à¤¸à¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\80à¤\82 à¤ªà¤¾à¤¨à¤¾à¤\82 à¤\86सात.|हà¥\8dया à¤µà¤¿à¤­à¤¾गांत सकलय दिल्लीं {{PLURAL:$1|पानां आसात|$1 पानां आसात}}, वट्ट पानां $2}}",
-       "category-file-count": "{{PLURAL:$2|हà¥\8dया à¤µà¤¿à¤­à¤¾à¤\97ाà¤\82त à¤«à¤\95त à¤¸à¤\95यलà¥\80 à¤«à¤¾à¤¯à¤² à¤\86सपावता.|हà¥\8dया à¤µà¤¿à¤­à¤¾गांत सकयल दिल्लीं {{PLURAL:$1|फायल|$1 फायलीं}} आसता, वट्ट फायलीं $2}}",
+       "category-subcat-count": "{{PLURAL:$2|हà¥\8dया à¤µà¤°à¥\8dà¤\97ान à¤«à¤\95त à¤¸à¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\87 à¤\89पविभाà¤\97 à¤\86सात.|हà¥\8dया à¤µà¤°à¥\8dà¤\97ातलà¥\8dया $2 à¤µà¤\9fà¥\8dà¤\9f {{PLURAL:$1|सà¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\87 à¤\89पवरà¥\8dà¤\97 à¤\86सात.|$1सà¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\87 à¤\89पवरà¥\8dग आसात.}}}}",
+       "category-article-count": "{{PLURAL:$2|हà¥\8dया à¤µà¤°à¥\8dà¤\97ाà¤\82त à¤¸à¤\95यल à¤¦à¤¿à¤²à¥\8dलà¥\80à¤\82 à¤ªà¤¾à¤¨à¤¾à¤\82 à¤\86सात.|हà¥\8dया à¤µà¤°à¥\8dगांत सकलय दिल्लीं {{PLURAL:$1|पानां आसात|$1 पानां आसात}}, वट्ट पानां $2}}",
+       "category-file-count": "{{PLURAL:$2|हà¥\8dया à¤µà¤°à¥\8dà¤\97ाà¤\82त à¤«à¤\95त à¤¸à¤\95यलà¥\80 à¤«à¤¾à¤¯à¤² à¤\86सपावता.|हà¥\8dया à¤µà¤°à¥\8dगांत सकयल दिल्लीं {{PLURAL:$1|फायल|$1 फायलीं}} आसता, वट्ट फायलीं $2}}",
        "listingcontinuesabbrev": "चालू.",
        "noindex-category": "बिननिर्देशांकी पानां",
        "about": "विशीं",
        "article": "मजकूराचीं पानां",
-       "newwindow": "(नवà¥\8dया à¤µà¤¿à¤\82डà¥\8bंत उकतें जाता)",
+       "newwindow": "(नवà¥\8dया à¤\9c़à¥\8bणà¥\87लांत उकतें जाता)",
        "cancel": "रद्द करात",
        "moredotdotdot": "आनीक",
        "morenotlisted": "ही सूची पूर्ण ना",
        "mypage": "पान",
-       "mytalk": "à¤\89लà¥\8bवप",
-       "navigation": "भà¥\8bà¤\82वडà¥\80",
+       "mytalk": "à¤\9aरà¥\8dà¤\9aा",
+       "navigation": "दिशा-नियà¤\82तà¥\8dरण",
        "and": "&#32;आनीक",
        "qbfind": "सोदात",
        "qbbrowse": "ब्राउज",
        "qbpageoptions": "हें पान",
        "qbmyoptions": "म्हजी पानां",
        "faq": "परत परत विचारिल्ले प्रस्न",
-       "faqpage": "सदांच विचारील्ले प्रस्न",
+       "faqpage": "Project:सदांच विचारील्ले प्रस्न",
        "actions": "क्रिया",
-       "namespaces": "नाà¤\82वाà¤\82à¤\9aà¥\80 à¤¸à¥\81वात",
+       "namespaces": "नाà¤\82वथलाà¤\82",
        "variants": "वेगवेगळें",
-       "navigation-heading": "भà¥\8bà¤\82वडी",
+       "navigation-heading": "दिशा-नियà¤\82तà¥\8dरण à¤¸à¥\82à¤\9aी",
        "errorpagetitle": "चूक",
        "returnto": "$1 चेर परत येयात.",
        "tagline": "{{SITENAME}} कडल्यान",
        "printableversion": "छापपायोग्य आवृत्ती",
        "permalink": "सदांकाळ जोडणी",
        "print": "छाप",
-       "view": "पळय, दृश्य",
+       "view": "पळय",
        "view-foreign": " $1 चेर पळयात",
        "edit": "संपादन",
        "edit-local": "थळाव्या संपादनाचें वर्णन",
        "personaltools": "खाजगी साधनां",
        "articlepage": "मजकूर पान पळयात",
        "talk": "भासाभास",
-       "views": "मतां",
+       "views": "दà¥\83शà¥\8dयां",
        "toolbox": "साधनां",
        "userpage": "वापरप्याचें पान दाखय",
        "projectpage": "प्रकल्पाचें पान पळेयात",
        "lastmodifiedat": " ह्या पानांत निमाणो बदल,$1 वेर $2 वेळार केल्लो",
        "protectedpage": "राखून दवरिल्लें पान",
        "jumpto": "हुपून वचात:",
-       "jumptonavigation": "भà¥\8bà¤\82वडà¥\80",
+       "jumptonavigation": "दिशा-नियà¤\82तà¥\8dरण",
        "jumptosearch": "सोद",
        "pool-queuefull": "पूल वळ भरिल्ली आसा",
        "pool-errorunknown": "खबर नाशिल्ली चूक",
        "poolcounter-usage-error": "उपयोगी त्रुटि: $1",
        "aboutsite": "{{SITENAME}}विशीं",
        "aboutpage": "Project:विशीं",
-       "copyrightpage": "{{ns:project}}:à¤\95à¥\89पà¥\80राà¤\87à¤\9f",
+       "copyrightpage": "{{ns:project}}:पà¥\8dरात-हà¤\95",
        "currentevents": "सद्याच्यो घडणुकों",
        "currentevents-url": "Project:सद्याच्यो घडणुको",
        "disclaimers": "न्हयकारणी",
        "helppage-top-gethelp": "मजत कर",
        "mainpage": "मुखेल पान",
        "mainpage-description": "मुखेल पान",
-       "portal": "समाà¤\9cाà¤\9aà¥\87 à¤®à¥\81à¤\96à¥\87लपान",
-       "portal-url": "Project:समाà¤\9cाà¤\9aà¥\87 à¤®à¥\81à¤\96à¥\87ल à¤ªà¤¾à¤¨",
+       "portal": "समà¥\81दाà¤\88à¤\95 à¤ªà¥\8dरवà¥\87स-दà¥\8dवार",
+       "portal-url": "Project:समà¥\81दाà¤\88à¤\95 à¤ªà¥\8dरवà¥\87स-दà¥\8dवार",
        "privacy": "गुप्ततायेचें धोरण",
        "privacypage": "Project:गुप्ततायेचें धोरण",
        "ok": "बरें",
        "editsection": "संस्करण",
        "editold": "संस्करण",
        "viewsourceold": "उगम पळेयात",
-       "editlink": "सà¤\82सà¥\8dà¤\95रण",
+       "editlink": "बदल",
        "viewsourcelink": "उगम पळयात",
-       "editsectionhint": "सà¤\82सà¥\8dà¤\95रण à¤µà¤¿à¤­à¤¾à¤\97: $1",
-       "toc": "मà¤\9cà¤\95à¥\82र",
+       "editsectionhint": "विभाà¤\97 à¤¸à¤\82सà¥\8dà¤\95रण: $1",
+       "toc": "विशय à¤¸à¥\81à¤\9aà¥\80",
        "showtoc": "दाखयात",
        "hidetoc": "लिपयात",
        "collapsible-collapse": "ल्हान कर",
        "site-rss-feed": "$1 चीं आर.एस.एस फीड",
        "site-atom-feed": "$1 एटम फिड",
        "page-rss-feed": "\"$1\" आर॰एस॰एस फीड",
-       "page-atom-feed": "$1 à¤\8fà¤\9fम à¤«à¤¿à¤¡",
+       "page-atom-feed": "$1 à¤\8fà¤\9fम à¤ªà¥\82रà¥\8dवण",
        "red-link-title": "$1 (पान अस्तित्वांत ना)",
        "sort-descending": "देवत्या क्रमाचेर क्रमबध्द कर",
        "sort-ascending": "चडत्या क्रमाचेर क्रमबध्द कर",
        "nstab-mediawiki": "संदेश",
        "nstab-template": "प्रारूप",
        "nstab-help": "सहायक पान",
-       "nstab-category": "शà¥\8dरà¥\87णà¥\80",
+       "nstab-category": "वरà¥\8dà¤\97",
        "nosuchaction": "असले तरेचे कार्य ना",
        "nosuchspecialpage": "असले कांयच खाशेलें पान ना",
        "error": "चूक",
        "databaseerror-error": "चूक: $1",
        "missing-article": "डेटाबेजाक \"$1\" $2 ह्या नांवाचें जे मजकूराचें पान मेळूंक जाय आसलें तें मेळ्ळेंना. हें चड करून जेन्ना काडून उडयिल्ल्या पानाक मुजत सोंपिळ्ळे डिफ वा इतिहासाची जोडणी दिवप जाता तेन्ना घडटा..जर अशें नासत तर तुमकां सॉफ्टवेरांत चूक सांपडूंक जाय हें अँडमिनिस्ट्रेटराक URLची नोंद करून कळयात.",
        "missingarticle-rev": "पुनर्नियाळ $1",
-       "badtitle": "वायà¤\9f माथाळो",
+       "badtitle": "à¤\9aà¥\81à¤\95à¥\80à¤\9aà¥\8b माथाळो",
        "badtitletext": "विनवणी केल्लें पानाचो माथाळो अवैध, रितो वा अयोग्य तरेन आंतरभाशी वा आंतर विकी माथाळ्या कडे जोडणी केल्लो आशिल्लो. तातूंत माथाळ्यांत वापरुं नजो अशी एक वा चड अक्षरां आसूं येतात.",
        "viewsource": "उगम पळेयात",
        "yourname": "वापरप्याचे नांव",
        "userlogin-yourname-ph": "वापरप्याचे नांव घालात",
        "createacct-another-username-ph": "वापरप्याचे नांव घालात",
        "yourpassword": "खास उतर",
-       "userlogin-yourpassword": "à¤\96ास उतर",
-       "userlogin-yourpassword-ph": "à¤\96ाशà¥\87लà¥\87 उतर घालात",
-       "createacct-yourpassword-ph": "à¤\96ाशà¥\87लà¥\87 उतर घालात",
+       "userlogin-yourpassword": "à¤\97à¥\81पितउतर",
+       "userlogin-yourpassword-ph": "à¤\97à¥\81पितउतर घालात",
+       "createacct-yourpassword-ph": "à¤\97à¥\81पितउतर घालात",
        "yourpasswordagain": "गुपीत उतर परतें टायप करात",
-       "createacct-yourpasswordagain": "गुपीत उतराची खात्री कर",
-       "createacct-yourpasswordagain-ph": "à¤\96ाशà¥\87लà¥\87 उतर परत घालात",
+       "createacct-yourpasswordagain": "गुपीतउतराची खात्री कर",
+       "createacct-yourpasswordagain-ph": "à¤\97à¥\81पितउतर परत घालात",
        "remembermypassword": "ह्या ब्राउजराचेर म्हजें लॉग इन याद दवरात (चडांतचड $1 {{PLURAL:$1|दिस|दिसां}} खातीर)",
-       "userlogin-remembermypassword": "मà¥\8dहाà¤\95ा à¤²à¥\89à¤\97 à¤\87न दवर",
+       "userlogin-remembermypassword": "मà¥\8dहà¤\9cà¥\87à¤\82 à¤¸à¤¤à¥\8dर à¤\9aालà¥\82 दवर",
        "userlogin-signwithsecure": "सुरक्षित कनेक्शन वापर",
        "yourdomainname": "तुमचो डोमेन:",
        "password-change-forbidden": "ह्या विकीचेर गुपीत उतरां बदलूंक शकनात",
        "userlogout": "सत्र शेवट",
        "notloggedin": "लॉग इन ना",
        "userlogin-noaccount": "तुमचें खातें ना?",
-       "userlogin-joinproject": "जोड{{SITENAME}}",
+       "userlogin-joinproject": "{{SITENAME}} हाचो वांगडी ज़ा",
        "nologin": "तुमचें खातें ना? $1.",
        "nologinlink": "खातें तयार करात",
-       "createaccount": "à¤\96ातà¥\87à¤\82 à¤¤à¤¯à¤¾à¤° à¤\95रात",
+       "createaccount": "à¤\96ातà¥\87à¤\82 à¤°à¥\8bà¤\9a",
        "gotaccount": " आदीं सावन तुजें खातें आसा?$1.",
        "gotaccountlink": "लॉग इन",
        "userlogin-resetlink": "तुजो लॉग इन तपशील विसरलें?",
-       "userlogin-resetpassword-link": "à¤\96ास उतर विसरला?",
-       "userlogin-helplink2": "लà¥\89न à¤\87न करपाक आदार कर",
+       "userlogin-resetpassword-link": "à¤\97à¥\81पितउतर विसरला?",
+       "userlogin-helplink2": "सतà¥\8dरारà¤\82भ करपाक आदार कर",
        "userlogin-createanother": "दुसरें खातें तयार कर",
        "createacct-emailrequired": "ईमेल नामो",
-       "createacct-emailoptional": "à¤\88मà¥\87ल à¤¨à¤¾à¤®à¥\8b",
+       "createacct-emailoptional": "à¤\88मà¥\87ल à¤ªà¤¤à¥\8dतà¥\8b (सà¥\8bà¤\95तà¥\80 à¤¨à¤¾)",
        "createacct-email-ph": "तुमचो इमेल पत्तो घालात",
        "createacct-another-email-ph": "तुमचो इमेल पत्तो घालात",
        "createacct-realname": "खरें नांव (पर्यायी)",
        "createacct-reason-ph": "तूं दुसरें खातें कित्याक उगडटात",
        "createacct-captcha": "सुरक्षा तपासणी",
        "createacct-imgcaptcha-ph": "वयर दिसता तो मजकूर बरय",
-       "createacct-submit": "तà¥\81मà¤\9aà¥\87 à¤\96ातà¥\87à¤\82 à¤¤à¤¯à¤¾à¤° à¤\95रात",
+       "createacct-submit": "तà¥\81मà¤\9aà¥\87 à¤\96ातà¥\87à¤\82 à¤°à¥\8bà¤\9aात",
        "createacct-another-submit": "दुसरें खातें तयार कर",
-       "createacct-benefit-heading": "{{SITENAME}}तुमच्या सारख्या लोकांनी केल्लो",
-       "createacct-benefit-body1": "{{बहुवचन:$1|संपादन|संपादना}}",
+       "createacct-benefit-heading": "{{SITENAME}} तुमच्या सारख्या लोकांनी केल्लो",
+       "createacct-benefit-body1": "{{PLURAL:$1|संपादन|संपादना}}",
        "createacct-benefit-body2": "{{PLURAL:$1|पान|पानां}}",
-       "createacct-benefit-body3": "सद्याचे{{बहुवचन:$1|योगदान करपी|ते योगदान करपी}}",
+       "createacct-benefit-body3": "सद्याचे{{PLURAL:$1|योगदान करपी|ते योगदान करपी}}",
        "badretype": "तुवें घातिल्लीं गुपीत उतरां जुळनात",
        "userexists": "घातिल्लें वापरप्याचें नांव पयलींच वापरांत आसा.\nउपकार करून दुसरें नांव वेंच",
        "loginerror": "लॉन इन त्रुटी",
        "loginlanguagelabel": "भास:$1",
        "pt-login": "सत्रारंभ करात",
        "pt-login-button": "सत्रारंभ करात",
-       "pt-createaccount": "à¤\96ातà¥\87à¤\82 à¤¤à¤¯à¤¾à¤° à¤\95रात",
+       "pt-createaccount": "à¤\96ातà¥\87à¤\82 à¤°à¥\8bà¤\9aात",
        "pt-userlogout": "सत्र शेवट",
        "changepassword": "गुपीत उतर",
        "resetpass_header": "खात्याचें गुपीत उतर बदल",
        "resetpass-submit-cancel": "रद्द करात",
        "resetpass-temp-password": "तात्पुरतें गुपीत उतर",
        "resetpass-expired": "तुजें गुपीत उतर पिड्ड्यार जालां. उपकार करून लॉग इन जावपाक नवें गुपीत उतर तयार कर.",
-       "passwordreset": "à¤\96ास उतर बदलात",
+       "passwordreset": "à¤\97à¥\81पितउतर बदलात",
        "passwordreset-text-one": "तात्पुरतें गुपीत उतर ईमेला वरवीं मेळपा खातीर हें फॉर्म पुराय कर.",
-       "passwordreset-legend": "गुपीत उतर परतून तयार कर",
        "passwordreset-username": "वापरप्याचे नांव",
        "passwordreset-domain": "डोमेन:",
        "passwordreset-email": "ईमेल नामो:",
        "changeemail-submit": "ई-मेल बदलात",
        "resettokens": "टोकन रीसेट करात",
        "resettokens-no-tokens": "रीसेट करपा खातीर कसलेंच टोकन ना",
-       "resettokens-legend": "टोकन रीसेट करात",
        "resettokens-tokens": "टोकन",
        "resettokens-token-label": "$1 (सद्याचें मूल्य: $2)",
-       "bold_sample": "बà¥\8bलà¥\8dड बरप",
-       "bold_tip": "बà¥\8bलà¥\8dड à¤¬à¤°à¤ª",
-       "italic_sample": "à¤\87à¤\9fालà¥\80à¤\95 बरप",
-       "italic_tip": "à¤\87à¤\9fालà¥\80à¤\95 à¤¬à¤°à¤ª",
+       "bold_sample": "डाà¤\9f बरप",
+       "bold_tip": "डाà¤\9f à¤®à¤\9cà¤\95à¥\82र",
+       "italic_sample": "पालसà¥\8b बरप",
+       "italic_tip": "पालसà¥\8b à¤®à¤\9cà¤\95à¥\82र",
        "link_sample": "जोडणेचो माथाळो",
-       "link_tip": "à¤\85à¤\82तरà¥\8dà¤\97त जोडणी",
-       "extlink_sample": "http://www.example.com माथाळो जोडात",
+       "link_tip": "भà¥\80तरलà¥\80 जोडणी",
+       "extlink_sample": "http://www.udaronn.in जोडण्येचे माथाळो",
        "extlink_tip": "भायली जोडणी (उपसर्ग http:// याद दवरात)",
        "headline_sample": "माथाळयाचो मजकूर",
        "headline_tip": "दुसऱ्या पांवड्याचो माथाळो",
        "nowiki_tip": "विकिचें सरूपण आडनदर करात",
        "image_tip": "अंत: स्थापीत फायल",
        "media_tip": "फायलीची जोडणी",
-       "sig_tip": "वेळाचे म्होरे सयत तुमची निशाणी",
+       "sig_tip": "वेळ-छाप सयत तुमची निशाणी",
        "hr_tip": "आडवी वळ (उणो उपेग करचो)",
        "summary": "आपरोस:",
        "subject": "विशय/माथाळो",
-       "minoredit": "हà¥\87à¤\82 à¤²à¥\8dहानशें संस्करण",
-       "watchthis": "हें पान पळेयात",
-       "savearticle": "पान à¤°à¤¾à¤\96à¥\82न à¤¦à¤µà¤°à¤¾à¤¤",
+       "minoredit": "हà¥\87à¤\82 à¤¦à¤¾à¤\95à¤\9fें संस्करण",
+       "watchthis": "हें पानार नदर दवरात",
+       "savearticle": "पान à¤¸à¤¾à¤\82भाळ",
        "preview": "पूर्वनियाळ",
        "showpreview": "पूर्वनियाळ दाखय",
        "showdiff": "बदल दाखयात",
-       "anoneditwarning": "'''शिटकावणी:''' तूं लॉग इन ना.\nतुजो IP पत्तो ह्या पानाच्या संपादन इतिहासांत नोंद जातलो.जर तुमी <strong>[$1 लॉग इन]</strong> करता वा <strong>[$2 खातें उगडटा]</strong> जाल्यार हेर सुविधांसयत तुमच्या संपादनाचें श्रेय तुमच्या सदस्य नांवाचेर दितलें.",
+       "anoneditwarning": "'''शिटकावणी:''' तूंवें सत्रारंभ करूंक ना.\nतुजो IP पत्तो ह्या पानाच्या संपादन इतिहासांत नोंद जातलो.जर तुमी <strong>[$1 सत्रारंभ]</strong> करता वा <strong>[$2 खातें उगडटा]</strong> जाल्यार हेर सुविधांसयत तुमच्या संपादनाचें श्रेय तुमच्या सदस्य नांवाचेर दितलें.",
        "missingcommenttext": "उपकार करून तुमच्यो शिरो सकयल घाल.",
        "blockedtitle": "वापरप्याक बंद केला",
        "blockednoreason": "कांयच कारण दिवंक ना",
        "loginreqlink": "सत्रारंभ करात",
        "accmailtitle": "गुपीत उतर धाडलां",
        "newarticle": "(नवें)",
-       "newarticletext": "à¤\9cà¥\87à¤\82 à¤ªà¤¾à¤¨ à¤\85à¤\9cà¥\82न à¤\85सà¥\8dतितà¥\8dवाà¤\82त à¤¨à¤¾ à¤\85शा à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤\9cà¥\8bडणà¥\87 à¤«à¤¾à¤\9fलà¥\8dयान à¤¤à¥\81मà¥\80 à¤\86सात. à¤ªà¤¾à¤¨ à¤¤à¤¯à¤¾à¤° à¤\95रपाक सकयले चौकटींत टायप करपाक सुरु करात (चड म्हायती खातीर [$1 मजत पान] पळेयात) जर ह्या पानार तुमी चुकून पावल्यात तर ब्रावजराचो बॅक (<strong>फटीं</strong>) हो बटन दामात",
-       "noarticletext": "सदà¥\8dया à¤¹à¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87र à¤\95सलà¥\80à¤\9a à¤²à¤¿à¤\96à¥\80त à¤¸à¤\82हिता ना. \nतुमी हेर पानांचेर [[Special:Search/{{PAGENAME}}|हो माथाळो]] सोदूं शकतात,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंदीत लॉग सोदूं शकतात],\nवा ह्या पानाक [{{fullurl:{{FULLPAGENAME}}|action=edit}} संपादीत] करूं शकतात</span>।",
+       "newarticletext": "à¤\9cà¥\87à¤\82 à¤ªà¤¾à¤¨ à¤\85à¤\9cà¥\82न à¤\85सà¥\8dतितà¥\8dवाà¤\82त à¤¨à¤¾ à¤\85शा à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤\9cà¥\8bडणà¥\87 à¤«à¤¾à¤\9fलà¥\8dयान à¤¤à¥\81मà¥\80 à¤\86सात. à¤ªà¤¾à¤¨ à¤°à¤\9aपाक सकयले चौकटींत टायप करपाक सुरु करात (चड म्हायती खातीर [$1 मजत पान] पळेयात) जर ह्या पानार तुमी चुकून पावल्यात तर ब्रावजराचो बॅक (<strong>फटीं</strong>) हो बटन दामात",
+       "noarticletext": "सदà¥\8dया à¤¹à¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87र à¤\95सलà¥\80à¤\9a à¤®à¤\9cà¤\95à¥\82र ना. \nतुमी हेर पानांचेर [[Special:Search/{{PAGENAME}}|हो माथाळो]] सोदूं शकतात,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंदीत लॉग सोदूं शकतात],\nवा ह्या पानाक [{{fullurl:{{FULLPAGENAME}}|action=edit}} संपादीत] करूं शकतात</span>।",
        "noarticletext-nopermission": "तुर्ताक ह्या पानाचेर कसलोच मजकूर ना. तुमी हेर पानांचेर [[Special:Search/{{PAGENAME}}|ह्या माथाळ्याचो सोद]] घेवं शकतात,\nवा <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंदीत लॉग सोदूं शकतात]</span>, पूण तुमकां हें पानाची रचणूक करपाची परवानगी ना।",
        "userpage-userdoesnotexist-view": "\"$1\" ह्या वापरप्याच्या खात्याची नोंदणी करूंक ना.",
        "previewnote": "'''ही फकत एक दाखवण हें मतींत दवरात.'''\nतुमचें बदल आडून राखून दवरूंक ना!",
        "editing": "संपादता $1",
-       "creating": "$1 à¤¨à¤¿à¤°à¥\8dमाण à¤\95र",
-       "editingsection": "संस्करण $1 (विभाग)",
+       "creating": "$1 à¤°à¥\8bà¤\9aता",
+       "editingsection": "(विभाग) $1 संस्करण",
        "yourtext": "तुमचो मजकूर",
        "templatesused": "ह्या पानाचेर {{PLURAL:$1|वापरिल्लें}} प्रारूप",
-       "template-protected": "(राखिल्लें) संरक्षीत",
+       "template-protected": "(राखिल्लें)",
        "template-semiprotected": "(अर्द-सुरक्षीत)",
-       "hiddencategories": "हà¥\87à¤\82 à¤ªà¤¾à¤¨ {{PLURAL:$1|लिपिलà¥\8dलà¥\87 à¤¶à¥\8dरà¥\87णà¥\80चें}} आसा",
+       "hiddencategories": "हà¥\87à¤\82 à¤ªà¤¾à¤¨ {{PLURAL:$1|लिपिलà¥\8dलà¥\87 à¤µà¤°à¥\8dà¤\97ाचें}} आसा",
        "permissionserrorstext-withaction": "ह्या {{PLURAL:$1|कारण|कारणां}}: खातीर तुका $2 मान्यताय ना.",
        "recreate-moveddeleted-warn": "शिटकावणीः तुमी आदीं काडून उडयिल्लें पान परतून तयार करतात ह्या पानाचे फासून उडोवपी आनी दुसरे कडे व्हरपी लाग फकत सोपेपणा खातीर दिल्यात",
        "moveddeleted-notice": "हें पान काडून उडयला.\nह्या पानाचो काडून उडोवपी आनी हालोवपी लॉग संदर्भा खातीर सकयल दिला.",
        "post-expand-template-inclusion-category": "जंय प्रारुप धरून आवांठ व्हड जाता अशीं पानां",
        "post-expand-template-argument-warning": "शिटकावणीः ह्या पानाचेर खुब व्हड आंवाठ आशिल्लो एक तरी प्रारुप मुद्दो आसा. हे मुद्दे भायरायल्यात",
        "post-expand-template-argument-category": "भायरायिल्ल्या प्रारूपांसंबंदीचे मुद्दे आशिल्लीं पानां",
-       "viewpagelogs": "हà¥\8dया à¤ªà¤¾à¤¨à¤¾ à¤\96ातà¥\80र à¤²à¥\89à¤\97à¥\8dस पळेयात",
+       "viewpagelogs": "हà¥\8dया à¤ªà¤¾à¤¨à¤¾ à¤\96ातà¥\80र à¤¸à¥\8bतà¥\8dराà¤\82 पळेयात",
        "currentrev-asof": "$1 मेरेनचो सगळ्यांत निमणो पुनर्नियाळ",
        "revisionasof": " $1 मेरेन पुनर्नियाळ",
        "revision-info": "$2 कडल्यान  $1 मेरेनची तपासणी",
        "currentrevisionlink": "सगळ्यांत हालींचो पुनर्नियाळ",
        "cur": "चालंत",
        "next": "दुसरें",
-       "last": "à¤\86दलें",
+       "last": "à¤\85ादलें",
        "page_first": "पयलें",
        "page_last": "निमणें",
        "histlegend": "फरकाची निवडः पुनर्नियाळांची तुळा करपा खातीर रेडियो चौकटीं चेर कुरु करात आनी एंटर ना तर तळाकडे आशिल्लो बटन दामात",
        "next-page": "दुसरें पान",
        "prevn-title": "{{PLURAL:$1|आदलो|आदलें}} $1 निकाल",
        "nextn-title": "{{PLURAL:$1|फुडलो|फुडलें}} $1 निकाल",
-       "shown-title": "दर एका पानार {{PLURAL:$1|निकाल}}दाखय",
+       "shown-title": "दर एका पानार {{PLURAL:$1|निकाल}} दाखय",
        "viewprevnext": "पळयात ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "ह्या'''विकीचेर \"[[:$1]]\" ह्या नांवाचें पान आसा .''' {{PLURAL:$2|0=|See also the other search results found.}}",
-       "searchmenu-new": "ह्या विकीचेर $1 हें पान तयार करात, {{PLURAL:$2|}} सोदून मेळिल्लें पानय पळेयात. / सोदून मेळिल्ले निकाळय पळेयात.",
+       "searchmenu-new": "<strong>ह्या विकीचेर \"[[:$1]]\" हें पान रोचात!<strong> {{PLURAL:$2|सोदून मेळिल्लें पानय पळेयात.|सोदून मेळिल्ले निकाळय पळेयात.}}",
        "searchprofile-articles": "मजकूराचीं पानां",
-       "searchprofile-images": "मलà¥\8dà¤\9fà¥\80मिडà¥\80या",
-       "searchprofile-everything": "à¤\9cणà¥\87à¤\95लें",
-       "searchprofile-advanced": "पà¥\8dरà¤\97त",
+       "searchprofile-images": "भà¥\8bवमाधà¥\8dयम",
+       "searchprofile-everything": "सà¤\97ळें",
+       "searchprofile-advanced": "सà¥\8bदपाà¤\9aà¥\87 à¤ªà¤°à¥\8dयाय",
        "searchprofile-articles-tooltip": " $1 त सोदात",
-       "searchprofile-images-tooltip": "फायलीं सोदात धारिक सोदात",
-       "searchprofile-everything-tooltip": "सà¤\97ळà¥\8b à¤®à¤\9cà¤\95à¥\82र à¤¸à¥\8bदात(à¤\89लà¥\8bवपाचें पाना सयत)",
-       "searchprofile-advanced-tooltip": "à¤\96ाशà¥\87लà¥\8dया à¤¨à¤¾à¤\82वाà¤\82à¤\9aà¥\8dया à¤¸à¥\81वाताà¤\82नी सोदात",
+       "searchprofile-images-tooltip": "फायलीं सोदात",
+       "searchprofile-everything-tooltip": "सà¤\97ळà¥\8b à¤®à¤\9cà¤\95à¥\82र à¤¸à¥\8bदात(à¤\9aरà¥\8dà¤\9aà¥\87चें पाना सयत)",
+       "searchprofile-advanced-tooltip": "à¤\96ाशà¥\87लà¥\8dया à¤¨à¤¾à¤\82वथà¥\8bळाणी सोदात",
        "search-result-size": "$1 ({{PLURAL:$2|1 उतर|$2 उतरां}})",
        "search-result-category-size": "{PLURAL:$1|1 सदस्य|$1 सदस्य}} ({{PLURAL:$2|1 उपगट|$2 उपगट}}, {{PLURAL:$3|1 फायल|$3 फायलीं}})",
        "search-redirect": "($1 नव्यान नामो दियात)",
        "prefs-watchlist": "लक्ष वळेरी",
        "youremail": "इमेल",
        "yourrealname": "खरें नांवः",
-       "right-writeapi": "Wrtie API चो उपेग करात",
-       "newuserlogpage": "à¤\89पà¥\87à¤\97à¤\95रà¥\8dतà¥\8dयान à¤\95à¥\87लà¥\8dलà¥\80 à¤\95ारà¥\8dय वळेरी",
+       "right-writeapi": "बरोवपाचे API चो उपेग करात",
+       "newuserlogpage": "à¤\89पà¥\87à¤\97à¤\95रà¥\8dतà¥\8dयà¥\87 à¤°à¥\8bà¤\9aनà¥\87à¤\9aà¥\87 वळेरी",
        "action-edit": "हें पान संपादीत कर",
        "nchanges": "$1 {{PLURAL:$1|बदल|बदल}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges-summary": "ह्या विकीचेर हालींच जाल्ल्या बदलांचो माग ह्या भरणांतल्यान दवरात",
        "recentchanges-feed-description": "ह्या विकीचेर हालींच जाल्ल्या बदलांचो माग ह्या भरणांतल्यान दवरात.",
        "recentchanges-label-newpage": "ह्या संपादनांन नवें पान निर्माण केला.",
-       "recentchanges-label-minor": "हà¥\87à¤\82 à¤²à¥\8dहानशà¥\87à¤\82 संपादन",
-       "recentchanges-label-bot": "हà¥\87à¤\82 à¤¸à¤\82पादन à¤¬à¥\89à¤\9fा à¤µà¤°à¤µà¥\80à¤\82 केला.",
+       "recentchanges-label-minor": "हà¥\87à¤\82 à¤¦à¤¾à¤\95à¥\8dà¤\9fà¥\87 संपादन",
+       "recentchanges-label-bot": "हà¥\87à¤\82 à¤¸à¤\82पादन à¤°à¥\8bबà¥\89à¤\9fान केला.",
        "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 à¤²à¥\8dहानशà¥\87à¤\82 बदल",
+       "rcshowhideminor": "$1 à¤¦à¤¾à¤\95à¤\9fà¥\8dयà¥\8b बदल",
        "rcshowhideminor-show": "दाखयात",
        "rcshowhideminor-hide": "लिपयात",
-       "rcshowhidebots": "$1 बॉट",
+       "rcshowhidebots": "$1 à¤°à¥\8bबà¥\89à¤\9f",
        "rcshowhidebots-show": "दाखयात",
        "rcshowhidebots-hide": "लिपयात",
        "rcshowhideliu": "$1 अधिकृत नोंदीचे उपेग कर्ते",
        "rcshowhidemine-show": "दाखयात",
        "rcshowhidemine-hide": "लिपयात",
        "rclinks": "फाटल्या $2 दिसांनी जाल्लो $1 बदल दाखयात<br />$3",
-       "diff": "वà¥\87à¤\97ळà¥\87à¤\82",
-       "hist": "इतिहास",
+       "diff": "फरà¤\95",
+       "hist": "इति",
        "hide": "लिपयात",
        "show": "दाखयात",
-       "minoreditletter": "म",
+       "minoreditletter": "द",
        "newpageletter": "न",
-       "boteditletter": "ब",
+       "boteditletter": "र",
        "rc-change-size-new": "$1 {{बहुवचन:$1|byte|bytes}}बदल केल्या उपरांत",
        "rc-enhanced-expand": "म्हायती दाखय",
        "rc-enhanced-hide": "म्हायती लिपय",
-       "recentchangeslinked": "सà¤\82बà¤\82दातलà¥\87 बदल",
+       "recentchangeslinked": "सà¤\82बà¤\82दित बदल",
        "recentchangeslinked-toolbox": "संबंदीत बदल",
        "recentchangeslinked-title": "\"$1\" च्या संबंदातले बदल",
-       "recentchangeslinked-summary": "à¤\96ाशà¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82 à¤\95डलà¥\8dयान à¤\9cà¥\8bडणà¥\80 à¤®à¥\87ळिलà¥\8dलà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82मदà¥\80à¤\82 (वा à¤µà¤¿à¤¶à¤¿à¤¶à¥\8dà¤\9f à¤¶à¥\8dरà¥\87णà¥\80à¤\9aà¥\8dया à¤µà¤¾à¤\82à¤\97डà¥\8dयाà¤\82मदà¥\80à¤\82)हालà¥\80à¤\82à¤\9a à¤\95à¥\87लà¥\8dलà¥\8dया à¤¬à¤¦à¤²à¤¾à¤\82à¤\9aà¥\80 à¤¹à¥\80 à¤µà¤³à¥\87रà¥\80. à¤¤à¥\81मà¤\9aà¥\8dया à¤²à¤\95à¥\8dष à¤µà¤³à¥\87रà¥\87à¤\82तलà¥\80à¤\82 पाना '''ठळक''' दाखयल्यात",
+       "recentchangeslinked-summary": "à¤\96ाशà¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82 à¤\95डलà¥\8dयान à¤\9cà¥\8bडणà¥\80 à¤®à¥\87ळिलà¥\8dलà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\82मदà¥\80à¤\82 (वा à¤µà¤¿à¤¶à¤¿à¤¶à¥\8dà¤\9f à¤µà¤°à¥\8dà¤\97ाà¤\82à¤\9aà¥\8dया à¤µà¤¾à¤\82à¤\97डà¥\8dयाà¤\82मदà¥\80à¤\82) à¤¹à¤¾à¤²à¥\80à¤\82à¤\9a à¤\95à¥\87लà¥\8dलà¥\8dया à¤¬à¤¦à¤²à¤¾à¤\82à¤\9aà¥\80 à¤¹à¥\80 à¤µà¤³à¥\87रà¥\80. à¤¤à¥\81मà¤\9aà¥\8dया [[Special:Watchlist|लà¤\95à¥\8dष à¤µà¤³à¥\87रà¥\87à¤\82तलà¥\80à¤\82]] पाना '''ठळक''' दाखयल्यात",
        "recentchangeslinked-page": "पानाचें नांव",
        "recentchangeslinked-to": "ह्या पाना बदला दिल्ल्या पानांक जुळून आशिल्ल्या पानांचे बदल दाखय",
        "upload": "फायल अपलोड करात",
        "filedesc": "सारांश",
        "fileuploadsummary": "आपरोस:",
        "license": "लायसन्सीग",
-       "license-header": "लायसनà¥\8dसà¥\80à¤\82à¤\97",
+       "license-header": "परवाà¤\82à¤\97à¥\80",
        "listfiles-delete": "काडून उडयात",
        "imgfile": "फायल",
        "listfiles_date": "तारीख",
        "filehist-revert": "परतुवप",
        "filehist-current": "चालंत",
        "filehist-datetime": "दिस / वेळ",
-       "filehist-thumb": "लà¤\98à¥\81पà¥\8dरतिमा",
-       "filehist-thumbtext": " $1मà¥\87रà¥\87नà¤\9aà¥\87 à¤\86वà¥\83तà¥\8dतà¥\80 à¤\96ातà¥\80र à¤²à¤\98à¥\81पà¥\8dरतिमा",
+       "filehist-thumb": "लà¥\8dहान-à¤\87माà¤\9c़",
+       "filehist-thumbtext": " $1मà¥\87रà¥\87नà¤\9aà¥\87 à¤\86वà¥\83तà¥\8dतà¥\80 à¤\96ातà¥\80र à¤²à¥\8dहान-à¤\87माà¤\9c़",
        "filehist-user": "उपेगकर्तो",
        "filehist-dimensions": "परिमाण",
        "filehist-comment": "शेरो",
-       "imagelinks": "फायल वापरपाची तरा",
+       "imagelinks": "फायलिचो वापर",
        "linkstoimage": "हे फायलीक सकयल दिल्ल्यो पानाच्यो जोडण्यो {{PLURAL:$1|आसात}}.",
        "nolinkstoimage": "हे फायलीक जोडणी आशिल्लीं आनीक पानां नात.",
        "sharedupload-desc-here": "ही फयल $1 हांगाची आनी ती हे प्रकल्पां खातीर वापरल्यार चलता. (तिच्या $2 ह्या फयलींतलें वर्णनाचे पान) तातूंतलें वर्णन सकयल दिलां.",
        "upload-disallowed-here": "तूं ह्या फायलीचेर अधिलेखीत करूंक शकना",
-       "randompage": "खंयचेंय आदलें मदलें",
+       "randompage": "खंयचेंय आदलें मदलें पान",
        "statistics": "संख्याशास्त्र",
        "statistics-pages": "पान:",
        "statistics-files": "फायल अपलोड करात",
        "booksources": "पुस्तकांचो स्त्रोत",
        "booksources-search-legend": "पुस्तकाचे स्त्रोत सोदात",
        "booksources-search": "सोद",
-       "log": "लà¥\89à¤\97à¥\8dस",
+       "log": "सà¥\8bतà¥\8dराà¤\82",
        "allpages": "सगळीं पाना",
        "allarticles": "सगळीं पानां",
        "allpagessubmit": "वचात",
-       "categories": "à¤\97à¤\9f",
+       "categories": "वरà¥\8dà¤\97",
        "linksearch-ns": "नांवाची सुवात",
        "linksearch-ok": "सोद",
        "linksearch-line": "$2 तल्यान $1 जोडिल्लो आसा",
        "dellogpage": "काडून उडयिल्ल्यांची वळेरी",
        "rollbacklink": "फाटीं घेयात",
        "rollbacklinkcount": "$1 {{PLURAL:$1|संपादन}} फाटीं घेयात",
-       "protectlogpage": "सà¥\81रà¤\95à¥\8dषा à¤¨à¥\8bà¤\82दà¥\80",
+       "protectlogpage": "सà¥\81रà¤\95à¥\8dषितà¥\87à¤\9aà¥\87à¤\82 à¤¸à¥\8bतà¥\8dर",
        "protectedarticle": "राखिल्ले\"[[$1]]\"",
        "restriction-edit": "संस्करण",
        "restriction-move": "दुसरेकडे व्हरात",
        "restriction-create": "निर्माण कर",
        "undeletelink": "पळेयात/परत हाडात",
        "undeleteviewlink": "पळय, दृश्य",
-       "namespace": "नांवाची सुवात",
+       "namespace": "नांव-थोळ",
        "invert": "विपरीत प्रवरण",
        "tooltip-invert": "वेंचीक नांवांचे सुवाते(आनी संबंदीत नांवांची सुवात तपासल्या जाल्यार) भीतर पानांनी केल्ले बदल लिपोवंक ह्या बॉक्सांत तपासून पळयात.",
-       "namespace_association": "सà¤\82बà¤\82दà¥\80त à¤¨à¤¾à¤®à¤¸à¥\8dथान",
+       "namespace_association": "सà¤\82बà¤\82दà¥\80त à¤¨à¤¾à¤\82वथà¥\8bळ",
        "tooltip-namespace_association": "चर्चा वा वेंचीक नांवाचें सुवातीक संबंदीत विशयाच्या नांवाची सुवात आस्पावन घेवपाखातीर ह्या बॉक्सांत पळयात",
        "blanknamespace": "(मुखेल)",
        "contributions": "{{GENDER:$1|उपेगकर्तो}} योगदानां",
        "linkshere": "मुखावेली पानां '''[[:$1]]''': हाका जोडणी करतात",
        "nolinkshere": "$1हाका खंयच्याच पानाची जोडणी ना",
        "isredirect": "पान नव्या नाम्यार धाडात",
-       "istemplate": "$1 à¤\9fà¥\8dरानà¥\8dसà¥\8dà¤\95à¥\8dलà¥\8dयà¥\81à¤\9cनà¥\8dस",
+       "istemplate": "$1 à¤¦à¥\82सरात-समावà¥\87स",
        "isimage": "फायलीचो दुवो",
        "whatlinkshere-prev": "{{PLURAL:$1|आदलें|आदलीं $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|फुडलें|फुडलें $1}}",
        "whatlinkshere-links": "← जोडण्यो",
        "whatlinkshere-hideredirs": "$1 पुनर्निर्देशन",
-       "whatlinkshere-hidetrans": "$1 à¤\9fà¥\8dरानà¥\8dसà¥\8dà¤\95à¥\8dलà¥\8dयà¥\81à¤\9cनà¥\8dस",
+       "whatlinkshere-hidetrans": "$1 à¤¦à¥\82सà¥\8dरात-समावà¥\87श",
        "whatlinkshere-hidelinks": "$1 जोडण्यो",
        "whatlinkshere-hideimages": "$1 फायल जोडणी",
        "whatlinkshere-filters": "गाळणे",
        "ipboptions": "2 वरां: 2hours ,1 दीस:1 day,3 दीस:3 days,1 सुमान:1 week,2 सुमनां:2 weeks,1 म्हयनो:1 month,3 म्हयने:3 months,6 म्हयने:6 months,1 वर्स:1 year,अनिश्चीत:infinte",
        "ipblocklist": "आडायल्लें वापरपी",
-       "blocklink": "विभाà¤\97",
+       "blocklink": "à¤\86डावणà¥\80",
        "change-blocklink": "विभाग सुदारप",
        "contribslink": "योगदान",
        "blocklogpage": "कार्यवळेरी आडायात",
        "blocklogentry": "$2 $3 हो सोंपपी वेळ आशिल्लो $1 बंद दवरल्ला",
        "block-log-flags-nocreate": "खातें निर्माण जावूंक ना",
-       "movepagebtn": "पान à¤°à¤¾à¤\96à¥\82न à¤¦à¤µà¤°à¤¾à¤¤",
-       "movelogpage": "लà¥\89à¤\97 à¤¹à¤¾à¤²à¤¯",
+       "movepagebtn": "पान à¤¹à¤¾à¤²à¤¯",
+       "movelogpage": "पान à¤¹à¤¾à¤²à¥\8bवणà¥\8dयाà¤\82à¤\9aà¥\8b à¤¸à¥\8bतà¥\8dर",
        "revertmove": "मूळ पदार व्हरप",
-       "export": "निरà¥\8dयात à¤ªà¤¾à¤¨à¤¾à¤\82",
+       "export": "पानाà¤\82 à¤¨à¤¿à¤°à¥\8dयात à¤\95र",
        "allmessagesname": "नांव",
        "allmessagesdefault": "पूर्वनिर्धारित संदेशाचो मजकूर",
        "thumbnail-more": "व्हड करात",
        "thumbnail_error": "$1ः लघुप्रतिमा करतांनाची चूक",
        "tooltip-pt-userpage": "तुमचें वापरपाचें पान",
-       "tooltip-pt-mytalk": "तà¥\81मà¤\9aà¥\87à¤\82 à¤\89लà¥\8bवपाचें पान",
+       "tooltip-pt-mytalk": "तà¥\81मà¤\9aà¥\87à¤\82 à¤\9aरà¥\8dà¤\9aà¥\87चें पान",
        "tooltip-pt-preferences": "तुमची पसंती",
        "tooltip-pt-watchlist": "तुमी बदल करपा खातीर देखरेख करतात त्या पानांची वळेरी",
        "tooltip-pt-mycontris": "तुमच्या योगदानांची वळेरी",
-       "tooltip-pt-login": "लà¥\8bà¤\97 à¤\87न करप बरें, पूण तशी सक्ती ना.",
+       "tooltip-pt-login": "सतà¥\8dरारà¤\82भ करप बरें, पूण तशी सक्ती ना.",
        "tooltip-pt-logout": "सत्र शेवट",
-       "tooltip-pt-createaccount": "तà¥\81मà¥\80 à¤\96ातà¥\87à¤\82 à¤\89à¤\97डà¥\82न à¤²à¤¾à¥\85à¤\97 à¤\87न करचें अशें सुचयतात, पूण तें सक्तीचे ना.",
-       "tooltip-ca-talk": "मà¤\9cà¤\95à¥\82राà¤\9aà¥\8dया à¤ªà¤¾à¤¨à¤¾ à¤¸à¤\82बà¤\82दान à¤\9aरà¥\8dà¤\9aा",
-       "tooltip-ca-edit": "तà¥\81मà¤\9aà¥\8dयानà¥\80à¤\82 à¤¹à¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87à¤\82 à¤¸à¤\82सà¥\8dà¤\95रण à¤\95रà¥\82à¤\82 à¤¯à¥\87ता. à¤\89पà¤\95ार à¤\95रà¥\82न à¤°à¤¾à¤\96à¥\82न à¤¦à¤µà¤°à¤\9aà¥\8dया à¤\86दà¥\80à¤\82 à¤ªà¥\82रà¥\8dवनियाळ à¤¬à¤\9fन à¤µà¤¾à¤ªà¤°à¤\9aà¥\8b",
-       "tooltip-ca-addsection": "नवà¥\80न विभाग सुरु करात",
-       "tooltip-ca-viewsource": "हें पान संरक्षीत आसा. तुमच्यानी ताचो उगम पळोवं येता",
-       "tooltip-ca-history": "हà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤\86दलà¥\87 à¤¨à¤¿à¤¯à¤¾à¤³",
+       "tooltip-pt-createaccount": "तà¥\81मà¥\80 à¤\96ातà¥\87à¤\82 à¤\89à¤\97डà¥\82न à¤¸à¤¤à¥\8dरारà¤\82भ करचें अशें सुचयतात, पूण तें सक्तीचे ना.",
+       "tooltip-ca-talk": "मà¤\9cà¤\95à¥\82राà¤\9aà¥\8dया à¤ªà¤¾à¤¨à¤¾ à¤¸à¤\82बà¤\82दान à¤­à¤¾à¤¸à¤¾à¤­à¤¾à¤¸",
+       "tooltip-ca-edit": "हà¥\87à¤\82 à¤ªà¤¾à¤¨ à¤¬à¤¦à¤²",
+       "tooltip-ca-addsection": "नवà¥\80à¤\82 विभाग सुरु करात",
+       "tooltip-ca-viewsource": "हें पान संरक्षीत आसा.\nतुमच्यानी ताचो उगम पळोवं येता",
+       "tooltip-ca-history": "हà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\8dयà¥\8b à¤\86दलà¥\8dयà¥\8b à¤\89à¤\9cà¤\82ळणà¥\8dयà¥\8b",
        "tooltip-ca-protect": "हें पान राखून दवर",
        "tooltip-ca-delete": "हें पान काडून उडयात",
        "tooltip-ca-move": "दुसरे कडे व्हरात",
        "tooltip-n-help": "सोदपाचो जागो",
        "tooltip-t-whatlinkshere": "हांगा जोडणी आशिल्ल्या सगळ्या विकी पानांची वळेरी",
        "tooltip-t-recentchangeslinked": "ह्या पानावेल्यान जोडणी दिल्ल्या पानांतले हालींचे बदल",
-       "tooltip-feed-atom": "हà¥\8dया à¤ªà¤¾à¤¨à¤¾ à¤\96ातà¥\80र à¤\8dà¤\9fम à¤°à¤¸à¤¦",
+       "tooltip-feed-atom": "हà¥\8dया à¤ªà¤¾à¤¨à¤¾ à¤\96ातà¥\80र à¤\8dà¤\9fम à¤ªà¥\82रà¥\8dवण",
        "tooltip-t-contributions": "ह्या वापरप्याची योगदानाची वळेरी",
        "tooltip-t-emailuser": "ह्या उपेगकर्त्याक इ-मेल धाडात",
-       "tooltip-t-upload": "फायल अपलोड करात",
+       "tooltip-t-upload": "फायल अपलोड करात",
        "tooltip-t-specialpages": "सगळ्या खाशेल्या पानांची वळेरी",
        "tooltip-t-print": "ह्या पानाची छापपायोग्य आवृत्ती",
        "tooltip-t-permalink": "ह्या पानाच्या ह्या पुनर्नियाळाकडे सदांकाळ जोडणी",
        "tooltip-ca-nstab-main": "मजकूर पान पळेयात",
        "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-ca-nstab-category": "शà¥\8dरà¥\87णà¥\80à¤\82à¤\9aà¥\87à¤\82 पान पळेयात",
+       "tooltip-ca-nstab-category": "वरà¥\8dà¤\97ाà¤\82à¤\9aà¥\87 पान पळेयात",
        "tooltip-minoredit": "हो ल्हानसो बदल म्हूण कुरू करात",
-       "tooltip-save": "तà¥\81मà¤\9aà¥\87 à¤¬à¤¦à¤² à¤°à¤¾à¤\96à¥\82न à¤¦à¤µà¤°ात",
+       "tooltip-save": "तà¥\81मà¤\9aà¥\87 à¤¬à¤¦à¤² à¤¸à¤¾à¤\82भाळात",
        "tooltip-preview": "तुमचे बदल परतून नियाळचे. हें राखून दवरचे पयलीं करचें",
        "tooltip-diff": "लिखीत मजकूरांत तुमी खंयचो बदल केला तो दाखयात",
        "tooltip-compareselectedversions": "ह्या पानाच्या दोन वेंचिल्ल्या पुनर्नियाळां मदलो फरक पळेयात.",
        "tooltip-rollback": "निमाण्या योगदान करप्यान ह्या पानाचेर केल्लें संस्करण (‍णां) रोलबॅक  (फाटीं घेयात) एकाच क्लीकान मूळ पदार हाडटा",
        "tooltip-undo": "\"आदलें स्थितीर हाडचें\" ह्या बदलाक परत व्हरुन संपादन स्थितीन झलक रितीन दाखयतात.\nहाचेवरवीं सारांशान आदल्या स्थितीर हाडपाचें कारण बरोवं शकता.",
        "tooltip-summary": "आपरोसाची नोंदणी करात",
-       "simpleantispam-label": "एन्टी-स्पैम तपासप. हातूंतल्यान <strong>NOT</strong> भरात!",
+       "simpleantispam-label": "एन्टी-स्पैम तपासप.\nहे भरी<strong>नकाय</strong>!",
        "pageinfo-toolboxlink": "पानाची म्हायती",
        "previousdiff": "← आदलें संपादन",
        "nextdiff": "नवें संपादन →",
        "file-info-size": "$1 × $2 चित्रतत्व, फायलीचो आकार: $3, माइम प्रकार: $4",
-       "file-nohires": "हाà¤\9aà¥\8dया à¤ªà¤°à¤¸ à¤µà¤¯à¤²à¥\87 à¤°à¥\87à¤\9cलà¥\8dयà¥\81शन उपल्बद ना",
-       "svg-long-desc": "SVG à¤«à¤¾à¤¯à¤², à¤¸à¤¾à¤¦à¤¾à¤°à¤£à¤ªà¤£à¤¾à¤¨ $1 Ã\97 $2 à¤ªà¥\80à¤\95à¥\8dसलà¥\8dस, फायलीचो आकार: $3",
+       "file-nohires": "हाà¤\9aà¥\8dया à¤ªà¤°à¤¸ à¤µà¤¯à¤²à¥\87 à¤¬à¤¾à¤°à¤¿à¤\95à¥\8dसाय उपल्बद ना",
+       "svg-long-desc": "SVG à¤«à¤¾à¤¯à¤², à¤¨à¤¾à¤\82वाà¤\95 $1 Ã\97 $2 à¤\9aितà¥\8dरततà¥\8dवाà¤\82, फायलीचो आकार: $3",
        "show-big-image": "मुळावी फायल",
        "show-big-image-preview": "ह्या दाखवणीचो आकार: $1.",
-       "show-big-image-other": "हेर  {{PLURAL:$2| resolution|resolutions}}:  $1 ।",
-       "show-big-image-size": "$1 Ã\97 $2 à¤ªà¤¿à¤\95à¥\8dसà¥\87ल",
+       "show-big-image-other": "हेर {{PLURAL:$2|बारिकसाय}}: $1।",
+       "show-big-image-size": "$1 Ã\97 $2 à¤\9aितà¥\8dरततà¥\8dवाà¤\82",
        "bad_image_list": "सरुपण सकयले भाशेन आसाः फक्त वळेरेंतल्यान विशयांचो (*न सुरु जावपी वळी) विचार जाला वळी वयली पयली जोडणी ही वायट फायलीक जोडणी ही वायट फायलीक जोडणी आसूंक जाय. ते लायनीवेल्यो ताचे उपरांतच्यो खंयच्योय जोडण्यो ह्यो आडवाद अशो धरतात म्हळ्यार जंय फायल  इन लायन आसूं येता अशी पानां.",
        "metadata": "मेटाडॅटा",
-       "metadata-help": "हà¥\8dया à¤«à¤¾à¤¯à¤²à¥\80न à¤\9aड à¤®à¥\8dहायतà¥\80 à¤\86सा, à¤\98डयà¥\87 à¤¹à¥\80 à¤«à¤¾à¤¯à¤² à¤¤à¤¯à¤¾à¤° à¤\95रताना वापरिल्ल्या स्कॅनर वा कॅमेरा कडल्यान ही मेळ्ळ्या आसुंये. जर ही फायल बदल्ल्या जाल्यार ही म्हायती नव्या फायलींकडे जुळची ना असो दुबाव आसा.",
-       "metadata-fields": "जेन्ना मेटाडेटा टेबल कोसळटा तेन्ना ह्या संदेशांत आसपाव केल्लीं मेटाडेटाची चित्ररूपां दर्शक पानांत आसपावतलीं बाकीचीं पूर्वनिर्धारीत रितीन लिपून उरतलीं\nबनावट\nनमुनो\nमूळ तारीख-वेळ\nउकतो वेळ\nकलाकार\nसर्वाधिकार\nप्रतिमावर्णन",
+       "metadata-help": "हà¥\8dया à¤«à¤¾à¤¯à¤²à¥\80न à¤\9aड à¤®à¥\8dहायतà¥\80 à¤\86सा, à¤\98डयà¥\87 à¤¹à¥\80 à¤«à¤¾à¤¯à¤² à¤°à¤\9aताना वापरिल्ल्या स्कॅनर वा कॅमेरा कडल्यान ही मेळ्ळ्या आसुंये. जर ही फायल बदल्ल्या जाल्यार ही म्हायती नव्या फायलींकडे जुळची ना असो दुबाव आसा.",
+       "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": "à¤\86डवà¥\87à¤\82 à¤°à¤¿à¤\9cà¥\8bलà¥\8dयà¥\82शन",
-       "exif-yresolution": "à¤\89बà¥\87à¤\82 à¤°à¤¿à¤\9cà¥\8bलà¥\8dयà¥\82शन",
-       "exif-datetime": "फायल बदल वेळ आनी तारीक",
+       "exif-xresolution": "à¤\86डवà¥\87à¤\82 à¤¬à¤¾à¤°à¤¿à¤\95à¥\8dसाय",
+       "exif-yresolution": "à¤\89बà¥\87à¤\82 à¤¬à¤¾à¤°à¤¿à¤\95à¥\8dसाय",
+       "exif-datetime": "फायलीचें बदलपाचें वेळ आनी तारीक",
        "exif-make": "कॅमेरा उत्पादक",
        "exif-model": "कॅमेरा मॉडेल",
        "exif-software": "वापरिल्लो सॉफ्टवेर",
        "exif-exifversion": "Exif आवृत्ती",
-       "exif-colorspace": "रà¤\82à¤\97 à¤¸à¥\8dथान",
+       "exif-colorspace": "रà¤\82à¤\97 à¤\9c़ाà¤\97à¥\8b",
        "exif-datetimeoriginal": "म्हायती निर्मितीची तारीख आनी वेळ",
-       "exif-datetimedigitized": "डिà¤\9cिà¤\9fायà¤\9c à¤\95à¥\87लà¥\8dलà¥\8dयाची तारीक आनी वेळ",
+       "exif-datetimedigitized": "फाà¤\87ल à¤°à¥\8bà¤\9aपाची तारीक आनी वेळ",
        "exif-orientation-1": "सामान्य",
        "namespacesall": "सगळें",
        "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|à¤\89लà¥\8bयात]])",
        "specialpages": "खाशेलीं पानां",
-       "tag-filter": "[[Special:Tags|लà¥\87बल]]गाळणो:",
-       "tag-list-wrapper": "([[विशेश:कुरवेचीट|{{बहुवचन:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
+       "tag-filter": "[[Special:Tags|à¤\95à¥\81रà¥\8dवà¥\87à¤\9aà¥\80à¤\9f]] गाळणो:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
        "logentry-delete-delete": "$1 {{GENDER:$2|काडून उडयल्ले पान}} $3",
        "logentry-move-move": "$1 न $3 पानाचेर $4 {{GENDER:$2|हालयला}}",
-       "logentry-newusers-create": "उपयोगकत्याचें $1 {{लिंग:$2|तयार केलें}}",
+       "logentry-newusers-create": "उपयोगकत्याचें $1 {{GENDER:$2|तयार केलें}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|अपलोड केला}} $3",
        "searchsuggest-search": "सोद"
 }
index bdd92b3..ec62ada 100644 (file)
@@ -7,8 +7,24 @@
                        "아라"
                ]
        },
+       "tog-underline": "Zoddnienche adhorekhan",
+       "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-shownumberswatching": "Nodor dovorpi vangdianche sonkhya dakhoi",
+       "tog-oldsig": "Sodheachi soy:",
+       "tog-uselivepreview": "Boroitastana zolok dahkoi",
+       "tog-watchlisthideown": "Sadurvollerint mhojeo bodlopam lipoi",
+       "tog-watchlisthidebots": "Sadurvollerint robotani kel'lim bodlopam lipoi",
+       "tog-watchlisthideminor": "Sadurvollerint daktim bodlopam lipoi",
+       "tog-showhiddencats": "Lipoiloleo vorg dakhoi",
        "underline-always": "Soddankal",
        "underline-never": "Kednach na",
+       "underline-default": "Skin vo browsera pormonnem",
+       "editfont-default": "Browsera pormonnem",
        "sunday": "Aitar",
        "monday": "Somar",
        "tuesday": "Munglar",
@@ -77,6 +93,7 @@
        "category-media-header": "\"$1\" hea vorgan madheom'ma",
        "category-empty": "''Hea vorgan sodhea ekui pan vo madheom na''",
        "hidden-categories": "{{PLURAL:$1|Lipoilolo vorg|Lipoilole vorg}}",
+       "hidden-category-category": "Lipoiloleo vorg",
        "category-subcat-count": "{{PLURAL:$2|Hea vorgan fokot hi ek upvorg asa.|Hea vorgan {{PLURAL:$1|hi upvorg asa|heo $1 upvorg asat}}, beriz $2 upvorga modem.}}",
        "category-article-count": "{{PLURAL:$2|Hea vorgan fokot hi ek pan asa.|Hea vorgan {{PLURAL:$1|hi pan asa|him $1 panam asat}} beriz $2 panam modem.}}",
        "category-file-count": "{{PLURAL:$2|Hea vorgan fokot hi ek fail asa.|Hea vorgan {{PLURAL:$1|hi fail asa|heo $1 faili asat}}, beriz $2 faili modem.}}",
        "article": "Vixoi sombondhi pan",
        "newwindow": "(novea zonelant uktem zata)",
        "cancel": "Rod'd kor",
+       "moredotdotdot": "Anik...",
+       "morenotlisted": "Hi suchi purn na",
+       "mypage": "Pan",
        "mytalk": "Bhasabhas",
        "navigation": "Dixa-niontronn",
        "and": "&#32;ani",
        "qbfind": "Sod",
+       "qbbrowse": "Bhovndi mar",
        "qbedit": "Bodol",
-       "faq": "Choddxe vicharlole prosn",
+       "qbpageoptions": "Hem pan",
+       "qbmyoptions": "Mhoji panam",
+       "faq": "Porot porot vicharlele prosn",
+       "faqpage": "Project:Porot porot vicharlele prosn",
        "actions": "Karvaio",
-       "namespaces": "Nanv-thollam",
+       "namespaces": "Nanvthollam",
        "variants": "Dusre",
+       "navigation-heading": "Dixa-niontron suchi",
        "errorpagetitle": "Chuk",
        "returnto": "$1 hanga porot voch.",
        "tagline": "{{SITENAME}} savn",
        "search": "Sod",
        "searchbutton": "Sod",
        "go": "Pavl mar",
-       "searcharticle": "Fuddem voch",
+       "searcharticle": "Voch",
        "history": "Panacho itihas",
        "history_short": "Itihas",
-       "printableversion": "Chapp'pachi avruti",
-       "permalink": "Togpi zodd",
+       "printableversion": "Chapp'pakyogya avruti",
+       "permalink": "Togpi zoddni",
        "print": "Chap",
        "view": "Poloi",
-       "edit": "Sudar",
+       "view-foreign": "$1-hacher polloi",
+       "edit": "Bodol",
+       "edit-local": "Thollavem vornon bodol",
        "create": "Roch",
+       "create-local": "Thollavem vornon zod",
        "editthispage": "Hem pan bodol",
        "create-this-page": "Ho pan roch",
        "delete": "Vogllai",
        "personaltools": "Khasgi avtam",
        "articlepage": "Vixoi sombondhi pan poloi",
        "talk": "Bhasabhas",
-       "views": "Niall",
+       "views": "Drishya",
        "toolbox": "Avtam",
        "userpage": "Vangddiacho pan poloi",
        "imagepage": "Imazichem pan poloi",
        "viewhelppage": "Adar pan poloi",
        "categorypage": "Vorgachem pan poloi",
-       "otherlanguages": "Dusrea bhasanim",
+       "otherlanguages": "Her bhasanim",
        "redirectedfrom": "($1 savn porot dixent)",
        "redirectpagesub": "Punornirdexan pan",
+       "redirectto": "Hanga ponornirdeshit kor:",
        "lastmodifiedat": "Hem pan xevtim $1 disa, $2 vazta bodolelem.",
-       "jumpto": "Hangachean voch",
-       "jumptonavigation": "Dixa-niontronn",
+       "jumpto": "Hupun voch",
+       "jumptonavigation": "dixa-niontronn",
        "jumptosearch": "sod",
        "aboutsite": "{{SITENAME}} babtint",
        "aboutpage": "Project:Vixoiavixim",
        "copyrightpage": "{{ns:project}}:Prat-hokk",
        "currentevents": "Chalu ghoddnneo",
        "currentevents-url": "Project:Chalu ghoddneo",
-       "disclaimers": "Chotraio",
-       "disclaimerpage": "Project:Sadeo chotraio",
-       "edithelp": "Sudarunk palov",
+       "disclaimers": "Nhoikarnio",
+       "disclaimerpage": "Project:Sadeo nhoikarni",
+       "edithelp": "Bodlunk adar",
        "mainpage": "Mukhel Pan",
-       "mainpage-description": "Mukhel Pan",
+       "mainpage-description": "Mukhel pan",
        "portal": "Somudaik proves-dar",
        "portal-url": "Project:Somudaik proves-dar",
        "privacy": "Gupitaiechem dhoronn",
        "ok": "Zait",
        "retrievedfrom": "\"$1\" savn prapt kelam",
        "youhavenewmessages": "Tumkam $1 ($2) asat.",
-       "editsection": "sudar",
-       "editold": "sudar",
+       "editsection": "bodol",
+       "editold": "bodol",
        "viewsourceold": "mull poloi",
-       "editlink": "sudar",
+       "editlink": "bodol",
        "viewsourcelink": "mull polloi",
-       "editsectionhint": "khondd sudar: $1",
+       "editsectionhint": "Khond bodol: $1",
        "toc": "Suchi potr",
        "showtoc": "dakhoi",
        "hidetoc": "lipoi",
        "red-link-title": "$1 (hea nanvachem pan na)",
        "nstab-main": "Pan",
        "nstab-user": "Vapuddpeachem pan",
-       "nstab-special": "Kherit pan",
-       "nstab-project": "Project-ache pan",
+       "nstab-special": "Khaxelem pan",
+       "nstab-project": "Prokolpache pan",
        "nstab-image": "Fail",
        "nstab-mediawiki": "Sondex",
        "nstab-template": "Saacho",
        "viewsource": "Mull polloi",
        "welcomeuser": "Ievkar, $1!",
        "yourname": "Vapuddpeachem nanv:",
+       "userlogin-yourname": "Vangdiachem nanv",
+       "userlogin-yourname-ph": "Tujem 'vangdeachem nanv' boroi",
        "yourpassword": "Gupitutor:",
        "userlogin-yourpassword": "Gupitutor",
+       "userlogin-yourpassword-ph": "Tujem gupitutor boroi",
+       "createacct-yourpassword-ph": "Gupitutor boroi",
        "yourpasswordagain": "Gupit utor porot boroi:",
+       "createacct-yourpasswordagain": "Gupitutrachi khatri kor",
+       "createacct-yourpasswordagain-ph": "Gupitutor porot boroi",
        "remembermypassword": "Hea internet browseran mhojem sotrachem ugdas dovor (chodan chod $1 {{PLURAL:$1|disak|disank}})",
-       "login": "Sotrromb kor",
-       "nav-login-createaccount": "Sotrrombh kor / khato roch",
+       "userlogin-remembermypassword": "Mhojem sotr chalu dovor",
+       "login": "Sotroromb kor",
+       "nav-login-createaccount": "Sotrrombh kor / khatem roch",
        "userlogin": "Sotrrombh kor / khatem roch",
        "logout": "Bhair podd",
        "userlogout": "Sotracho xevott",
+       "userlogin-noaccount": "Tuje kode khatem na?",
+       "userlogin-joinproject": "{{SITENAME}}-hacho vangdi za",
        "nologin": "Tuje kodde khatem na? $1.",
        "nologinlink": "Novem khatem ughodd",
        "createaccount": "Khatem roch",
        "gotaccount": "Tuje kodem khatem asa? $1.",
        "gotaccountlink": "Sotrorombh kor",
        "userlogin-resetlink": "Sotrorombh korpacheo bariksai visorlai?",
+       "userlogin-resetpassword-link": "Gupitutor visorlo?",
+       "userlogin-helplink2": "Sotrorombh korunk adar",
+       "createacct-emailoptional": "Email potto (sokti na)",
+       "createacct-email-ph": "Tuzo email potto boroi",
+       "createacct-captcha": "Suraksha topasni",
+       "createacct-imgcaptcha-ph": "Voir dixta to mozkur boroi",
+       "createacct-submit": "Tujem 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}}",
        "mailmypassword": "Novem gupitutor",
        "loginlanguagelabel": "Bhas: $1",
+       "pt-login": "Sotrorombh kor",
+       "pt-login-button": "Sotrorombh kor",
+       "pt-createaccount": "Khatem roch",
+       "pt-userlogout": "Sotr xevott",
+       "passwordreset": "Novem gupitutor",
        "bold_sample": "Datt mozkur",
        "bold_tip": "Datt mozkur",
        "italic_sample": "Palso mozkur",
        "italic_tip": "Palso mozkur",
-       "link_sample": "Zoddachem nanv",
-       "link_tip": "Bhitorlem zoddop",
+       "link_sample": "Zoddnieche nanv",
+       "link_tip": "Bhitorlem zoddni",
        "extlink_sample": "http://www.udaronn.in zoddachem nanv",
        "extlink_tip": "Bhailem site (survatek http:// visronakai)",
        "headline_sample": "Mathalleacho mozkur",
        "nowiki_sample": "Sworup diunk naslelem mozkur hanga ghal",
        "nowiki_tip": "Wiki sworup durlokx kor",
        "image_tip": "Bosoileli fail",
-       "media_tip": "Failichem zodd",
+       "media_tip": "Failichi zoddni",
        "sig_tip": "Tuji soi, vell-chaap soit",
        "hr_tip": "Adhvem rang (Komi uzar kor)",
        "summary": "Sar:",
        "subject": "Vishoy:",
-       "minoredit": "Hem ek dhaktem sudarop",
+       "minoredit": "Hem ek dhaktem bodol",
        "watchthis": "Hea panar nodor dovor",
        "savearticle": "Pan samball",
        "preview": "Zholok",
        "showpreview": "Zholok dakhoi",
        "showdiff": "Bodolpam dakhoi",
-       "anoneditwarning": "'''Chotrai:''' Tuven sotrorombh korunk nai.\nTuzo internet potteachi nond panachem itihasan zatelem.",
+       "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.",
+       "loginreqlink": "sotrorombh kor",
        "newarticle": "(Novem)",
-       "newarticletext": "Tuven ek zoddache 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.",
+       "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.",
        "previewnote": "'''Hi fokot ek zholok mhonn ugddas dhor.'''\nTujim bodolpam azun sambhallun dovrunk nant!",
-       "editing": "$1 sudarop",
-       "editingsection": "(Vibhag) $1 sudar",
+       "editing": "$1 bodolta",
+       "creating": "$1 rochta",
+       "editingsection": "(Khond) $1 bodol",
        "templatesused": "Hea panant uzar {{PLURAL:$1|kel'lo sancho|kel'le sanche}}:",
        "template-protected": "(rakhlelem)",
        "template-semiprotected": "(ordhem rakhun dovorlelem)",
        "revdel-restore": "Disnnem bodol",
        "revertmerge": "Doxim kor",
        "history-title": "\"$1\" hachea uzollnnecho itihas",
+       "difference-title": "\"$1\"-chea avruttint ontor",
        "lineno": "Line ank $1:",
        "compareselectedversions": "Nivodloleo uzollneo comparar kor",
-       "editundo": "rod'd kor",
-       "searchresults": "Sodacho nikal",
+       "editundo": "kel'lem portavchem",
+       "diff-multi-sameuser": "(Heach vangdian {{PLURAL:$1|kel'lo modlo ek bodol dakhounk na|kel'le modle $1 bodlopam dakhounk nan}})",
+       "searchresults": "Sodache nikal",
        "searchresults-title": "\"$1\" -khatir sodacho nikal",
        "prevn": "adlem {{PLURAL:$1|$1}}",
        "nextn": "fuddlem {{PLURAL:$1|$1}}",
        "prevn-title": "{{PLURAL:$1|Fattlem $1 porinnam|Fattlem $1 porinam}}",
        "nextn-title": "{{PLURAL:$1|Fuddlem $1 porinnam|Fudnlim $1 porinnam}}",
-       "shown-title": "Dor panar {{PLURAL:$1|porinam|porinam}} dakhoi",
+       "shown-title": "Dor eka panar {{PLURAL:$1|porinam}} dakhoi",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) poloi",
        "searchmenu-exists": "'''Hea Wikicher \"[[:$1]]\" nanvanche pan asa.'''",
        "searchmenu-new": "<strong>\"[[:$1]]\" hem pan hea vikint roch!<strong> {{PLURAL:$2|0=|Tujea sodan mellelem panui polloi.|Tujea sodan mellelem panamui polloi.}}",
        "searchprofile-advanced": "Sodpache poryay",
        "searchprofile-articles-tooltip": "$1 hantunt sod",
        "searchprofile-images-tooltip": "Faili sod",
-       "searchprofile-everything-tooltip": "Akhea sitin sod (Bhasabhas panant'ui)",
-       "searchprofile-advanced-tooltip": "chalu nanvthollancher sod",
+       "searchprofile-everything-tooltip": "Akhea saitin sod (Bhasabhas panant'ui)",
+       "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-section": "(vibhag $1)",
-       "search-suggest": "mhonnunk sodi: $1",
+       "search-suggest": "Tu mhonnunk sodi: $1 ?",
        "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.",
        "preferences": "Posondeo",
        "mypreferences": "Posonti",
        "prefs-help-email": "Email potto sokticho na, pun tum gupitutor visroxi zalear gupitutor punorsthapon korunk email pottechi goroz podta.",
        "prefs-help-email-others": "Tujean dusreank tujea vapurpeacho panar vo bhasabhasache panar aslele eke email zodde vorvim tuje xim sompork korunk diunk zata.\nDusre tuje xim sompork kortat tednam tuzo email potto tankam kollchenam.",
        "group-all": "(soglle)",
+       "right-writeapi": "Borovpeache API-cho upeog",
        "newuserlogpage": "Vapurpi rochnnechem sotr",
        "action-edit": "hem pan sudar",
        "nchanges": "$1 {{PLURAL:$1|bodlop|bodlopam}}",
-       "recentchanges": "Halincho bodol",
-       "recentchanges-legend": "Hallinch zalleo bodlopancheo poryay",
+       "enhancedrc-history": "itihas",
+       "recentchanges": "Halinche bodol",
+       "recentchanges-legend": "Hallinch zalleo bodolancheo poryay",
+       "recentchanges-summary": "Hea wikicher halinch zal'le bodolancher nodor dovor.",
        "recentchanges-feed-description": "Wiki'k kel'le halinche bodlopancher hea vhawa vorvim nodor dovor.",
-       "recentchanges-label-newpage": "Hea sudaran ek novem pan rochlam",
-       "recentchanges-label-minor": "Ho ek dhaktto sudar",
-       "recentchanges-label-bot": "Hem bodlop eka robotan kel'lem",
+       "recentchanges-label-newpage": "Hea bodolan ek novem pan rochlam",
+       "recentchanges-label-minor": "Ho ek dhaktto bodol",
+       "recentchanges-label-bot": "Hem bodol eka robotan kel'lem",
        "recentchanges-label-unpatrolled": "Hem sudharop azun topasunk nam",
-       "rcnotefrom": "Sokoil <strong>$2<strong> savn zalelim bodolpam dileant ( <strong>$1<strong> meren dakhoileant).",
+       "recentchanges-label-plusminus": "Hea panacho akar itlea baitani bodol'lo",
+       "recentchanges-legend-heading": "\"Kunji:\"",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|nove pananchi suchi]]-ui polloi)",
+       "rcnotefrom": "Sokoil <strong>$3, $4<strong> savnsavn {{PLURAL:$5|zalelem bodlop dilam|zalelim bodolpam dileant}} (<strong>$1<strong> meren {{PLURAL:$5|dakhoilam|dakhoileant}}).",
        "rclistfrom": "$3 $2 savn suru zatelim novim bodolpam dakhoi",
-       "rcshowhideminor": "$1 dhaktteo sudarnneo",
+       "rcshowhideminor": "$1 dhaktteo bodlopam",
+       "rcshowhideminor-show": "Dakhoi",
+       "rcshowhideminor-hide": "Lipoi",
        "rcshowhidebots": "$1 robot",
+       "rcshowhidebots-show": "Dakhoi",
+       "rcshowhidebots-hide": "Lipoi",
        "rcshowhideliu": "$1 nond zalele vapuddpi",
+       "rcshowhideliu-hide": "Lipoi",
        "rcshowhideanons": "$1 nanv-naslelim vapurpi",
+       "rcshowhideanons-show": "Dakhoi",
+       "rcshowhideanons-hide": "Lipoi",
        "rcshowhidepatr": "$1 topaslele sudharop",
-       "rcshowhidemine": "Mhojem sudarop $1",
+       "rcshowhidemine": "Mhojeo bodlopam $1",
+       "rcshowhidemine-show": "Dakhoi",
+       "rcshowhidemine-hide": "Lipoi",
        "rclinks": "Xevtiche $2 disanim zal'le $1 bodlopam dakhoi<br />$3",
        "diff": "frk",
        "hist": "iti",
        "minoreditletter": "d",
        "newpageletter": "N",
        "boteditletter": "r",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|byti}} bodol kel'lea uprant",
        "rc-enhanced-expand": "Bariksann dakhoi",
        "rc-enhanced-hide": "Bariksann lipoi",
        "recentchangeslinked": "Sombondit bodolpam",
-       "recentchangeslinked-toolbox": "Sombondit bodolpam",
-       "recentchangeslinked-title": "\"$1\" sombondit zalelim bodolpam",
-       "recentchangeslinked-summary": "Hem zaun asa eke panaksun vo eka voraksun, halinch kel'lim bodlopanchi suchi.\n\n[[Special:Watchlist|Tujea sadurvollerint]] aslelim panam 'datt' asat.",
+       "recentchangeslinked-toolbox": "Sombondit bodlopam",
+       "recentchangeslinked-title": "\"$1\"che sombondit bodolpam",
+       "recentchangeslinked-summary": "Hem zaun asa eke panaksun vo eka vorgaksun, halinch kel'lim bodolanchi suchi.\n\n[[Special:Watchlist|Tujea sadurvollerint]] aslelim panam 'datt' asat.",
        "recentchangeslinked-page": "Panache nanv:",
        "recentchangeslinked-to": "Dil'em panache bodlek haka zodlelem panank kel'lim bodlopam dakhoi",
        "upload": "Fail upload kor",
        "watchthisupload": "Hea faylar dixtt dovor",
        "license": "Porvangi",
        "license-header": "Porvangi",
+       "imgfile": "fail",
        "file-anchor-link": "Fail",
        "filehist": "Failicho itihas",
-       "filehist-help": " Tea vellar aslelea rupan pollonvk tarikh/vellar koll mar",
+       "filehist-help": "Tea vellar aslelea rupan pollonvk tarikh/vellar click kor",
        "filehist-revert": "Nimanea avruttik porot vor",
        "filehist-current": "chalont",
        "filehist-datetime": "Tarikh/Vell",
        "filehist-thumb": "Lhan-imaz",
-       "filehist-thumbtext": "$1 avrute khatir lhan-imaz",
-       "filehist-user": "Vaporpi",
+       "filehist-thumbtext": "$1chi avrutti khatir lhan-imaz",
+       "filehist-user": "Vapurpi",
        "filehist-dimensions": "Akar",
        "filehist-comment": "vivek",
        "imagelinks": "Failicho vapor",
        "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hea failik {{PLURAL:$1|zoddtta|zoddttat}}",
        "nolinkstoimage": "Hea failik zoddpi panam nant",
        "sharedupload-desc-here": "Hi fail $1, hachi ani dusreo projectanim haka uzar korunk zata.\nHachem [$2 failichem vivron panan] asleli vivron khala dilea:",
+       "upload-disallowed-here": "Tu hea faili voir borounk xokonai",
        "filedelete-otherreason": "Dusrem/aniki karon:",
-       "randompage": "Khoincheim pan",
+       "randompage": "Khoincheim adlem modlem pan",
        "statistics": "Ankddevari",
        "nbytes": "$1 {{PLURAL:$1|byte|bytesi}}",
        "nmembers": "$1 {{PLURAL:$1|vangddi}}",
        "pager-older-n": "{{PLURAL:$1|adlem 1|adlim $1}}",
        "booksources": "Pustokachem mull",
        "booksources-search-legend": "Pustokachim mullam sod",
+       "booksources-search": "Sod",
        "speciallogtitlelabel": "Vishoi vo vapurpi:",
        "log": "Sotram",
        "allpages": "Sogllim panam",
        "prevpage": "Ad'dlem pan ($1)",
        "allpagesfrom": "Hanga thavn suru zatelea panank dakhoi:",
        "allarticles": "Sogllim panam",
-       "allpagessubmit": "Fuddem voch",
+       "allpagessubmit": "Voch",
        "categories": "Vorg",
        "linksearch-line": "$1 $2 savn zoddlelem asa",
        "listgrouprights-members": "(vapuddpeanchi suchi)",
        "watchlist": "Sadurachi volleri",
        "mywatchlist": "Sadurachi volleri",
        "watchlistfor2": "$1 hache khatir $2",
-       "watch": "Sadur rav",
+       "watch": "Nodor dovor",
        "watchthispage": "Hea panar dixtt dovor",
        "unwatch": "Nodor kadd",
        "watchlist-details": "Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam veglim mezonastanam.",
        "dellogpage": "Vogllaoneche sotr",
        "deleteotherreason": "Dusrem/aniki karon:",
        "rollbacklink": "kovoll",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|bodol|bodlopam}} kovoll",
        "protectlogpage": "Surokxitechem sotr",
        "protectedarticle": "rakhlelem \"[[$1]]\"",
        "protect-otherreason": "Dusrem/aniki karon:",
        "undeleteviewlink": "polloi",
        "namespace": "Nanv-tholl",
        "invert": "Nonddni urfattoi",
+       "tooltip-invert": "Vinchlele nanvtholla (ani khunnailam zalear sombondhit nanvtholla) bhitorlea pananim kel'le bodlopam lipounk hem boks khunnai",
+       "namespace_association": "Sombondhit nanvtholl",
+       "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai",
        "blanknamespace": "(Mukhel)",
-       "contributions": "{{GENDER:$1|Vapuddpi}} borovpam",
+       "contributions": "{{GENDER:$1|Vapuddpi}} yogdanam",
        "contributions-title": "$1 hea vapuddpean kelelim borovpam",
        "mycontris": "Borovpam",
        "contribsub2": "{{GENDER:$3|$1}} hacheo ($2)",
        "whatlinkshere": "Hanga kitem zoddta",
        "whatlinkshere-title": "\"$1\" haka zoddlelim panam",
        "whatlinkshere-page": "Pan:",
-       "linkshere": "Sokoilim panam '''[[:$1]]''' ak zoddtat:",
+       "linkshere": "Sokoilim panam <strong>[[:$1]]</strong> ak zoddtat:",
        "nolinkshere": "Khoincheim pan '''[[:$1]]''' ak zoddna.",
        "isredirect": "Porot dixen pan dhadd",
        "istemplate": "Durasth-somaves",
        "isimage": "failichem zoddop",
        "whatlinkshere-prev": "{{PLURAL:$1|adlem|adlem $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|fuddlem|fuddlim $1}}",
-       "whatlinkshere-links": "← zoddpam",
+       "whatlinkshere-links": "← zoddnio",
        "whatlinkshere-hideredirs": "$1 porot dixen",
        "whatlinkshere-hidetrans": "$1 durasth-somaves",
-       "whatlinkshere-hidelinks": "$1 zoddpam",
+       "whatlinkshere-hidelinks": "$1 zoddnio",
        "whatlinkshere-hideimages": "Failinchim zoddpam $1",
        "whatlinkshere-filters": "Challnio",
        "ipboptions": "2 voram:2 hours,1 dis:1 day,3 dis:3 days,1 satollo:1 week,2 satolle:2 weeks,1 mhoino:1 month,3 mhoine:3 months,6 mhoine:6 months,1 voros:1 year,sasnnank:infinite",
        "blocklink": "addavnnni",
        "unblocklink": "Addavnni kadd",
        "change-blocklink": "Addavnnni bodol",
-       "contribslink": "borovp",
+       "contribslink": "yogdan",
        "blocklogpage": "addavnnechem sotr",
        "blocklogentry": "[[$1]] addailelem $2 asun vellacho ont: $3",
        "block-log-flags-nocreate": "Khatem rochop opatr kelam",
        "move-watch": "Hea panar disht dovor",
-       "movelogpage": "Sotr bodol",
+       "movepagebtn": "Pan haloi",
+       "movelogpage": "Pan halovneancho sotr",
        "movereason": "Karonn:",
        "revertmove": "porti",
        "export": "Panank niryat kor",
        "allmessagesname": "Nanv",
        "allmessagesdefault": "Falta sondex mozkur",
-       "thumbnail-more": "vaddoi",
+       "thumbnail-more": "Vhodlem kor",
        "thumbnail_error": "Lhan-imaz toiar kortana chuk zali. Karonn: $1",
        "tooltip-pt-userpage": "Tujem vapuddpachem pan",
-       "tooltip-pt-mytalk": "Tumchem ulovpachem pan",
+       "tooltip-pt-mytalk": "Tumchem bhasabhasachem pan",
        "tooltip-pt-preferences": "Tumcheo avddi",
        "tooltip-pt-watchlist": "Bodlachea dekhrekh korpachea panachi volleri",
-       "tooltip-pt-mycontris": "Tujea borovpanchi suchi",
-       "tooltip-pt-login": "Tumkam sotrrombh korunk protsavan asa; em soktichem nhoi",
-       "tooltip-pt-logout": "Sotracho xevott",
-       "tooltip-ca-talk": "Mozkurachea vixoiavoir bhasabhas",
-       "tooltip-ca-edit": "Tumchean hem pan sudarunk zata. Upkar korun sambhallche adim zholok butanv vapor",
-       "tooltip-ca-addsection": "Novo vibhag suru kor",
-       "tooltip-ca-viewsource": "Hem pan rakhun dovorlam.\nTujean tachem mull pollonv ieta",
+       "tooltip-pt-mycontris": "Tujea yogdanachi suchi",
+       "tooltip-pt-login": "Tumkam sotrormbh korunk protsavan asa; pun hem soktichem nhoi",
+       "tooltip-pt-logout": "Sotr xevott",
+       "tooltip-pt-createaccount": "Tumi khatem ugdun sotrorombh korunk protsavn asa; pun toxi sokti nam",
+       "tooltip-ca-talk": "Mozkurachea pana-vixim bhasabhas",
+       "tooltip-ca-edit": "Hem pan bodol",
+       "tooltip-ca-addsection": "Novi vibhag suru kor",
+       "tooltip-ca-viewsource": "Hem pan rakhun dovorlam.\nTujean tachem mull pollovnk ieta",
        "tooltip-ca-history": "Hea panacheo adleo uzollnneo",
        "tooltip-ca-protect": "Hem pan rakh",
        "tooltip-ca-delete": "Hem pan vogllai",
        "tooltip-ca-move": "Hem pan fuddem vhor",
        "tooltip-ca-watch": "Hem pan tujea sadurvollerint zodd",
        "tooltip-ca-unwatch": "Hem pan tumchea sadurtaievelean kadd",
-       "tooltip-search": "{{SITENAME}}  sod",
-       "tooltip-search-go": "Hea just nanvachem pan asa zalear tea panar voch",
-       "tooltip-search-fulltext": "Hea utarea khatir pana sod",
+       "tooltip-search": "{{SITENAME}}cher sod",
+       "tooltip-search-go": "Heach nanvachem pan ostitvant asa zalear thoim voch",
+       "tooltip-search-fulltext": "Hea mozkura khatir pana sod",
        "tooltip-p-logo": "Mukhel panak bhett di",
        "tooltip-n-mainpage": "Mukhel panak bhett di",
        "tooltip-n-mainpage-description": "Mukhel Panak bhett di",
        "tooltip-n-portal": "Hea prokolpa vixim, tumchean kitem korum ieta, khoim kitem sodchem",
        "tooltip-n-currentevents": "Chalu ghoddneachea fattbhuichi mahiti sod",
        "tooltip-n-recentchanges": "Wikint halinch bodol keleleachi volleri",
-       "tooltip-n-randompage": "Khoincheim ek pan uktem kor",
-       "tooltip-n-help": "sodpachem tholl",
+       "tooltip-n-randompage": "Khoincheim adlem modlem pan uktem kor",
+       "tooltip-n-help": "Sodpachem tholl",
        "tooltip-t-whatlinkshere": "Hanga zoddlelea sogllea wiki pananchi volleri",
-       "tooltip-t-recentchangeslinked": "Hea panak zoddlelea panachim halinchim bodolpam",
+       "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-emailuser": "Hea vapuddpeak email patthoi",
        "tooltip-t-upload": "Faili upload kor",
-       "tooltip-t-specialpages": "Kherit pananchi volleri",
-       "tooltip-t-print": "Hea panachem chhapunk ietelem rupantor",
-       "tooltip-t-permalink": "Hea panache uzollnnek togpi zodd",
-       "tooltip-ca-nstab-main": "Suchi pan polloi",
+       "tooltip-t-specialpages": "Sogllea khaxelim pananchi volleri",
+       "tooltip-t-print": "Hea panachem chap'pakyogya avrutti",
+       "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 sudarunk zaina",
-       "tooltip-ca-nstab-project": "Project-achem pan polloi",
+       "tooltip-ca-nstab-special": "Hem ek kherit pan, tujeam hem pan bodlunk zaina",
+       "tooltip-ca-nstab-project": "Prokolpachem pan polloi",
        "tooltip-ca-nstab-image": "Failichem pan polloi",
        "tooltip-ca-nstab-template": "Saacho polloi",
        "tooltip-ca-nstab-category": "Vorgachem pan polloi",
        "tooltip-minoredit": "Haka ek kirkoll sudharop mhunn khunnay",
        "tooltip-save": "Tujim bodolpam sambhall",
-       "tooltip-preview": "Bodlopanchi zholok polloi, upkar hem samballche adim vapor!",
+       "tooltip-preview": "Bodolanchi zholok polloi, upkar hem samballche adim vapor!",
        "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-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>",
        "pageinfo-toolboxlink": "Panachi mahiti",
-       "previousdiff": "←  Adlo sudar",
-       "nextdiff": "Fuddlem bodlop →",
-       "file-info-size": "$1 × $2 pixelam, failicho akar: $3, MIME prokar: $4",
+       "previousdiff": "←  Adlo bodol",
+       "nextdiff": "Fuddlem bodol →",
+       "file-info-size": "$1 × $2 chitrotvam, failicho akar: $3, MIME prokar: $4",
        "file-nohires": "Odhik bariksai na.",
-       "svg-long-desc": "SVG fail, nanvak $1 × $2 pixeli, failcho akar: $3",
-       "show-big-image": "Mull fail",
+       "svg-long-desc": "SVG fail, nanvak $1 × $2 chitrotvam, failcho akar: $3",
+       "show-big-image": "Mullavi fail",
+       "show-big-image-preview": "Hea dakhovnicho akar: $1",
+       "show-big-image-other": "Her {{PLURAL:$2|bariksai}}: $1.",
+       "show-big-image-size": "$1 × $2 chitrotvam",
        "bad_image_list": "Akar oso asa:\n\nFokot suchicheo vostu (*-chean suru zateleo) dheanant ghevcheo\nTech vollir, uprantli zoddnni opvad dhorpant ieta,mhonnche zoim pana failichea ek vollint asunk xoktat.",
        "metadata": "Metadata",
        "metadata-help": "Hea failin anikui mahiti asa, hi fail korunk uzar kel'le digital camera vo scanner sun tem aila zait.\nZori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khaina zait.",
        "metadata-fields": "Metadata chovkott konsollttoch, hea sondexant metadata molleantlea murtipanachea dakhovnnent aspav astolo.\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": "Obhivinyas",
+       "exif-xresolution": "Advem bariksai",
+       "exif-yresolution": "Ubem bariksai",
+       "exif-datetime": "Failichem bodolpachem tarikh ani vell",
+       "exif-make": "Camera utpadok",
+       "exif-model": "Cameracho modelacho ank",
+       "exif-software": "Vapurlelo software",
+       "exif-exifversion": "Exif-achi avrutti",
+       "exif-colorspace": "Rongacho zago",
+       "exif-datetimeoriginal": "Mahiti-nirmitichi tarikh ani vell",
+       "exif-datetimedigitized": "Fail rochpachi tarikh ani vell",
+       "exif-orientation-1": "Samanya",
        "namespacesall": "sogllem",
        "monthsall": "sogllem",
        "watchlisttools-view": "Sombondhi bodlopam polloi",
        "watchlisttools-edit": "Sadurvolleri polloi ani sudar",
        "watchlisttools-raw": "Sadurvollerichi mull-an bodol kor",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uloi]])",
        "duplicate-defaultsort": "'''Chotrai:''' Falta anukraman mukhel ''$2'' rodd korta adhlem falta anukraman mukhel ''$1'', haka.",
        "specialpages": "Khaxelim Panam",
        "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|Dospi]] challni:",
+       "tag-filter": "[[Special:Tags|Kurvechit]] challni:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
+       "logentry-delete-delete": "$1-an {{GENDER:$2|kadun udoile}} pan $3",
+       "logentry-move-move": "$1{{GENDER:$2|-an}} $3 panak $4 haloilea",
+       "logentry-newusers-create": "Vapurpeacho kont $1 {{GENDER:$2|rochlam}}",
+       "logentry-upload-upload": "$1-an $3 {{GENDER:$2|upload kela}}",
        "searchsuggest-search": "Sod"
 }
index 4403853..55a6083 100644 (file)
@@ -78,7 +78,7 @@
        "monday": "સોમવાર",
        "tuesday": "મંગળવાર",
        "wednesday": "બુધવાર",
-       "thursday": "àª\97à«\81રà«\82વાર",
+       "thursday": "àª\97à«\81રà«\81વાર",
        "friday": "શુક્રવાર",
        "saturday": "શનિવાર",
        "sun": "રવિ",
        "passwordreset": "ગુપ્ત સંજ્ઞા ફરી ગોઠવો",
        "passwordreset-text-one": "તમારો પાસવર્ડ બદલવા માટે આ ફોર્મ પૂરુ કરો.",
        "passwordreset-text-many": "{{PLURAL:$1|ઇમેલ વડે કામચલાઉ પાસવર્ડ મેળવવા માટે કોઈ એક ખાનું ભરો.}}",
-       "passwordreset-legend": "ગુપ્ત સંજ્ઞા ફરી ગોઠવો",
        "passwordreset-disabled": "આ વિકી પર ગુપ્ત સંજ્ઞા ફરી ગોઠવવા પર પ્રતિબંધ છે.",
        "passwordreset-emaildisabled": "આ વિકિ પર ઇમેઇલ સગવડ બંધ છે.",
        "passwordreset-username": "સભ્ય નામ:",
        "changeemail-submit": "ઈમેલ બદલો",
        "resettokens": "નિશાનીઓ ફરી ગોઠવો",
        "resettokens-no-tokens": "અહીં ફરી ગોઠવવા માટેનાં કોઇ ટોકન નથી",
-       "resettokens-legend": "નિશાનીઓ ફરી ગોઠવો",
        "resettokens-tokens": "નિશાનીઓ:",
        "resettokens-token-label": "$1 (હાલની કિંમત: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|તમારી ધ્યાનસૂચિના પાનામાં ફેરફાર ]]ની વેબ ફીડ (Atom/RSS) નિશાની",
        "badsig": "અવૈધ કાચી સહી\nHTML નાકું ચકાસો",
        "badsiglength": "તમારી સહી વધુ પડતી લાંબી છે.\nતે $1 {{PLURAL:$1|અક્ષર|અક્ષરો}} કરતા વધુ લાંબી ન હોવી જોઇએ.",
        "yourgender": "તમે કેવી રીતે ઓળખાવવાનું પસંદ કરો છો?",
-       "gender-unknown": "હà«\81àª\82 àªµàª¿àª\97તà«\8b àª¨ àª\86પવાનà«\81àª\82 àªªàª¸àª\82દ àª\95રà«\81àª\82 àª\9bà«\81àª\82",
+       "gender-unknown": "તમારà«\8b àª\89લà«\8dલà«\87àª\96 àª\95રતà«\80 àªµàª\96તà«\87, àª¶àª\95à«\8dય àª¹àª¶à«\87 àª¤à«\8dયાàª\82 àª¸à«\89ફà«\8dàª\9fવà«\85ર àª²àª¿àª\82àª\97 àª¤àª\9fસà«\8dથ àª¶àª¬à«\8dદà«\8bનà«\8b àªªà«\8dરયà«\8bàª\97 àª\95રશà«\87.",
        "gender-male": "તેણે વિકિ પાનાંઓમાં ફેરફાર કર્યા",
        "gender-female": "તેણીએ વિકિ પાનાંઓમાં ફેરફાર કર્યા",
        "prefs-help-gender": "આ પસંદગી ગોઠવવી વૈકલ્પિક છે.  \nસોફ્ટવેર આ વિગત આપને વ્યાકરણની રીતે લિંગ ઓળખ દ્વારા સંબોધવા માટે વાપરશે.\nઆ માહિતી જન સમુદાય માટે જાહેર હશે.",
        "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": "સભ્યપદ:",
        "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": "આ પાનું ખાલી છે.",
        "wantedtemplates": "ઇચ્છિત ઢાંચા",
        "mostlinked": "સૌથી વધુ કડીઓ દ્વારા જોડાયેલ પાનું",
        "mostlinkedcategories": "સૌથી વધુ શ્રેણીઓ દ્વારા જોડાયેલ પાનું",
-       "mostlinkedtemplates": "સૌથી વધુ જોડાયેલ પાનાંઓ",
+       "mostlinkedtemplates": "સૌથી વધુ જોડાયેલાં પાનાંઓ",
        "mostcategories": "સૌથી વધુ શ્રેણીઓ ધરાવતાં પાનાં",
        "mostimages": "સૌથી વધુ કડીઓ દ્વારા જોડાયેલી ફાઇલ",
        "mostinterwikis": "સૌથી વધુ આંતરવિકી કડીઓ ધરાવતાં પાના",
        "tooltip-pt-logout": "બહાર નીકળો",
        "tooltip-pt-createaccount": "તમને ખાતું બનાવીને પ્રવેશ કરવા માટે આમંત્રણ છે; તેમ કરવું જોકે, આવશ્યક નથી",
        "tooltip-ca-talk": "અનુક્રમણિકાનાં પાના વિષે ચર્ચા",
-       "tooltip-ca-edit": "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
+       "tooltip-ca-edit": "આ પાનામાં ફેરફાર કરો",
        "tooltip-ca-addsection": "નવો વિભાગ ઉમેરો",
-       "tooltip-ca-viewsource": "àª\86 àªªàª¾àª¨à«\81 àª¸à«\81રàª\95à«\8dષિત àª\9bà«\87.\nતમà«\87 àª¤à«\87નà«\8b àª¸à«\8dતà«\8dરà«\8bત àª\9cà«\8bàª\87 àª¶àª\95à«\8b àª\9bà«\8b",
+       "tooltip-ca-viewsource": "આ પાનુ સુરક્ષિત છે.\nતમે તેનો સ્રોત જોઇ શકો છો",
        "tooltip-ca-history": "આ પાનાનાં અગાઉનાં ફેરફારો",
        "tooltip-ca-protect": "આ પાનું સુરક્ષિત કરો",
        "tooltip-ca-unprotect": "આ પાનું રક્ષણ બદલો",
        "redirect-lookup": "જુઓ:",
        "redirect-value": "કિંમત:",
        "redirect-user": "સભ્ય નામ",
-       "redirect-page": "પાનાàª\82 ઓળખ",
+       "redirect-page": "પà«\83ષà«\8dઠ ઓળખ",
        "redirect-revision": "પાનાંની આવૃત્તિ",
        "redirect-file": "ફાઇલ નામ",
        "redirect-not-exists": "કિંમત મળી નહી",
        "logentry-delete-restore": "$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3",
        "logentry-delete-event": "$1 એ {{PLURAL:$5|લૉગ ઘટના|$5 લૉગ ઘટનાઓ}} ની દ્રશ્યતા $3 પર {{GENDER:$2|બદલેલ}} છે: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|એ}} પૃષ્ઠ $3 પરના {{PLURAL:$5|એક પુનરાવર્તન|$5 પુનરાવર્તનો}}ની દૃષ્યતા બદલી: $4",
-       "logentry-delete-event-legacy": "$1 એ $3 પર ફેરફારની દૃશ્યતા બદલી",
+       "logentry-delete-event-legacy": "$1એ $3 પર લોગ ઘટનાઓની દૃશ્યતા {{GENDER:$2|બદલી}}",
        "logentry-delete-revision-legacy": "પૃષ્ઠ $3 પરના પુનરાવર્તનોની દૃશ્યતા $1 {{GENDER:$2|એ બદલી}}",
        "logentry-suppress-delete": "$1 એ $3 પાનું {{GENDER:$2|દબાવ્યું}}",
        "logentry-suppress-event": "$1  ખાનગી રીતે {{GENDER:$2|દ્વારા માહિતીની દૃશ્યતા}} $3 : $4 પર બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}}",
        "logentry-suppress-revision": "$1 {{GENDER:$2|એ છાનામાના}} પૃષ્ઠ $3 પરના {{PLURAL:$5|એક પુનરાવર્તન|$5 પુનરાવર્તનો}}ની દૃષ્યતા બદલી: $4",
-       "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા બદલી",
+       "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા {{GENDER:$2|બદલી}}",
        "logentry-suppress-revision-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
        "revdelete-content-hid": "માહિતી છુપાવી",
        "revdelete-summary-hid": "ફેરફારનો સારાંશ છુપાવ્યો",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|સેકંડ|સેકંડો}}",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}",
-       "expand_templates_input": "àª\87નપà«\81àª\9f àª²àª\96ાણ:",
+       "expand_templates_input": "પાઠ àª\89મà«\87રણ:",
        "expand_templates_output": "પરિણામ:",
        "expand_templates_xml_output": "XML આઉટપુટ",
        "expand_templates_ok": "મંજૂર",
        "special-characters-group-devanagari": "દેવનાગરી",
        "special-characters-group-thai": "થાઈ",
        "special-characters-group-lao": "લાઓ",
-       "special-characters-group-khmer": "ખ્મેર"
+       "special-characters-group-khmer": "ખ્મેર",
+       "mw-widgets-titleinput-description-new-page": "પાનું અસ્તિત્વ ધરાવતું નથી."
 }
index 9e33fee..46b89e1 100644 (file)
@@ -5,7 +5,8 @@
                        "Kaganer",
                        "MacTire02",
                        "Shimmin Beg",
-                       "아라"
+                       "아라",
+                       "Xð"
                ]
        },
        "tog-underline": "Cur linnaghyn fo chianglaghyn:",
        "march-date": "$1 Mayrnt",
        "april-date": "$1 Averil",
        "may-date": "$1 Boaldyn",
-       "june-date": "1 Mean Souree",
+       "june-date": "$1 Mean Souree",
        "july-date": "$1 Jerrey Souree",
        "august-date": "$1 Luanistyn",
        "september-date": "$1 Mean Fouyir",
        "unusedtemplates": "Clowanyn neuymmydit",
        "unusedtemplateswlh": "kianglaghyn elley",
        "randompage": "Duillag gyn tort",
+       "randomincategory-submit": "Gow",
        "randomredirect": "Aa-enmys gyn tort",
        "statistics": "Staydraa",
        "statistics-header-users": "Staydraa ymmydeyr",
index 9989fc2..8bc83be 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|שינויים של דפים ברשימת המעקב]]",
        "yourdiff": "הבדלים",
        "copyrightwarning": "'''שימו לב:''' תרומתכם ל{{grammar:תחילית|{{SITENAME}}}} תפורסם תחת תנאי הרישיון $2 (ראו $1 לפרטים נוספים). אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, שתופץ לעיני כול, ושאחרים יוכלו להעתיק ממנה בציון המקור – אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן בזכויות יוצרים. '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''",
        "copyrightwarning2": "'''שימו לב:''' תורמים אחרים עשויים לערוך או אף להסיר את תרומתכם ל{{grammar:תחילית|{{SITENAME}}}}. אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן בזכויות יוצרים (ראו $1 לפרטים נוספים). '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''",
+       "editpage-cannot-use-custom-model": "לא ניתן לשנות את מודל התוכן של הדף הזה.",
        "longpageerror": "<strong>שגיאה: אורך הטקסט ששלחת הוא {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}, והוא ארוך יותר מהאורך המרבי של {{PLURAL:$2|קילובייט אחד|$2 קילובייטים}}.</strong>\nלא ניתן לשמור אותו.",
        "readonlywarning": "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה לא ניתן לשמור את הטקסט הערוך.'''\nבאפשרותך להעתיק ולהדביק את הטקסט לתוך קובץ טקסט ולשמור אותו למאוחר יותר.\n\nמפעיל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
        "protectedpagewarning": "'''אזהרה: דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "badsig": "חתימה מסוגננת שגויה.\nנא לבדוק את תגיות ה־HTML.",
        "badsiglength": "חתימתך ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.",
        "yourgender": "איזה תיאור מתאים לך?",
-       "gender-unknown": "×\90×\99× ×\99 ×¨×\95צ×\94 ×\9c×\95×\9eר",
+       "gender-unknown": "×\91×\90×\96×\9b×\95ר×\99×\9d ×©×\9c×\9a ×\91×\9e×\9eשק, ×\94×\9eער×\9bת ×ª×©×ª×\9eש ×\91×\9e×\99×\93ת ×\94×\90פשר ×\91×\9cש×\95×\9f ×©×\90×\99× ×\94 ×ª×\9c×\95×\99ת־×\9e×\92×\93ר",
        "gender-male": "הוא עורך דפים בוויקי",
        "gender-female": "היא עורכת דפים בוויקי",
        "prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.",
        "uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת.",
        "php-uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת ברמת PHP. אנא בדקו את ההגדרה file_uploads.",
        "uploadscripted": "הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על־ידי הדפדפן.",
-       "upload-scripted-pi-callback": "לא ניתן להעלות קובץ שמכיל את הוראת העיבוד xml-stylesheet.",
+       "upload-scripted-pi-callback": "לא ניתן להעלות קובץ שמכיל את הוראת העיבוד XML-stylesheet.",
        "uploaded-script-svg": "נמצא אלמנט שאפשר לכתוב בו תסריט \"$1\" בקובץ ה־SVG שהועלה.",
        "uploaded-hostile-svg": "נמצא CSS בלתי־מאובטח באלמנט style בקובץ ה־SVG שהועלה.",
        "uploaded-event-handler-on-svg": "אסור להגדיר מאפייני טיפול באירועים <code dir=\"ltr\">$1=\"$2\"</code> בקובצי SVG.",
        "randomincategory-nopages": "אין דפים בקטגוריה [[:Category:$1|$1]].",
        "randomincategory-category": "קטגוריה:",
        "randomincategory-legend": "דף אקראי בקטגוריה",
+       "randomincategory-submit": "הצגה",
        "randomredirect": "הפניה אקראית",
        "randomredirect-nopages": "אין הפניות במרחב השם \"$1\".",
        "statistics": "סטטיסטיקות",
        "nmembers": "{{PLURAL:$1|דף אחד|$1 דפים}}",
        "nmemberschanged": "$1 ← {{PLURAL:$2|חבר אחד|$2 חברים}}",
        "nrevisions": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
-       "nviews": "{{PLURAL:$1|צפייה אחת|$1 צפיות}}",
        "nimagelinks": "בשימוש {{PLURAL:$1|בדף אחד|ב־$1 דפים}}",
        "ntransclusions": "בשימוש {{PLURAL:$1|בדף אחד|ב־$1 דפים}}",
        "specialpage-empty": "אין תוצאות.",
        "listgrouprights-namespaceprotection-namespace": "מרחב השם",
        "listgrouprights-namespaceprotection-restrictedto": "ההרשאה או ההרשאות המאפשרות למשתמשים לערוך",
        "trackingcategories": "קטגוריות מעקב",
-       "trackingcategories-summary": "×\93×£ ×\96×\94 ×\9b×\95×\9c×\9c ×¨×©×\99×\9e×\94 ×©×\9c ×§×\98×\92×\95ר×\99×\95ת ×\9eעק×\91, ×©× ×\95צר×\95ת ×\90×\95×\98×\95×\9e×\98×\99ת ×¢×\9cÖ¾×\99×\93×\99 ×ª×\95×\9bנת ×\9e×\93×\99×\94â\80\8fâ\80\8fÖ«Ö¾×\95×\99ק×\99. × ×\99ת×\9f ×\9cשנ×\95ת ×\90ת ×©×\9e×\95ת×\99×\94×\9f ×¢×\9câ\80\8fâ\80\8fÖ«־ידי שינוי הודעות המערכת הרלוונטיות במרחב השם \"{{ns:8}}\".",
+       "trackingcategories-summary": "×\93×£ ×\96×\94 ×\9b×\95×\9c×\9c ×¨×©×\99×\9e×\94 ×©×\9c ×§×\98×\92×\95ר×\99×\95ת ×\9eעק×\91, ×©× ×\95צר×\95ת ×\90×\95×\98×\95×\9e×\98×\99ת ×¢×\9cÖ¾×\99×\93×\99 ×ª×\95×\9bנת ×\9e×\93×\99×\94â\80\8fâ\80\8fÖ¾×\95×\99ק×\99. × ×\99ת×\9f ×\9cשנ×\95ת ×\90ת ×©×\9e×\95ת×\99×\94×\9f ×¢×\9câ\80\8fâ\80\8f־ידי שינוי הודעות המערכת הרלוונטיות במרחב השם \"{{ns:8}}\".",
        "trackingcategories-msg": "קטגוריית מעקב",
        "trackingcategories-name": "שם ההודעה",
        "trackingcategories-desc": "הקריטריון להכללה בקטגוריה",
        "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-title-cantexist": "לא יכול להיות דף בשם $1.",
+       "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]]\"",
        "immobile-target-namespace-iw": "קישור בינוויקי אינו יעד תקין להעברת דף.",
        "immobile-source-page": "דף זה אינו ניתן להעברה.",
        "immobile-target-page": "לא ניתן להעביר אל כותרת יעד זו.",
-       "bad-target-model": "×\94×\99×¢×\93 ×\94×\9e×\91×\95קש ×\9eשת×\9eש ×\91ס×\95×\92 תוכן שונה. לא ניתן להמיר $1 ל{{grammar:תחילית|$2}}.",
+       "bad-target-model": "×\94×\99×¢×\93 ×\94×\9e×\91×\95קש ×\9eשת×\9eש ×\91×\9e×\95×\93×\9c תוכן שונה. לא ניתן להמיר $1 ל{{grammar:תחילית|$2}}.",
        "imagenocrossnamespace": "לא ניתן להעביר קובץ למרחב שם אחר",
        "nonfile-cannot-move-to-file": "לא ניתן להעביר דף שאינו קובץ למרחב קובץ",
        "imagetypemismatch": "סיומת הקובץ החדשה אינה מתאימה לסוג הקובץ",
        "tooltip-pt-logout": "יציאה מהחשבון",
        "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, זו אינה חובה",
        "tooltip-ca-talk": "שיחה על דף זה",
-       "tooltip-ca-edit": "×\91×\90פשר×\95ת×\9b×\9d ×\9cער×\95×\9a ×\93×£ ×\96×\94. ×\90× ×\90 ×\94שת×\9eש×\95 ×\91×\9c×\97צ×\9f \"תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94\" ×\9cפנ×\99 ×\94ש×\9e×\99ר×\94",
+       "tooltip-ca-edit": "ער×\99×\9bת ×\93×£ ×\96×\94 ×\91×\90×\9eצע×\95ת ×§×\95×\93 ×\95×\99ק×\99",
        "tooltip-ca-addsection": "הוספת פסקה חדשה",
        "tooltip-ca-viewsource": "דף זה מוגן.\nבאפשרותך לצפות בטקסט המקור שלו",
        "tooltip-ca-history": "גרסאות קודמות של דף זה",
        "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 ({{PLURAL:$2|הפניה אחת|$2 הפניות}}; {{PLURAL:$3|דף רגיל אחד|$3 דפים רגילים}})",
        "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/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], או [[{{#Special:Redirect}}/user/101]].",
        "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": "הפניה ל{{GRAMMAR:תחילית|$1}}"
 }
index 630adae..69c694f 100644 (file)
@@ -62,7 +62,8 @@
                        "Macofe",
                        "Ankita-ks",
                        "Sahilrathod",
-                       "Hindustanilanguage"
+                       "Hindustanilanguage",
+                       "राम प्रसाद जोशी"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "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) हेतु टोकन",
        "content-json-empty-array": "रिक्त ऐरे",
        "duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
-       "duplicate-args-category-desc": "पà¥\87à¤\9c à¤\9cà¥\88सà¥\87 à¤¤à¤°à¥\8dà¤\95à¥\8bà¤\82 à¤\95à¥\87 à¤¡à¥\81पà¥\8dलिà¤\95à¥\87à¤\9f à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f à¤\95à¥\89ल, à¤\9cà¥\88सà¥\87 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> à¤\93à¥\88र <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "duplicate-args-category-desc": "पà¥\87à¤\9c à¤\9cà¥\88सà¥\87 à¤¤à¤°à¥\8dà¤\95à¥\8bà¤\82 à¤\95à¥\87 à¤¡à¥\81पà¥\8dलिà¤\95à¥\87à¤\9f à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f à¤\95à¥\89ल, à¤\9cà¥\88सà¥\87 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> à¤\94र <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''चेतावनी:''' इस पृष्ठ पर बहुत अधिक संख्या में कीमती पार्सर फ़ंक्शनों का प्रयोग किया गया है।\n\nइनका प्रयोग $2 से कम बार होना चाहिये, इस समय प्रयोग $1 बार {{PLURAL:$1|है|हैं}}।",
        "expensive-parserfunction-category": "कीमती पार्सर फ़ंक्शनों का अत्यधिक प्रयोग कर रहे पृष्ठ",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचे जुड़ने की सीमा पार हो चुकी है।\nकुछ साँचे नहीं जुड़ेंगे।",
        "badsig": "गलत कच्चा हस्ताक्षर।\nHTML टैग की जाँच करें।",
        "badsiglength": "यह हस्ताक्षर बहुत बड़ा है।\nयह $1 {{PLURAL:$1|कैरैक्टर}} से अधिक का नहीं होना चाहिए।",
        "yourgender": "आप स्वयं को कैसे वर्णित करना चाहेंगे?",
-       "gender-unknown": "मà¥\88à¤\82 à¤µà¤°à¥\8dणन à¤¨à¤¹à¥\80à¤\82 à¤\95रना à¤\9aाहà¥\82à¤\81गा",
+       "gender-unknown": "à¤\86पà¤\95ा à¤µà¤°à¥\8dणन à¤\95रतà¥\87 à¤¸à¤®à¤¯, à¤\9cहाà¤\81 à¤¤à¤\95 à¤¸à¤®à¥\8dभव à¤¹à¥\8bà¤\97ा à¤¸à¥\89फ़à¥\8dà¤\9fवà¥\87यर à¤²à¤¿à¤\82à¤\97 à¤¤à¤\9fसà¥\8dथ à¤¶à¤¬à¥\8dदà¥\8bà¤\82 à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¥\87गा",
        "gender-male": "मैं सम्पादन करता हूँ।",
        "gender-female": "मैं सम्पादन करती हूँ।",
        "prefs-help-gender": "यह जानकारी देना वैकल्पिक है।\nयह सॉफ़्टवेयर में लिंग के आधार पर आपके लिए सही संबोधन हेतु प्रयुक्त होता है।\nयह जानकारी सार्वजनिक होगी।",
        "uploaded-script-svg": "अपलोड की गयी एसवीजी फ़ाइल में स्क्रीप्ट अवयव \"$1\" पाया गया।",
        "uploaded-hostile-svg": "अपलोड की गयी एसवीजी फाइल के शैली अवयव में असुरक्षित सीएसएस पायी गयी।",
        "uploaded-event-handler-on-svg": "सेटिंग ईवेंट हैंडलर (आयोजन प्रबन्धनकर्ता वरियता) <code>$1=\"$2\"</code> एसवीजी फ़ाइल में अनुमत नहीं है।",
-       "uploaded-href-attribute-svg": "गैर-स्थानीय लक्ष्य के साथ एचआरईऍफ श्रेय (Href attributes) <code>&lt;$1 $2=\"$3\"&gt;</code> (उदाहरण के लिए http://, जावास्क्रीप्ट:, इत्यादि) एसवीजी फाइल में अनुमत नहीं हैं।",
+       "uploaded-href-attribute-svg": "गैर-स्थानीय लक्ष्य के साथ एचआरईऍफ श्रेय (href attributes) <code>&lt;$1 $2=\"$3\"&gt;</code> (उदाहरण के लिए http://, जावास्क्रीप्ट:, इत्यादि) एसवीजी फाइल में अनुमत नहीं हैं।",
        "uploaded-href-unsafe-target-svg": "अपलोड की गयी फ़ाइल में असुरक्षित लक्ष्य <code>&lt;$1 $2=\"$3\"&gt;</code> पाये गए।",
        "uploaded-animate-svg": "चिप्पि \"animate\" पायी गई जिससे href परिवर्तित हो सकता है, अपलोड की गयी फ़ाइल में \"from\" विशेषता <code>&lt;$1 $2=\"$3\"&gt;</code> काम में ली जा रही है।",
        "uploadscriptednamespace": "इस एस॰वी॰जी फ़ाइल में अमान्य नामस्थान \"$1\" है।",
        "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": "{{PLURAL:$1|एक|$1}} बार देखा गया है",
        "nimagelinks": "$1 {{PLURAL:$1|पृष्ठ|पृष्ठों}} पर प्रयुक्त",
        "ntransclusions": "$1 {{PLURAL:$1|पृष्ठ|पृष्ठों}} पर प्रयुक्त",
        "specialpage-empty": "इस ब्यौरे के लिये कोई परिणाम नहीं हैं।",
        "unusedimages": "अप्रयुक्त फ़ाइलें",
        "wantedcategories": "वांछित श्रेणियाँ",
        "wantedpages": "जो पृष्ठ चाहिये",
-       "wantedpages-summary": "जिसअनुपस्थित पृष्ठों की सूचीमें उनसे जुड़े अधिकांश कड़ियाँ हैं सिवाय उन पृष्ठों के जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों। अनुपस्थित पृष्ठों की सूची के लिए जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों, देखिए [[{{#special:BrokenRedirects}}]]।",
+       "wantedpages-summary": "जिसअनुपस्थित पृष्ठों की सूचीमें उनसे जुड़े अधिकांश कड़ियाँ हैं सिवाय उन पृष्ठों के जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों। अनुपस्थित पृष्ठों की सूची के लिए जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों, [[{{#special:BrokenRedirects}}|टूटे हुये पुनर्निर्देशों की सूची]] देखें।",
        "wantedpages-badtitle": "परिणामों में अवैध शीर्षक: $1",
        "wantedfiles": "वांछित फ़ाइलें",
        "wantedfiletext-cat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी। साथ ही, जो पृष्ठ ऐसी फ़ाइलों का प्रयोग करते हैं जो मौजूद नहीं हैं, उनकी सूची [[:$1]] में है।",
        "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 17fe491..ddb95b4 100644 (file)
@@ -10,7 +10,8 @@
                        "Oxyzen",
                        "Tagimata",
                        "Taylortheturtle",
-                       "아라"
+                       "아라",
+                       "Redhotchili23"
                ]
        },
        "tog-underline": "Kuritan sa idalom ang mga tabid:",
@@ -60,7 +61,7 @@
        "sunday": "Domingo",
        "monday": "Lunes",
        "tuesday": "Martes",
-       "wednesday": "Miyerkoles",
+       "wednesday": "Miyerkules",
        "thursday": "Huebes",
        "friday": "Biyernes",
        "saturday": "Sabado",
        "june": "Hunyo",
        "july": "Hulyo",
        "august": "Agosto",
-       "september": "Septiyembre",
+       "september": "Setyembre",
        "october": "Oktubre",
-       "november": "Nobiyembre",
-       "december": "Disyimbre",
+       "november": "Nobyembre",
+       "december": "Disyembre",
        "january-gen": "Enero",
        "february-gen": "Pebrero",
        "march-gen": "Marso",
        "subcategories": "Mga Subkategorya",
        "category-media-header": "Medya sa ika-\"$1\" nga categorya",
        "category-empty": "\"Ang ini nga categorya wala sang panid ukon medya karon.\"",
-       "hidden-categories": "{{PLURAL:$1|Tago nga kategorya|Tago nga mga kategorya}}",
+       "hidden-categories": "{{PLURAL:$1|Tinago nga kategorya|Tinago nga mga kategorya}}",
        "hidden-category-category": "Nakatago nga mga categorya",
-       "category-subcat-count": "{{PLURAL:$2|Ini nga kategorya ay may sang amo lang ni nga unod sa mga nagasunod nga subkategorya.|Ini nga kategorya ay may ara nagasunod {{PLURAL:$1|subkategorya|$1 mga subkategorya}}, sa $2 kabilugan.}}",
+       "category-subcat-count": "{{PLURAL:$2|Ang ini nga kategorya may ara sing mga subkategorya nga nagakasunod.|Ang ini nga kategorya may ara sing {{PLURAL:$1|ka subkategorya}}, sa kabilugan nga $2.}}",
        "category-subcat-count-limited": "Ang ini nga categorya may yara sang masunod nga mga {{PLURAL:$1|subcategorya|$1 mga subcategorya}}.",
-       "category-article-count": "{{PLURAL:$2|Ini nga kategorya ay may sang amo lang ni nga unod sa mga nagasunod nga pahina.|Ang mga nagasunod {{PLURAL:$1|pahina ay|$1 mga pahina ay}} sa sini nga kategroya, sa $2 kabilugan.}}",
+       "category-article-count": "{{PLURAL:$2|Ang ini nga kategorya nagakaunod lamang sing nagakasunod nga panid.|Ang mga nagakasunod nga {{PLURAL:$1|ka panid}} yara sa sini nga kategroya, sa kabilugan nga $2.}}",
        "category-article-count-limited": "Ang masunod nga {{PLURAL:$1|panid|$1 mga panid}} yara sa categorya karon.",
        "category-file-count": "{{PLURAL:$2|Ang ini nga categorya may yara lamang sang masunod nga hilera.|Ang masunod nga {{PLURAL:$1|hilera|$1 mga hilera}} yari sa sini nga categorya, halin sa kabug-osan nga $2.}}",
        "category-file-count-limited": "Ang masunod nga {{PLURAL:$1|hilera|$1 mga hilera}} ara sa categorya karon.",
-       "listingcontinuesabbrev": "cont.",
+       "listingcontinuesabbrev": "pdyn",
        "index-category": "Naka-index nga mga panid",
        "noindex-category": "Wala naka-index nga mga panid",
        "broken-file-category": "Mga panid nga may guba nga link sang hilera",
        "mypage": "Akon Panid",
        "mytalk": "Paghisayranay",
        "anontalk": "Paghisayranay sang sining IP address",
-       "navigation": "Nabigayson",
+       "navigation": "Paglayag",
        "and": "&#32;kag",
        "qbfind": "Pangita",
        "qbbrowse": "Magbasa-basa",
        "faq": "Mga masami pamangkoton",
        "faqpage": "Project:MMP",
        "actions": "Mga hulag",
-       "namespaces": "Ngalan-espasyo",
-       "variants": "Mga nagkalain-lain",
-       "navigation-heading": "Menu sang nabigasyon",
+       "namespaces": "Mga Luang-ngalan",
+       "variants": "Mga Sahi",
+       "navigation-heading": "Pililian panglayag",
        "errorpagetitle": "Sala/Eror",
        "returnto": "Balik sa $1.",
        "tagline": "Halin sa {{SITENAME}}",
        "search": "Pangita-a",
        "searchbutton": "Pangita-a",
        "go": "Lakat",
-       "searcharticle": "Lakat",
-       "history": "Pahina historya",
-       "history_short": "Saysay",
+       "searcharticle": "Kadto",
+       "history": "Maragtas sang panid",
+       "history_short": "Maragtas",
        "updatedmarker": "ginbag-o halin sang akon pinaka-ulihe nga pagbisita",
-       "printableversion": "Pang-imprinta nga bersyon",
-       "permalink": "Permanente nga tabid",
+       "printableversion": "Balalhagon nga bersiyon",
+       "permalink": "Dayon nga tabid",
        "print": "I-imprinta",
        "view": "Lantawon",
-       "edit": "Ilisan",
+       "view-foreign": "Lantawon sa $1",
+       "edit": "Liwaton",
        "create": "Himuon",
        "editthispage": "Islan ini nga pahina",
        "create-this-page": "Himuon ang ini nga panid",
        "personaltools": "Mga kinaugalingon nga galamiton",
        "articlepage": "Lantawon ang panid sang ka-undan",
        "talk": "Paghisayranay",
-       "views": "Mga talanawon",
-       "toolbox": "Mga galamiton",
+       "views": "Mga Panan-aw",
+       "toolbox": "Mga Galamiton",
        "userpage": "Lantawon ang panid sang manuggamit",
        "projectpage": "Lantawon ang panid nga ginapangapinan",
        "imagepage": "Lantawon ang panid sang hilera",
        "viewhelppage": "Lantawon ang panid sa pagbulig",
        "categorypage": "Lantawon ang panid sang categorya",
        "viewtalkpage": "Lantawon ang gina-istroyahan",
-       "otherlanguages": "Sa iban nga lenguahe",
-       "redirectedfrom": "(Gindirek liwat halin $1)",
+       "otherlanguages": "Sa iban nga pamulong",
+       "redirectedfrom": "(Nagpadulong halin sa $1)",
        "redirectpagesub": "I-direktahon ang pahina",
-       "lastmodifiedat": "Ang ini nga pahina na-islan lang sang nagligad nga $1, sa $2.",
+       "lastmodifiedat": "Ang ini nga panid nailisan sang nagligad nga $1, takna $2.",
        "viewcount": "Ang ini nga panid ginsudlan sang {{PLURAL:$1|maka-isa|ika-$1 nga beses}}.",
        "protectedpage": "Ginapangapinan nga panid",
        "jumpto": "Lumpat sa:",
-       "jumptonavigation": "nabigayson",
-       "jumptosearch": "Pangita-a",
+       "jumptonavigation": "paglayag",
+       "jumptosearch": "pangitaa",
        "view-pool-error": "Nagapangayo kami sang pasaylo kay ang mga server tuman ka loaded sa sini nga tion.\nTuman ka damo nga manuggamit ang luyag makakita sang sini nga panid.\nPalihog maghulat sang malip-ot nga tini-on bag-o magsulod sa sini nga pahina liwat.\n\n$1",
        "pool-timeout": "Pag-untat nagahulat para sa kandado",
        "pool-queuefull": "Ang pila sang linaw puno na",
        "aboutpage": "Project:Nahanungod",
        "copyright": "Ang unod nga abeylabol nga naga paidalum $1.",
        "copyrightpage": "{{ns:project}}:Kapirayts",
-       "currentevents": "Mga Hitabo Subong",
-       "currentevents-url": "Project:Nagakatabo sa karon nga tinion",
-       "disclaimers": "Diskleymer",
-       "disclaimerpage": "Project:Kabilogan nga diskleymer",
-       "edithelp": "Bulig sa pag Ilis",
-       "mainpage": "Mayor nga Panid",
-       "mainpage-description": "Mayor nga Panid",
+       "currentevents": "Mga hitabo subong",
+       "currentevents-url": "Project:Mga hitabo subong",
+       "disclaimers": "Mga Pagpahangup",
+       "disclaimerpage": "Project:Kabilugan nga pagpahangup",
+       "edithelp": "Bulig sa pagliwat",
+       "mainpage": "Puno nga Panid",
+       "mainpage-description": "Puno nga panid",
        "policy-url": "Project:Patakaran",
-       "portal": "Portal sang Banwa",
-       "portal-url": "Project:Paalagyan sang kumunidad",
-       "privacy": "Polisa sa Pribisidad",
-       "privacypage": "Project:Polisa sa Pribisidad",
+       "portal": "Ganghaan sang banwa",
+       "portal-url": "Project:Ganghaan sang banwa",
+       "privacy": "Pagsulundan sa pangkinaugalingon",
+       "privacypage": "Project:Pagsulundan sa pangkinaugalingon",
        "badaccess": "Permiso sala/eror",
        "badaccess-group0": "Indi ka mahimo nga magbuhat sang hulag nga imo ginpangayo.",
        "badaccess-groups": "Ang hulag nga imo ginpangayo para lamang sa mga manuggamit sa {{PLURAL:$2|grupo|isa sa mga grupo}}: $1.",
        "newmessageslinkplural": "{{PLURAL:$1|isa ka bag-o nga mensahe|bag-o nga mga mensahe}}",
        "newmessagesdifflinkplural": "pinaka-ulihi nga {{PLURAL:$1|pagbag-o|mga pagbag-o}}",
        "youhavenewmessagesmulti": "May mga bag-ong mensahe ka sa $1",
-       "editsection": "ilisan",
-       "editold": "ilisan",
+       "editsection": "liwaton",
+       "editold": "liwaton",
        "viewsourceold": "lantawon ang ginhalinan",
-       "editlink": "islan",
-       "viewsourcelink": "tan-awon ang ginhalinan",
-       "editsectionhint": "Islan ining bahin: $1",
-       "toc": "Kontents",
+       "editlink": "liwaton",
+       "viewsourcelink": "lantawon ang ginhalinan",
+       "editsectionhint": "Liwaton ining bahin: $1",
+       "toc": "Kaundan",
        "showtoc": "ipakita",
        "hidetoc": "pagatagu-on",
        "collapsible-collapse": "Pagamayon",
        "site-atom-feed": "$1 Atom Feed",
        "page-rss-feed": "\"$1\" RSS Feed",
        "page-atom-feed": "\"$1\" Atom Feed",
-       "red-link-title": "$1 (wala pa ini nahimo nga pahina)",
+       "red-link-title": "$1 (wala pa nahimo ining panid)",
        "sort-descending": "Himuson nga nagapanaog",
        "sort-ascending": "Himuson nga nagapasaka",
-       "nstab-main": "Pahina",
+       "nstab-main": "Panid",
        "nstab-user": "Panid sang Manog-gamit",
        "nstab-media": "Panid sang medya",
-       "nstab-special": "Espesyal nga pahina",
+       "nstab-special": "Pinasahi nga mga panid",
        "nstab-project": "Pahina sang proyekto",
-       "nstab-image": "File",
+       "nstab-image": "Tangkas",
        "nstab-mediawiki": "Mensahe",
        "nstab-template": "Templeyt",
        "nstab-help": "Panid sang pagbulig",
        "cannotdelete": "Ang panid ukon hilera nga \"$1\" indi mahimo nga pagapanason.\nMahimo nga napanas na ini sang iban.",
        "cannotdelete-title": "Indi mahimo nga dulaon ang panid nga \"$1\"",
        "delete-hook-aborted": "Ang pag-ilis gin-untat sang taga.\nWala ini naghatag sang ano man nga eksplenasyon.",
-       "badtitle": "Malain nga titulo",
+       "badtitle": "Malain nga panig-ulo",
        "badtitletext": "Ang ginapangayo mo nga titulo ka pahina ay sala, blangko, ukon indi ensakto ang pagtabid sang inter-lengwahe o inter-wiki na titulo.\nSiguro may-ara ini sang isa ukon madamo nga karakter nga indi ginabaton kag ginagamit sa titulo.",
        "perfcached": "Ang masunod nga datos nakatago lamang kag mahimo nga indi bag-o. May maksimum nga {{PLURAL:$1|isa ka resulta nga|$1 mga resulta nga}} ara sa nakatago nga datos.",
        "perfcachedts": "Ang masunod nga datos nakatago lamang, kag pinaka-ulihe nga ginbag-o sang $1. May maksimum nga {{PLURAL:$4|isa ka resulta nga|$4 mga resulta nga}} ara sa nakatago nga datos.",
        "welcomeuser": "Malipayon nga pag-abot. $1!",
        "welcomecreation-msg": "Nahimo na ang imo nga account.\nIndi pagkalimtan ang pag-ilis sa imo nga [[Special:Preferences|{{SITENAME}} pagpasulabi]].",
        "yourname": "Ngalan sang Manog-gamit:",
+       "userlogin-yourname": "Ngalan-taggamit",
+       "userlogin-yourname-ph": "Ipasulod ang imo nga ngalan-taggamit",
        "yourpassword": "Kontra-senyas:",
        "yourpasswordagain": "Suliton ang kontra-senyas:",
        "remembermypassword": "Dumdumon ang akon pagsulod sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})",
        "gotaccount": "May yara ka na sang akawnt? $1.",
        "gotaccountlink": "Mag sulod",
        "userlogin-resetlink": "Nalipatan mo bala ang mga detalye sang imo pagsulod?",
+       "userlogin-createanother": "Maghimo sing panibag-o nga account",
        "createaccountmail": "Paagi sa e-mail",
        "createaccountreason": "Rason:",
+       "createacct-submit": "Maghimo sing imo account",
+       "createacct-another-submit": "Maghimo sing panibag-o nga account",
        "badretype": "Ang mga pasword nga imo gintum-ok wala naga-santo.",
        "userexists": "Ang gamit-pangalan nga imo ginbutang ginagamit na.\nPalihog magpili sang lain nga pangalan.",
        "loginerror": "May sala sa pagsulod",
        "cannotchangeemail": "Ang mga e-mail adres indi mahimo nga ilisan sa sini nga wiki.",
        "emaildisabled": "Ang ini nga lugar indi makapadala sang mga e-mail.",
        "accountcreated": "Nahimo na ang akawnt",
-       "accountcreatedtext": "Ang akawnt sang manug-gamit nga $1 nahimo na.",
+       "accountcreatedtext": "Ang account sang taggamit para kay [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) nahimo na.",
        "createaccount-title": "Pagbuhat sang akawnt para sa {{SITENAME}}",
        "createaccount-text": "May naghimo na sang akawnt para sa imo e-mail adres sa {{SITENAME}} ($4), nakapangalan nga \"$2\", nga may pasword nga \"$3\".\nDapat ka na magsulod kag islan ang imo pasword subong.\n\nMahimo nga imo pabayaan ang ini nga mensahe, kon ang ini nga akawnt sala lang ang paghimo.",
        "login-throttled": "May tuman ka na na kadamo nga pagtilaw sa pagsulod.\nPalihog maghulat anay bag-o tilawan liwat.",
        "login-abort-generic": "Ang imo pagsulod indi madinalag-on - Gin-untat",
        "loginlanguagelabel": "Hambalanon: $1",
        "suspicious-userlogout": "Ang imo pagpangabay nga mag-guha ginpungga bangud nga ini mahimo nga ginpadala sang guba nga brawser ukon sang proksy nga nagapang-tago.",
+       "pt-login": "Magsulod",
+       "pt-createaccount": "Maghimo sing akawnt",
+       "pt-userlogout": "Magguwa",
        "php-mail-error-unknown": "Wala nahibaluan nga sala sa kapuslanan nga sulat() sang PHP.",
        "user-mail-no-addy": "Gintilawan nga magpadala sang e-mail biskan wala sang e-mail adres.",
        "user-mail-no-body": "Nakatilaw magpadala sang email nga waay unod ukon malip-ot katama ang unod sang mensahe.",
        "resetpass-wrong-oldpass": "Sala nga temporaryo ukon subong nga pasword.\nMahimo nga madinalag-on mo nga nga gin-ilisan ang imo pasword ukon nagpangabay ka na sang bag-o nga temporaryo nga pasword.",
        "resetpass-temp-password": "Temporaryo nga pasword:",
        "passwordreset": "Liwaton ang pasword",
-       "passwordreset-legend": "Liwaton ang pasword",
        "passwordreset-disabled": "Ang mga pagliwat sang pasword gin-untat sa sini nga wiki.",
        "passwordreset-username": "Ngalan sang Manog-gamit\"",
        "passwordreset-domain": "Domeyn:",
        "bold_tip": "Dukot nga teksto",
        "italic_sample": "Gahilay nga teksto",
        "italic_tip": "Gahilay nga teksto",
-       "link_sample": "Titulo na Tabid",
+       "link_sample": "Panig-ulo sang tabid",
        "link_tip": "Sulodlon nga tabid",
-       "extlink_sample": "http://www.example.com titulo tabid",
+       "extlink_sample": "http://www.example.com panig-ulo sang tabid",
        "extlink_tip": "Sa guha nga Tabid (tandaan http:// prefiks)",
        "headline_sample": "Teksto sang pangunang-dinalang",
        "headline_tip": "Lebel 2 pangunang-dinalan",
        "hr_tip": "Gapahigda nga linya (gamiton laka lang)",
        "summary": "Kabilogan:",
        "subject": "Ginatukoy/Pangulong-dinalang:",
-       "minoredit": "Ini menor nga pag-ilis",
+       "minoredit": "Diutay lang ini nga pagliwat",
        "watchthis": "Bantayan ining panid",
-       "savearticle": "Tiponon ining panid",
+       "savearticle": "Pitaka ining panid",
        "preview": "Ipakita subong",
        "showpreview": "Ipakita nga daan",
-       "showdiff": "Ipakita ang inislan",
-       "anoneditwarning": "'''Pa-andam:''' Wala ka pa nakasulod.\nIgasulat ang imo IP adres sa historya sini nga inislan na pahina.",
+       "showdiff": "Ipakita ang gin-ilisan",
+       "blankarticle": "<strong>Pahibalo:</strong> Ang panid nga imo ginahimo wala sing unod. Kon imo tum-ukon liwat ang \"{{int:savearticle}}\", ang panid pagahimuon nga wala sing unod.",
+       "anoneditwarning": "<strong>Pahibalo:</strong> Wala ka nakasulod. Kitaon sa publiko ang imo nga IP address kon ikaw maghimo sang pagbaylo. Kon ikaw <strong>[$ magsulod]</strong> ukon <strong>[$ maghimo sing account]</strong>, ang imo mga ginhimo nga pagbaylo ipahanungod sa imo nga username, kaupod sang iban pa nga kapuslanan.",
        "anonpreviewwarning": "''Wala ka pa nakasulod. Igasulat ang imo IP adres sa historya sini nga inislan na pahina.''",
        "missingsummary": "'''Pahanumdom:''' Wala ka naghatag sang malip-ot nga pagsaysay sang imo gin-ilisan.\nKon tum-okon mo liwat ang \"{{int:savearticle}}\", ang imo gin-ilisan pagatiponon nga wala sini.",
        "missingcommenttext": "Palihog butangi sang komento sa idalom.",
        "nosuchsectiontitle": "Indi makit-an ang seksyon",
        "nosuchsectiontext": "Gintilawan mo nga mag-ilis sang seksyon nga wala naga-eksister.\nMahimo nga ini ginsaylo na ukon ginpanas samtang nagalantaw ka sang panid.",
        "loginreqtitle": "Kinahanglan magsulod",
-       "loginreqlink": "mag sulod",
+       "loginreqlink": "magsulod",
        "loginreqpagetext": "Kinahanglan mo nga mag-$1 agod nga makita ang iban nga mga panid.",
        "accmailtitle": "Napadala na ang pasword.",
        "accmailtext": "May pasword nga wala ginpilian nga ginhimo para kay [[User talk:$1|$1]] nga ginpadala sa $2.\n\nAng pasword para sa sini nga bag-o nga akawnt mahimo ma-ilisan sa ''[[Special:ChangePassword|ilisan ang pasword]]'' nga panid pagkatapos magsulod.",
        "newarticle": "(Bag-o)",
-       "newarticletext": "Nagbukas ka sang isa ka tabid pakadto sa isa ka pahina nga wala pa nahimo.\nPara maghimo sang sina na pahina, sugod ka lang sa pagtayp sa sulod sang kahon nga makit an mo sa idalum (tan-awa ang [$1 bulig nga pahina] para sa dugang nga impormasyon).\nPero kung nakasulod nga aksidente lamang, palihog lang i-klik sa imo internet nga may ngalan ukon simbolo nga '''back''' button.",
+       "newarticletext": "Nagbukas ka sang isa ka tabid padulong sa isa ka panid nga wala pa nahimo.\nAgud mahimo ang panid, magsugod ka lang sa pagsulat sa sulod sang kahon nga makit-an mo sa idalum (tan-awa ang [$1 bulig nga pahina] para sa dugang nga ihibalo).\nUgaling kon ikaw nagtalang lamang diri, palihog lang tum-uka ang pityong nga <strong>balik</strong> sa imo nga palalayagan.",
        "anontalkpagetext": "----''Ini ang panid para sa pagtalakay sa wala makilala-an nga manuggamit nga wala pa nakatuga sang akawnt, ukon wala nagagamit sang isa.\nAmo nga kinahanglan naton mag-gamit sang IP adres nga de numero agod nga mahibaluan naton siya.\nAng amo sini nga adres sang IP mahimo nga pagasaluhan sang madamo nga manuggamit.\nKon ikaw manuggamit nga wala makilal-i kag nabatyagan mo nga may mga komento nga wala man sing labot nga ginapakadto sa imo, palihog [[Special:UserLogin/signup|maghimo ka sang akawnt]] ukon [[Special:UserLogin|magsulod]] para malikawan ang iban pa nga pagsala sa iban pa nga wala makilal-an nga manuggamit.''",
-       "noarticletext": "Wala subong sang teksto ang ini nga pahina.\nPwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga pahina]] sa iban man nga pahina,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} islan ini nga pahina]</span>.",
-       "noarticletext-nopermission": "Wala subong sang teksto ang sini nga panid.\nPwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga panid]] sa iban man nga panid,\nukon <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs]</span>.",
+       "noarticletext": "Wala unod ining panid.\nSarang ka [[Special:Search/{{PAGENAME}}|magpangita sining panig-ulo]] sa iban nga mga panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pangitaa sa nagakaangot nga pagkitan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} ilisan ining panid]</span>.",
+       "noarticletext-nopermission": "Wala unod ining panid.\nSarang ka mag-[[Special:Search/{{PAGENAME}}|pangitaa ang ini nga panig-ulo]] sa iban nga mga panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pangitaa sa nagakaangot nga pagkitan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} ilisan ining panid]</span>, ugaling wala ka ginapahanugutan nga maghimo sining panid.",
        "missing-revision": "Ang ini nga pag-ilis nga #$1 sang panid nga ginhinanglan nga \"{{FULLPAGENAME}}\" wala naga-eksister.\n\nIni kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang hisayranay sa isa ka panid nga gindula na.\nAng mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist": "Ang akawnt sang manuggamit nga \"<nowiki>$1</nowiki>\" wala pa marehistro.\nPalihog tsek kon luyag mo nga himuon/ilisan ang ini nga panid.",
        "userpage-userdoesnotexist-view": "Ang akawnt sang manuggamit nga \"$1\" wala pa marehistro.",
        "session_fail_preview_html": "'''Nagapangayo kami sang pasaylo! Indi namon ma-proseso ang imo pag-ilis tungod sang pagkadula sang datos sang sesyon.'''\n\n''Kay ang {{SITENAME}} may ara sang hilaw nga HTML nga ginapasugtan, ang pagtan-aw gintago bilang pagpanghanda batok sa mga pag-atake sang JavaScript.''\n\n'''Kon ini lehitimo nga paghimakas, palihog tilawi liwat.'''\nKon indi man sa gihapon mag-gana, tilawi  [[Special:UserLogout|mag-guha]] kag magsulod liwat dayon.",
        "token_suffix_mismatch": "'''Ang imo pag-ilis wala ginbaton tungod nga ang imo kleyente nag-guba sang mga letra sa token sang pag-ilis.'''\nAng pag-ilis wala ginbaton agod to nga malikawan ang kalainan sang mga teksto sa panid.\nIni nagakatabo kon kaisa kon nagagamit ka sang nakabase sa web nga serbisyo proxy nga madamo sing lusot.",
        "edit_form_incomplete": "'''Ang iban nga bahin sang formas sa pag-ilis wala nakalab-ot sa serber; palihog verificar kon ang imo pag-ilis santo man sa gihapon kag tilawi liwat.'''",
-       "editing": "Gina-islan $1",
+       "editing": "Ginaliwat ang $1",
        "creating": "Ginabuhat ang $1",
-       "editingsection": "Gina-Islan $1 (seksiyon)",
+       "editingsection": "Ginaliwat ang $1 (bahin)",
        "editingcomment": "Gina-islan ang $1 (bag-o nga bahin)",
        "editconflict": "May pagpamatok sa pag-ilis: $1",
        "explainconflict": "May yara sang iban nga nag-ilis sang sini nga panid umpisa nga imo ini gin-ilisan.\nAng lugar sang ibabaw nga teksto may yara sang teksto sang panid kon ano ini karon naga-eksister.\nAng imo mga pagbag-o ginapakita sa may lugar sang idalom nga teksto.\nMahimo nga kinahanglan mo pa nga tabidon ang imo mga pagbag-o sa mga naga-eksiter nga nga teksto.\nAng mga teksto '''lamang''' nga yara sa lugar sang ibabaw nga teksto ang matipon kon imo pagatum-ukon ang \"{{int:savearticle}}\".",
        "edit-gone-missing": "Indi mabag-o ang panid.\nIni nagapakita nga gindula na.",
        "edit-conflict": "May pagpamatok sa pag-ilis.",
        "edit-no-change": "Ang imo pag-ilis ginpabayaan lamang, kay wala sang pagbag-o nga natabo sa teksto.",
+       "postedit-confirmation-created": "Nahimo na ang panid.",
        "edit-already-exists": "Indi mahimo ang bag-o nga panid.\nNaga-eksister na ini.",
        "defaultmessagetext": "Teksto sang mensahe nga wala pa ma-ilisan",
        "content-failed-to-parse": "Di matuman ang pag-parse $2 nga unod para sa $1 nga modelo: $3",
        "nohistory": "Wala sang kasaysayan sang pag-ilis sang sini nga panid.",
        "currentrev": "Mga Inislan Subong",
        "currentrev-asof": "Bag-o nga rebisyon sang $1",
-       "revisionasof": "Ang Pagliwat sang $1",
+       "revisionasof": "Ginliwat sang $1",
        "revision-info": "Ang pag-ilis ni $1 halin sang $2",
-       "previousrevision": "← Daan nga rebisyon",
+       "previousrevision": "← Daan nga pagliwat",
        "nextrevision": "Mas bag-o nga rebisyon →",
        "currentrevisionlink": "Mga Inislan Subong",
-       "cur": "karon",
+       "cur": "sub",
        "next": "dason",
        "last": "ulihi",
        "page_first": "pinaka-una",
        "rev-suppressed-unhide-diff": "Ang isa sang mga pagbag-o sang sini nga diff '''ginpahugotan'''.\nMakita ang mga detalye sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log sang pagpahugot].\nMakita mo man ini sa gihapon [$1 lantawon ang ini nga diff] kon luyag mo pa magpadayon.",
        "rev-deleted-diff-view": "Ang isa sa mga pagbag-o sa sini nga diff '''ginpanas'''.\nMakita mo ini nga diff; makita ang mga detalye sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log sang pagpanas].",
        "rev-suppressed-diff-view": "Ang isa sa mga pagbag-o sa sini nga diff '''ginpahugotan'''.\nMakita mo ini nga diff; makita ang mga detalye sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log sang pagpahugot].",
-       "rev-delundel": "pakita/tagu-on",
+       "rev-delundel": "ilisan ang makita",
        "rev-showdeleted": "ipakita",
        "revisiondelete": "Panason/indi pagpanason ang mga pagbag-o",
        "revdelete-nooldid-title": "Sala nga natuyo bag-ohon",
        "difference-title": "Kinalain sang mga pagbag-o sa \"$1\"",
        "difference-title-multipage": "Kinalain sang mga panid nga \"$1\" kag \"$2\"",
        "difference-multipage": "(Kinala-in sang mga panid)",
-       "lineno": "Linya $1:",
+       "lineno": "Iras nga ika-$1:",
        "compareselectedversions": "I-kompara ang pinilian nga mga rebisyon",
        "showhideselectedversions": "Ipakita/taguon ang mga ginpili nga pagbag-o",
-       "editundo": "bawi-on ang pag ilis",
+       "editundo": "bawion ang ginbuhat",
        "diff-multi-manyusers": "({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang masobra $2 ka {{PLURAL:$2|manuggamit|mga manuggamit}} nga wala ginpakita)",
        "difference-missing-revision": "May {{PLURAL:$2|isa ka pagbag-o|$2 ka mga pagbag-o}} san sini nga kinalain ($1) ang wala makita.\n\nIni kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang isa ka panid nga gindula na.\nAng mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-       "searchresults": "Resulta sang Pagpangita",
-       "searchresults-title": "Resulta sang Pagpangita para \"$1\"",
+       "searchresults": "Bunga sang pagpangita",
+       "searchresults-title": "Bunga sang pagpangita sing \"$1\"",
        "titlematches": "Mga pareho nga titulo sang panid",
        "textmatches": "Mga pareho nga teksto sang panid",
        "notextmatches": "Wala sang pahina nga parehas teksto",
-       "prevn": "antes {{PLURAL:$1|$1}}",
-       "nextn": "dasun {{PLURAL:$1|$1}}",
+       "prevn": "nagligad nga {{PLURAL:$1|$1}}",
+       "nextn": "dason nga {{PLURAL:$1|$1}}",
        "prevn-title": "Nagligad nga $1 {{PLURAL:$1|resulta|mga resulta}}",
        "nextn-title": "Madason nga $1 {{PLURAL:$1|resulta|mga resulta}}",
-       "shown-title": "Magpakita sang $1 ka {{PLURAL:$1|resulta|mga resulta}} kada panid",
-       "viewprevnext": "Tan-awon ($1 {{int:pipe-separator}} $2) ($3)",
+       "shown-title": "Magpakita sing $1 ka {{PLURAL:$1|resulta|mga resulta}} sa tagsa ka panid",
+       "viewprevnext": "Lantawon ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''May yara sang panid nga ginhingalanan nga \"[[:$1]]\" sa sini nga wiki.'''",
-       "searchmenu-new": "'''Gintuga ang panid nga \"[[:$1]]\" sa sini nga wiki!'''",
-       "searchprofile-articles": "Mga panid sang unod",
+       "searchmenu-new": "<strong>Himua ang panid nga \"[[:$1]]\" sa ini nga wiki!</strong> {{PLURAL:$2|0=|Linglinga man ang panid nga nakit-an sa imo nga pagpanglaghap.|Linglinga man ang mga bunga-panglaghap nga nakit-an.}}",
+       "searchprofile-articles": "Mga panid sang kaundan",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tanan-tanan",
-       "searchprofile-advanced": "Mas mauna",
+       "searchprofile-advanced": "Masanyog",
        "searchprofile-articles-tooltip": "Pangitaa sa $1",
-       "searchprofile-images-tooltip": "Mangita sang mga hilera",
-       "searchprofile-everything-tooltip": "Pangitaon ang tanan nga kaundan (dala na ang mga panid sang pag-estorya)",
-       "searchprofile-advanced-tooltip": "Pangitaon sa pahungod nga espasyo sang pangalan",
-       "search-result-size": "$1 ({{PLURAL:$2|1 pulong|$2 pulong}})",
+       "searchprofile-images-tooltip": "Magpangita sang mga tangkas",
+       "searchprofile-everything-tooltip": "Pangitaon ang tanan nga kaundan (dala na ang mga panid sang paghisayranay)",
+       "searchprofile-advanced-tooltip": "Pangitaon sa napili nga luang-ngalan",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ka pulong|$2 ka pulong}})",
        "search-result-category-size": "{{PLURAL:$1|1 ka miyembro|$1 ka mga miyembro}} ({{PLURAL:$2|1 ka subcategoriya|$2 ka mga subcategoriya}}, {{PLURAL:$3|1 ka hilera|$3 ka mga hilera}})",
-       "search-redirect": "(gindirekta liwat $1)",
+       "search-redirect": "(ginpadulong halin sa $1)",
        "search-section": "(seksiyon $1)",
        "search-suggest": "Ang buot mo silingon: $1",
        "search-interwiki-caption": "Mga Utod proyekto",
        "right-bot": "Mahimo nga isa ka proseso nga awtomatiko",
        "right-nominornewtalk": "Wala nga dyutay nga pagbag-o sa mga panid sang diskusyon para makasugod sang isa ka abiso nagasiling nga may bag-ong mensahe.",
        "right-apihighlimits": "Mag-usar sang mas mataas nga limitasyon para sa mga pamangkot sa API.",
-       "right-writeapi": "Pag-usar sang ginsulat nga API",
+       "right-writeapi": "Paggamit sang API sang pagsulat",
        "right-delete": "Panason ang panid",
        "right-bigdelete": "Panason ang mga panid nga may daku nga maragtas",
        "right-deletelogentry": "Panason kag indi panason ang mga partikular nga mga log entries",
        "right-override-export-depth": "Ipagwa ang mga panid kaupod ang mga sugpon nga mga panid tubtub isa idalum nga 5.",
        "right-sendemail": "Magpadala sang email sa iban nga naga-usar",
        "right-passwordreset": "Tan-awa ang mga email sang password reset",
-       "newuserlogpage": "Naga-usar nga ginhimo log",
+       "right-managechangetags": "Maghimo kag magdula sing [[Special:Tags|mga tag]] halin sa database.",
+       "newuserlogpage": "Pagkitan sang paghimo sang taggamit",
        "newuserlogpagetext": "Ini ang isa ka log sang mga ginhimo sang naga-usar",
        "rightslog": "Karapatan sang naga-usar log",
        "rightslogtext": "Ini ang lista sang mga ginbag-o nga mga kinamatarong sang naga-usar.",
        "action-userrights-interwiki": "Bagohon ang kinamatarong sang mga naga-usar sa iban nga mga wiki.",
        "action-siteadmin": "Isira kag abrihan ang bulutangan sang mga impormasyon",
        "action-sendemail": "Magpadala sang mga email",
+       "action-managechangetags": "maghimo kag magdula sang mga tag halin sa database",
        "nchanges": "$1 {{PLURAL:$1|bag-ohon|mga ginbag-o}}",
-       "recentchanges": "Mga Bag-o nga Inislan",
-       "recentchanges-legend": "Mga pililian sa bag-o lang na himo",
-       "recentchanges-summary": "La-uton ang pina gid ka bag-o nga nahimo sa may wiki sa ini nga feed",
+       "enhancedrc-history": "maragtas",
+       "recentchanges": "Mga pinakaulihi nga gin-ilisan",
+       "recentchanges-legend": "Pililian sang pinakaulihi nga gin-ilisan",
+       "recentchanges-summary": "Tumbukon ang pinakaulihi nga pag-ilis sa wiki sa sining panid.",
        "recentchanges-feed-description": "La-uton ang pina gid ka bag-o nga nahimo sa may wiki sa ini nga feed.",
-       "recentchanges-label-newpage": "Ang sini nga pagbag-o nakahimo sang bag-o nga panid",
-       "recentchanges-label-minor": "Diotay ilis ini",
-       "recentchanges-label-bot": "Ang sini nga pagbag-o ginubra sang isa ka bot",
-       "recentchanges-label-unpatrolled": "Ang sini nga pagbag-o indi pa ginbantayan",
+       "recentchanges-label-newpage": "Ang ini nga pagliwat naghimo sang bag-o nga panid",
+       "recentchanges-label-minor": "Diutay lang ini nga pagliwat",
+       "recentchanges-label-bot": "Ang ini nga pagliwat ginbuhat sang isa ka bot",
+       "recentchanges-label-unpatrolled": "Ang ini nga pagliwat wala pa ginabantayan",
        "rcnotefrom": "Yara sa idalum ang mga guinbag-o halin '''$2''' (tubtub '''$1''' ang ginpagwa).",
        "rclistfrom": "Ipakita ang bag-o lang nahimo halin sa $3 $2",
-       "rcshowhideminor": "$1 menor nga mga inislan",
-       "rcshowhidebots": "$1 bots",
+       "rcshowhideminor": "$1 ang mga diutay nga pagliwat",
+       "rcshowhideminor-hide": "Itaguon",
+       "rcshowhidebots": "$1 mga bot",
+       "rcshowhidebots-show": "Ipakita",
        "rcshowhideliu": "$1 mga ga-usar nga naka sulod",
-       "rcshowhideanons": "$1 di nagpakilala nga mga ga-usar",
+       "rcshowhideliu-hide": "Itaguon",
+       "rcshowhideanons": "$1 ang tago nga mga taggamit",
+       "rcshowhideanons-hide": "Itaguon",
        "rcshowhidepatr": "$1 ginabantyan nga pagbag-o",
-       "rcshowhidemine": "$1 akon mga inislan",
-       "rclinks": "Ipakita ang nagligad $1 nga nabag-o lang sang $2 adlaw<br />$3",
-       "diff": "diff",
-       "hist": "hist",
+       "rcshowhidemine": "$1 ang akon mga pagliwat",
+       "rcshowhidemine-hide": "Itaguon",
+       "rclinks": "Ipakita ang ulihi nga $1 ka mga gin-ilisan sa sulod sang $2 ka adlaw<br />$3",
+       "diff": "knln",
+       "hist": "ngkltb",
        "hide": "Tago",
        "show": "Pakita",
        "minoreditletter": "m",
        "number_of_watching_users_pageview": "[$1 ginabantayan {{PLURAL:$1|naga-usar|mga naga-usar}}]",
        "rc_categories": "Limitahan ang mga kategorya (ibulag lakip sang \"|\")",
        "rc_categories_any": "Bisan ano",
-       "rc-change-size-new": "$1 {{PLURAL:$1|byte|mga bytes}} despues sang pagbag-o",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|mga byte}} pagkatapos sang pag-ilis",
        "newsectionsummary": "/* $1 */ bag-o nga seksyon",
        "rc-enhanced-expand": "Ipakita ang mga detalye",
        "rc-enhanced-hide": "Tagu-on ang mga detalye",
        "rc-old-title": "orihinal nga ginhimo bilang \"$1\"",
-       "recentchangeslinked": "May labot nga pag-ilis",
+       "recentchangeslinked": "Nagakaangot nga pag-ilis",
        "recentchangeslinked-feed": "May labot nga pag-ilis",
-       "recentchangeslinked-toolbox": "May labot nga pag-ilis",
-       "recentchangeslinked-title": "Mga ginlain nga kapareho kay \"$1\"",
-       "recentchangeslinked-summary": "Ini ang mga lista sang mga bag-o lang gid nga nahimo nga mga pahina nga gintabid halin sa gin klaro nga pahina (o mga katapo sa mga kategorya nga gin klaro).\nMga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
+       "recentchangeslinked-toolbox": "Nagakaangot nga pagbaylo",
+       "recentchangeslinked-title": "Mga pag-ilis angot sa \"$1\"",
+       "recentchangeslinked-summary": "Ini ang listahan sang mga pagpang-ilis sa mga panid nga nagatabid sa natuhoy nga panid (ukon sa mga katapu sang natuhoy nga kategorya). Makita nga <strong>dukot</strong> ang mga panid sa [[Special:Watchlist|imo balantayan]]",
        "recentchangeslinked-page": "Ngalan ka Pahina:",
        "recentchangeslinked-to": "Ipakita ang mga naglain na pahina nga gin tabid sa nahatagan nga pahina",
-       "upload": "Uplod file",
+       "upload": "Ilulan ang tangkas",
        "uploadbtn": "Karga file",
        "reuploaddesc": "Kanselahon ang pag-karga kag magbalik sa porma sang pag-karga.",
        "upload-tryagain": "Ipasa ang ginlarawan nga ginbag-o nga file",
        "file-too-large": "Ang dokumeto ginapadala mo madako gid.",
        "filename-tooshort": "Ang ngalan sang dokumento malipot gid.",
        "filetype-banned": "Ini sari ni dokumento madumili.",
+       "tmp-create-error": "Indi mahimo ang temporaryo nga file.",
        "watchthisupload": "Bantayan ining panid",
+       "upload-file-error-text": "May nahitabo nga kasayupan sa sulod sing nagtinguha nga maghimo sang temporaryo nga file sa server.",
        "license": "Pagpanglisensya",
        "license-header": "Pagpanglisensya",
-       "file-anchor-link": "File",
-       "filehist": "Historya file",
-       "filehist-help": "I-klik sa may petsa/oras para makita ang file sa ina nga oras.",
+       "file-anchor-link": "Tangkas",
+       "filehist": "Maragtas sang tangkas",
+       "filehist-help": "Tum-uka ang petsa/takna agud makita ang tangkas sang sadto nga tinion.",
        "filehist-revert": "Ibalik",
        "filehist-current": "subong",
-       "filehist-datetime": "Petsa/Oras",
+       "filehist-datetime": "Petsa/Takna",
        "filehist-thumb": "Thumbnail",
-       "filehist-thumbtext": "Thumbnail para sa bersiyon sang $1",
-       "filehist-user": "Naga-usar",
-       "filehist-dimensions": "Mga Takus",
-       "filehist-comment": "Komentar",
-       "imagelinks": "Pagusar sang file",
-       "linkstoimage": "Ang nagakasunod {{PLURAL:$1|pahina nga mga tabid|$1 mga pahina mga tabid}} sa sini nga file:",
+       "filehist-thumbtext": "Thumbnail sang bersiyon sadtong $1",
+       "filehist-user": "Taggamit",
+       "filehist-dimensions": "Tinaksan",
+       "filehist-comment": "Magpanghinun-anon",
+       "imagelinks": "Paggamit sang tangkas",
+       "linkstoimage": "Ang nagakasunod nga {{PLURAL:$1|ka panid nagatabid}} sa sini nga tangkas:",
        "nolinkstoimage": "Waay sing panid nga nakasugpon sa sini nga file.",
        "sharedupload": "Ini nga file gikan sa $1 kag pwede ma usar sang iban nga mga proyekto.",
-       "sharedupload-desc-here": "Ang sini nga file amo halin sa $1 kag pwede ini mausar sa lain nga mga proyekto. Ang ginalarawan sang iya nga [$2 panid sang paglarawan sang file] amo ang ginpagwa sa idalum.",
+       "sharedupload-desc-here": "Ang ini nga tangkas naghalin sa $1 kag basi ginagamit man sang iban nga mga proyekto. Ang paglarawan sa iya nga [$2 panid sang paglarawan sang tangkas] amo ang ginapakita sa idalum.",
        "uploadnewversion-linktext": "Uplod sang bag-o nga bersiyon sang sini nga file",
        "filedelete-submit": "Panason",
-       "randompage": "Lagpat nga Panid",
+       "randompage": "Bisan ano nga panid",
        "statistics": "Mga Statistik",
        "brokenredirects-edit": "ilisan",
        "brokenredirects-delete": "panason",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "nbytes": "$1 {{PLURAL:$1|ka byte}}",
        "nmembers": "$1 {{PLURAL:$1|membro|mga membro}}",
        "prefixindex": "Tanan nga mga pahina nga may-ara prefiks",
        "usercreated": "{{GENDER:$3|Ginhimo}} sa $1 kag $2",
-       "newpages": "Mga Bag-o nga Pahina",
+       "newpages": "Bag-o nga mga panid",
        "newpages-username": "Ngalan sang Manog-gamit:",
        "move": "Saylohon",
        "movethispage": "Saylohon ining panid",
        "allpagesfrom": "Ipakita ang mga pahina sugod sa:",
        "allpagesto": "Ipakita ang mga pahina nga nagakatapos sa:",
        "allarticles": "Tanan nga mga pahina",
-       "allpagessubmit": "Sige",
+       "allpagessubmit": "Kadto",
        "categories": "Mga kategorya",
        "linksearch": "Eksternal na mga tabid",
        "linksearch-ok": "Pangita-a",
        "restriction-level": "Ginabawalan nga lebel:",
        "restriction-edit": "Ilisan",
        "restriction-move": "Saylohon",
+       "restriction-create": "Maghimo",
+       "undeletehistory": "Kon ipahauli ang panid, ang tanan nga pagbaylo ipahauli sa maragtas.\nKon may bag-o nga panid nga may kasubong nga ngalan nga ginhimo humalin sang pagdula, ang tanan nga ginpahauli nga pagbaylo magapakita sa nahauna nga maragtas.",
        "undeletelink": "tan-aw/ginbalik",
        "undeleteviewlink": "Tan-awa",
        "undelete-search-submit": "Pangita-a",
-       "namespace": "Ngalan-espasyo:",
-       "invert": "Suli-on ang seleksiyon",
-       "blanknamespace": "(Mayor)",
+       "namespace": "Luang-ngalan:",
+       "invert": "Sulion ang ginpili",
+       "blanknamespace": "(Puno)",
        "contributions": "Mga kontribusyon sang {{GENDER:$1|naga-usar}}",
        "contributions-title": "Mga Kontribusyon sang Naga-Usar para $1",
        "mycontris": "Kontribusyon",
        "sp-contributions-username": "IP Adres ukon ngalan sang naga-user:",
        "sp-contributions-toponly": "Ipagwa lang ang mga ginbag-o nga mga ulihi nga rebisyon",
        "sp-contributions-submit": "Pangita-a",
-       "whatlinkshere": "Ang naga-tabid diri",
+       "whatlinkshere": "Ang nagatabid diri",
        "whatlinkshere-title": "Mga pahina nga naga tabid sa $1",
        "whatlinkshere-page": "Pahina:",
        "linkshere": "Ang mga sumunod nga pahina ay nagatabid sa '''[[:$1]]''':",
        "blocklist-reason": "Rason:",
        "ipblocklist-submit": "Pangita-a",
        "emailblock": "Gintapna ang e-mail",
-       "blocklink": "harang",
+       "blocklink": "lambaton",
        "unblocklink": "di pagpugong",
        "change-blocklink": "pagbag-o sang pugong",
-       "contribslink": "contribuyson",
+       "contribslink": "amot",
        "blocklogpage": "Pugong log",
        "blocklogentry": "napunggan [[$1]] nga may-ara oras nga pag-ekspayr na $2 $3",
        "unblocklogentry": "di pagpugong $1",
        "block-log-flags-nocreate": "paghimo sang akawnt ay gin untat",
+       "range_block_disabled": "Nauntat ang kasangkul sang tagdumala nga maghimo sing range blocks.",
        "lockconfirm": "Huo, gusto ko gid isirado ang bulutangan sang impormasyon.",
        "unlockconfirm": "Huo, gusto ko gid abrihon ang bulutangan sang impormasyon.",
        "lockbtn": "Isira ang bulutangan sang impormasyon.",
        "allmessages": "Mga mensahe sang sistema",
        "allmessagesname": "Ngalan",
        "allmessagesdefault": "Ang gindestino nga teksto",
-       "thumbnail-more": "Padaku-on",
+       "thumbnail-more": "Padakuon",
        "thumbnail_error": "May ara sala sa paghimo sang thumbnail: $1",
        "import-options-wrong": "Sala {{PLURAL:$2|pili|mga pagpilian}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Ang ginhatag nga gingikanan nga panid indi mabaton ang iya nga titulo.",
        "tooltip-pt-mytalk": "Ang imo pahina sang paghisayranay",
        "tooltip-pt-anontalk": "Istorya kapin sa mga pagbag-o nga ginhimo sa ip address nga ini",
        "tooltip-pt-preferences": "Akon pagpalabi",
-       "tooltip-pt-watchlist": "Ang lista sang mga pahina nga imo ginabantayan para bag-ohon",
+       "tooltip-pt-watchlist": "Listahan sang mga panid nga ginabantayan angot sa mga pag-ilis",
        "tooltip-pt-mycontris": "Lista sang imo kontribusyon",
-       "tooltip-pt-login": "Gina-abi-abi ikaw nga man magsulod paagi sa pag log-in, apang indi ini kinahanglan gid buhaton",
+       "tooltip-pt-login": "Ginaagda ikaw nga magsulod; apang, indi ini kinahanglanon gid",
        "tooltip-pt-logout": "Mag guha",
+       "tooltip-pt-createaccount": "Ginaagda ka nga maghimo sing akawnt kag magsulod; ugaling, indi ini kinahanglanon gid",
        "tooltip-ca-talk": "Paghisayranay nahanungod sini nga panid",
-       "tooltip-ca-edit": "Puede nimo islan ang unod sang sini nga panid. Palihog gamit sang preview button antes permanentehon ang gin ilisan.",
-       "tooltip-ca-addsection": "Magsugod sang bag-o nga seksiyon",
-       "tooltip-ca-viewsource": "Naprotektahan ang ini nga pahina.\nPwede mo matan-aw ang iya ginhalinan",
-       "tooltip-ca-history": "Nagligad nga rebisyon sa sini nga pahina",
+       "tooltip-ca-edit": "Sarang mo maliwat ining panid. Palihog gamita ang pityong-tika bag-o pitakon",
+       "tooltip-ca-addsection": "Magsugod sang bag-o nga bahin",
+       "tooltip-ca-viewsource": "Naprotektahan ang ini nga panid.\nSarang mo malantaw ang iya nga ginhalinan",
+       "tooltip-ca-history": "Nagligad nga pag-ilis sining panid",
        "tooltip-ca-protect": "Protektahan ini nga pahina",
        "tooltip-ca-unprotect": "Ilisan ang pagpangapin sa sini nga panid",
        "tooltip-ca-delete": "Panason ini nga pahina",
        "tooltip-ca-undelete": "Ibalik ang mga paglain nga ginhimo sa panid nga ini antes nga ini ginpanas.",
        "tooltip-ca-move": "Saylohon ining panid",
-       "tooltip-ca-watch": "I-dugang ini nga pahina sa imo listahan sang palangitaon",
+       "tooltip-ca-watch": "Idugang ining panid sa imo nga balantayan",
        "tooltip-ca-unwatch": "Kuhaon ini nga pahina sa imo lista sang ginabantayan",
-       "tooltip-search": "Pangita-a sa {{SITENAME}}",
-       "tooltip-search-go": "Lakat sa pahina upod sang ensakto nga ara na daan nga ngalan",
-       "tooltip-search-fulltext": "Pangita-on ang mga pahina para sa sini nga teksto",
-       "tooltip-p-logo": "Mayor nga Panid",
-       "tooltip-n-mainpage": "Magdu-aw sa Mayor nga Panid",
-       "tooltip-n-mainpage-description": "Bisitahon ang Mayor nga Panid",
-       "tooltip-n-portal": "Nahanungod sa poryekto, ano ang imo mahimo, di-in makatukib",
-       "tooltip-n-currentevents": "Pangita-on sa likod sang impormasyon sa bag-o lang nga nagkalatabo",
-       "tooltip-n-recentchanges": "Ang listahan sang mga bag-o inislan sa wiki.",
-       "tooltip-n-randompage": "Magbasa sang isa ka panid paagi sa lagpat",
-       "tooltip-n-help": "Ang lugar para maka tukib.",
-       "tooltip-t-whatlinkshere": "Listahan sang tanan nga panid sang wiki nga naga tabid diri",
-       "tooltip-t-recentchangeslinked": "Bag-o lang gid nahimo nga mga pahina nga gin tabid halin sa sini nga pahina",
+       "tooltip-search": "Pangitaa sa {{SITENAME}}",
+       "tooltip-search-go": "Kadto sa panid nga nagahingadlan sini kon nabuhat na",
+       "tooltip-search-fulltext": "Pangitaon ang mga panid nga nagaunod sining sulat",
+       "tooltip-p-logo": "Duawa ang puno nga panid",
+       "tooltip-n-mainpage": "Duawa ang puno nga panid",
+       "tooltip-n-mainpage-description": "Duawa ang puno nga panid",
+       "tooltip-n-portal": "Nahanungod sa proyekto, kon ano ang imo mahimo, kon diin makapangita",
+       "tooltip-n-currentevents": "Magpangita sing hinun-anon angot sa mga hitabo subong",
+       "tooltip-n-recentchanges": "Listahan sang mga pinakaulihi nga pag-ilis sa wiki",
+       "tooltip-n-randompage": "Magkarga sing bisan ano nga panid",
+       "tooltip-n-help": "Ang lugar agud makahibalo",
+       "tooltip-t-whatlinkshere": "Listahan sang tanan nga panid sang wiki nga nagatabid diri",
+       "tooltip-t-recentchangeslinked": "Mga pinakaulihi nga pag-ilis sa mga panid nga nagatabid sa ining panid",
        "tooltip-feed-rss": "RSS feed para sa ini nga pahina",
-       "tooltip-feed-atom": "Atom feed para sa ini nga pahina",
+       "tooltip-feed-atom": "Atom feed sining panid",
        "tooltip-t-contributions": "Lantawon ang listahan sang mga nakontribyut sa sini nga naga-usar",
        "tooltip-t-emailuser": "Ipadala ang e-mail sa sini nga naga-usar",
-       "tooltip-t-upload": "Mag karga mga files",
-       "tooltip-t-specialpages": "Lista sang tanan nga espesyal nga panid",
-       "tooltip-t-print": "Bersiyon nga pwede ma-printahan sa sini nga pahina",
-       "tooltip-t-permalink": "Permanente nga tabid sa sini nga rebisyon sang pahina",
-       "tooltip-ca-nstab-main": "Tan-awon ang unod sang pahina",
+       "tooltip-t-upload": "Ilulan ang mga tangkas",
+       "tooltip-t-specialpages": "Lista sang tanan nga pinasahi nga panid",
+       "tooltip-t-print": "Balalhagon nga sahi sini nga panid",
+       "tooltip-t-permalink": "Dayon nga tabid sa sining pagbaylo sang panid",
+       "tooltip-ca-nstab-main": "Lantawon ang panid sang kaundan",
        "tooltip-ca-nstab-user": "Tan-awon ang pahina sang naga-usar",
        "tooltip-ca-nstab-media": "Tan-awon ang panid sang midya.",
-       "tooltip-ca-nstab-special": "Espesyal ini nga pahina, indi mo ini ma islan sang iya kaugalingon nga pahina",
+       "tooltip-ca-nstab-special": "Pinasahi ining panid, indi mo sarang maliwat ang panid",
        "tooltip-ca-nstab-project": "Tan-awon ang pahina ka proyekto",
-       "tooltip-ca-nstab-image": "Tan-awon ang pahina sang file",
+       "tooltip-ca-nstab-image": "Lantawon ang panid sang tangkas",
        "tooltip-ca-nstab-mediawiki": "Tan-awon ang mensahe sang sistema",
        "tooltip-ca-nstab-template": "Tan-awon ang templeyt",
        "tooltip-ca-nstab-help": "Tan-awon ang panid sang bulig",
-       "tooltip-ca-nstab-category": "Tan-awon ang pahina nga kategorya",
+       "tooltip-ca-nstab-category": "Lantawon ang panid sang mga kategorya",
        "tooltip-minoredit": "Markahan ini bilang menor nga pag-ilis",
-       "tooltip-save": "Permanentehon ang imo gin islan",
+       "tooltip-save": "Pamitakon ang imo gin-ilisan",
        "tooltip-preview": "Prebyu mo anay ang imo ginbag-o, palihog gamiton mo ini antes mo i-save!",
-       "tooltip-diff": "Ipakita ang mga bag-o nga nahimo mo sa teksto",
+       "tooltip-diff": "Ipakita ang mga pag-ilis nga imo ginbuhat sa kaundan",
        "tooltip-compareselectedversions": "Lantawa ang ginalian sang duwa ka napilian nga rebisyon sa sini nga pahina",
        "tooltip-watch": "Idugang ini nga pahina sa imo lista nga ginabantayan",
        "tooltip-watchlistedit-normal-submit": "Pagpanason ang mga titulo",
        "tooltip-watchlistedit-raw-submit": "Iupdate ang listahan sang mga ginatan-aw.",
        "tooltip-recreate": "Liwat nga himuon ang panid bisan ini napanas na",
        "tooltip-upload": "Sugdan ang pagkarga",
-       "tooltip-rollback": "\"Panumbalik\" ginabalik ang (mga) na-islan sa sini nga pahina sa pinaka ulihi nga kontributor sa isa lang ka klik",
-       "tooltip-undo": "\"Indi pag-obrahon\" ginabalik ang gin-islan kag gabukas sa isaln form sa may prebyu mode.\nGapasugot sa pagdugang sang rason sa kabilugan.",
+       "tooltip-rollback": "Ang \"Panumbalik\" nagabawi sing (mga) pagliwat sa sini nga panid sang pinakaulihi nga tag-amot sa isa lang ka tum-ok",
+       "tooltip-undo": "Ang \"Bawion\" nagabawi sang ginliwat kag ginabuksan ang liliwatan nga nagatulutika. Sarang makadugang sing kabangdanan sa bilidlan.",
        "tooltip-preferences-save": "kon pagpalabi",
        "tooltip-summary": "Maghatag sing diutay nga eksplikasyon",
        "anonymous": "Indi kilala {{PLURAL:$1|tagagamit|mga tagagamit}} sang {{SITENAME}}",
        "siteuser": "Tiggamit {{SITENAME}} sang $1",
-       "previousdiff": "← Mas daan nga na-islan",
-       "nextdiff": "Mas bag-o nga gin-islan →",
-       "file-info-size": "$1 × $2 piksel, kadakuon sang file: $3, MIME type: $4",
+       "pageinfo-toolboxlink": "Pagpahantup sang panid",
+       "previousdiff": "← Labing daan nga pagliwat",
+       "nextdiff": "Labing bag-o nga pagliwat →",
+       "file-info-size": "$1 × $2 piksel, kadakuon sang tangkas: $3, sahi sang MIME: $4",
        "file-nohires": "Wala sang yara na taas nga resolusyon.",
        "svg-long-desc": "SVG file, nominalya $1 × $2 piksels, kadakuon sang file: $3",
        "show-big-image": "Kabilogan nga resolusyon",
        "ilsubmit": "Pangita-a",
        "bad_image_list": "Ang sulundan nga sulundon:\n\nAmo lang gid nga lista sang mga gamit (mga linya nga gasugod sa *)ang ginapasugtan.\nAng una nga tabid sa isa ka linya ay kilanlan naga tabid sa law-ay nga file.\nAno man nga pasunod nga tabid sa parehas nga linya ay ginasugtan bilang eksepsiyon, i.e. mga pahina nga kun diin ang file naga pasunod.",
        "metadata": "Metadata",
-       "metadata-help": "Ang ini nga file may ara dugang nga impormasyon, posible nga gindugang halin sa kamera nga digital ukon skaner para mahimo siya ukon na digitayz siya.\nKung ang ini nga file ginliwat halin sa orihinal nga porma, basi indi gina pakita ang naliwat nga file sang iban nga mga detalye.",
+       "metadata-help": "Ang ini nga tangkas may ara dugang nga hinun-anon, damlag nga gindugang halin sa kamera nga digital ukon skaner agud mahimo ukon mangin digital ini.\nKon ang ini nga tangkas ginliwat humalin sa iya orihinal kahimtangan, ti basi ang iban nga detalye wala nagapakita sang bilog nga ginliwat nga tangkas.",
        "metadata-expand": "Ipakita ang mga dugang nga detalye",
        "metadata-collapse": "Tagu-on ang mga dugang nga detalye",
-       "metadata-fields": "Ang mga imahen sang EXIF metadata fields nga nalista sa ini nga mensahe ay pagadal-on sa mga laragway nga gina pakita sa pahina kun ang metadata table ay narumpag.\nAng iban ay pagataguon sang default.\n* himo\n* modelo\n* datetimeoriginal\n* tyempo sang exposure\n* fnumber\n* isospeedratings\n* focallength\n* artista\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Ang mga metadata field sang mga dagway nga nalista sa ining mensahe igalakip sa dagay-panid sang dagway kon ang latok sang metadata maghabuyo.\nAng iban pagataguon dayon.\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-software": "Gingamit nga software",
+       "exif-exifversion": "Bersyon sang Exif",
        "exif-lightsource": "Ginghalinan sang sanag",
        "exif-flash": "Igpat",
        "exif-subjectarea": "Subject area",
        "exif-digitalzoomratio": "Antas sang digital zoom",
        "exif-focallengthin35mmfilm": "Laba sang pokus sang film nga 35 mm",
        "exif-scenecapturetype": "Tipo sang pag-kuha sang litrato",
+       "exif-orientation-1": "Normal",
        "namespacesall": "tanan",
        "monthsall": "tanan",
        "imgmultigo": "Lakat",
        "duplicate-defaultsort": "'''Abiso:''' Ang default sort key nga \"$2\" ginabag-o sang nauna nga default sort key nga \"$1\".",
        "version-specialpages": "Pinasahi nga mga panid",
        "fileduplicatesearch-submit": "Pangita-a",
-       "specialpages": "Espesyal nga mga panid",
+       "specialpages": "Pinasahi nga mga panid",
        "external_image_whitelist": " #Pabay-an lang ang ini nga linya nga amu ni<pre>\n#Ibutang ang mga piraso sang mga regular nga expressions (amo lang nga parte nga yara sa tunga sang //) sa idalum\n#Ini ibagay sa mga URLs sang mga imahen (hotlinked ukon ginsugpon) sa gwa.\n#Ang mga nagakabagay nga mga imahen ini igapagwa, kon indi ang sugpon ukon link lang sang imahen ang igapagwa.\n#Mga linya nga nagasugod sa # tratuhon bilang komento.\n#Ini indi sensitibo sa kapitalisasyon\n\n#Ibutang ang tanan nga regex fragments sa babaw sang linya. Pabay-i lang ang linya nga amu ina</pre>",
        "tag-filter": "Ginpangsala sa [[Special:Tags|marka]]:",
        "revdelete-restricted": "ginapatuman nga pagbawal sa mga administrador",
        "revdelete-unrestricted": "ginkakas nga pagbawal sa mga administrador",
        "rightsnone": "(wala)",
        "revdelete-summary": "liwaton ang kabilogan",
+       "searchsuggest-search": "Pangitaa",
        "expand_templates_preview": "Ipakita subong"
 }
index 2a1a8ac..dfafa77 100644 (file)
@@ -29,7 +29,9 @@
                        "לערי ריינהארט",
                        "아라",
                        "Macofe",
-                       "Fraxinus"
+                       "Fraxinus",
+                       "Srdjan m",
+                       "Teoo3"
                ]
        },
        "tog-underline": "Podcrtane poveznice",
        "october-date": "$1. listopada",
        "november-date": "$1. studenoga",
        "december-date": "$1. prosinca",
-       "pagecategories": "{{PLURAL:$1|Kategorija|Kategorije}}",
+       "pagecategories": "{{PLURAL:$1|Kategorija|Kategorije|Kategorija}}",
        "category_header": "Članci u kategoriji \"$1\"",
        "subcategories": "Potkategorije",
        "category-media-header": "Mediji u kategoriji \"$1\":",
        "moredotdotdot": "Više...",
        "morenotlisted": "Ovaj popis nije potpun.",
        "mypage": "Stranica",
-       "mytalk": "Moj razgovor",
+       "mytalk": "Razgovor",
        "anontalk": "Razgovor za ovu IP adresu",
        "navigation": "Orijentacija",
        "and": "&#32;i",
        "createaccount-title": "Otvaranje suradničkog računa za {{SITENAME}}",
        "createaccount-text": "Netko je stvorio suradnički račun s Vašom adresom elektronske pošte na {{SITENAME}} ($4) nazvan \"$2\", s lozinkom \"$3\". Trebali biste se prijaviti i odmah promijeniti lozinku.\n\nMožete zanemariti ovu poruku ako je suradnički račun stvoren nenamjerno.",
        "login-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
-       "login-abort-generic": "Vaša prijava bila je neuspješna - Prekinuto",
-       "login-migrated-generic": "Vaš se suradnički račun preselio, i Vaše suradničko ime više ne postoji u ovom wikiju.",
+       "login-abort-generic": "Vaša je prijava bila neuspješna te je stoga prekinuta.",
+       "login-migrated-generic": "Vaš se suradnički račun preselio, te Vaše suradničko ime više ne postoji u ovom wikiju.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer to izgleda kao da je poslan preko pokvarenog preglednika ili keširanog posrednika (proxyja).",
        "createacct-another-realname-tip": "Pravo ime nije obvezno. \nAko ga navedete, bit će korišteno za pripisivanje Vaših doprinosa.",
        "pt-login": "Prijavi se",
        "pt-login-button": "Prijavi se",
        "pt-createaccount": "Otvori novi suradnički račun",
-       "pt-userlogout": "odjavi se",
+       "pt-userlogout": "Odjavi se",
        "php-mail-error-unknown": "Nepoznata pogrješka u funkciji PHP-poruke()",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez e-mail adrese.",
        "user-mail-no-body": "Pokušali ste poslati e-mail bez sadržaja ili s prekratkim sadržajem.",
        "passwordreset": "Ponovno postavi lozinku",
        "passwordreset-text-one": "Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja da biste dobili privremenu zaporku e-poštom.}}",
-       "passwordreset-legend": "Poništi zaporku",
        "passwordreset-disabled": "Poništavanje lozinke je onemogućeno na ovom wikiju.",
        "passwordreset-emaildisabled": "Funkcija e-pošte je onemogućena na ovom wikiju.",
        "passwordreset-username": "Suradničko ime:",
        "notextmatches": "Nema pronađenih stranica prema tekstu članka",
        "prevn": "prethodnih {{PLURAL:$1|$1}}",
        "nextn": "sljedećih {{PLURAL:$1|$1}}",
+       "prev-page": "prethodna stranica",
+       "next-page": "sljedeća stranica",
        "prevn-title": "$1 {{PLURAL:$1|prethodni rezultat|prethodna rezultata|prethodnih rezultata}}",
        "nextn-title": "$1 {{PLURAL:$1|sljedeći rezultat|sljedeća rezultata|sljedećih rezultata}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "searchdisabled": "<p>Oprostite! Pretraga po cjelokupnoj bazi je zbog bržeg rada projekta {{SITENAME}} trenutačno onemogućena. Možete se poslužiti tražilicom Google.</p>",
        "search-error": "Greška prilikom pretrage: $1",
        "preferences": "Postavke",
-       "mypreferences": "Moje postavke",
+       "mypreferences": "Postavke",
        "prefs-edits": "Broj uređivanja:",
        "prefsnologintext2": "Molimo Vas prijavite se da biste promijenili postavke.",
        "prefs-skin": "Izgled",
        "upload-permitted": "Dopušteni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "upload-preferred": "Poželjni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "upload-prohibited": "Zabranjeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
-       "uploadlogpage": "Evidencija_postavljanja",
+       "uploadlogpage": "Evidencija postavljanja",
        "uploadlogpagetext": "Dolje je popis nedavno postavljenih slika.",
        "filename": "Ime datoteke",
        "filedesc": "Sažetak",
        "listfiles-delete": "izbriši",
        "listfiles-summary": "Ova stranica pokazuje sve postavljene datoteke.\nKad je filtriran po suradniku, popis prikazuje samo one datoteke čije je posljednje inačice postavio taj suradnik.",
        "listfiles_search_for": "Traži ime slike:",
+       "listfiles-userdoesnotexist": "Suradnički račun \"$1\" nije registriran.",
        "imgfile": "datoteka",
        "listfiles": "Popis slika",
        "listfiles_thumb": "Smanjeni pregled",
        "randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Slučajna stranica u kategoriji",
+       "randomincategory-submit": "Kreni",
        "randomredirect": "Slučajno preusmjeravanje",
        "randomredirect-nopages": "Nema preusmjeravanja u imenskom prostoru \"$1\".",
        "statistics": "Statistika",
        "nlinks": "$1 {{PLURAL:$1|poveznica|poveznice|poveznica}}",
        "nmembers": "$1 {{PLURAL:$1|član|članova}}",
        "nrevisions": "$1 {{PLURAL:$1|inačica|inačice|inačica}}",
-       "nviews": "$1 {{PLURAL:$1|put pogledano|puta pogledano|puta pogledano}}",
        "nimagelinks": "Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "ntransclusions": "koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "specialpage-empty": "Nema rezultata za traženi izvještaj.",
        "protectedtitles": "Zaštićeni naslovi",
        "protectedtitlesempty": "Nijedan naslov nije trenutačno zaštićen s tim parametrima.",
        "listusers": "Popis suradnika",
-       "listusers-editsonly": "Pokaži samo suradnike s uređivanjem",
+       "listusers-editsonly": "Prikaži samo suradnike s uređivanjem",
        "listusers-creationsort": "Razvrstaj po datumu stvaranja",
        "listusers-desc": "Sortiraj obrnutim redoslijedom",
        "usereditcount": "$1 {{PLURAL:$1|uređivanje|uređivanja|uređivanja}}",
        "listgrouprights-removegroup-self-all": "Uklonite sve skupine iz vlastitog računa",
        "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
        "trackingcategories-nodesc": "Opis nije dostupan.",
-       "mailnologin": "Nema adrese pošiljaoca",
+       "mailnologin": "Nema adrese pošiljatelja",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]\nda bi mogli slati poštu drugim suradnicima.",
        "emailuser": "Pošalji mu e-poruku",
        "emailuser-title-target": "Pošalji poruku {{GENDER:$1|suradniku|suradnici|suradniku}}",
        "usermessage-summary": "Ostavljanje poruke sustava.",
        "usermessage-editor": "Uređivač sistemskih poruka",
        "watchlist": "Moj popis praćenja",
-       "mywatchlist": "Moj popis praćenja",
+       "mywatchlist": "Popis praćenja",
        "watchlistfor2": "Za $1 $2",
        "nowatchlist": "Na Vašem popisu praćenja nema nijednog članka.",
        "watchlistanontext": "Molimo Vas prijavite se kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.",
        "blanknamespace": "(Glavni)",
        "contributions": "Doprinosi {{GENDER:$1|suradnika|suradnice}}",
        "contributions-title": "Suradnički doprinosi za $1",
-       "mycontris": "Moji doprinosi",
+       "mycontris": "Doprinosi",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Suradnički račun \"$1\" nije registriran.",
        "nocontribs": "Nema promjena koje udovoljavaju ovim kriterijima.",
        "tooltip-pt-logout": "Odjavi se",
        "tooltip-pt-createaccount": "Nudimo vam mogućnost da napravite račun i prijavite se, iako to nije nužno.",
        "tooltip-ca-talk": "Razgovor o stranici",
-       "tooltip-ca-edit": "Možete uređivati ovu stranicu. Koristite Pregled kako će izgledati prije nego što snimite.",
+       "tooltip-ca-edit": "Uredi ovu stranicu",
        "tooltip-ca-addsection": "Dodaj novi odlomak",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena. Možete pogledati izvorni kod.",
        "tooltip-ca-history": "Ranije izmjene na ovoj stranici.",
        "compare-rev1": "Izmjena 1",
        "compare-rev2": "Izmjena 2",
        "compare-submit": "Usporedite",
-       "compare-invalid-title": "Naslov koji ste naveli je nevažeći.",
+       "compare-invalid-title": "Naslov koji ste naveli nije valjan.",
        "compare-title-not-exists": "Naslov koji ste naveli ne postoji.",
        "compare-revision-not-exists": "Navedena izmjena stranice ne postoji.",
        "dberr-problems": "Ispričavamo se! Ova stranica ima tehničkih poteškoća.",
        "expand_templates_remove_nowiki": "Ukloni <nowiki> tagove u rezultatima.",
        "expand_templates_generate_xml": "Prikaži XML stablo",
        "expand_templates_preview": "Vidi kako će izgledati",
+       "pagelang-select-lang": "Odaberi jezik",
        "mediastatistics": "Statistika datoteka",
        "mediastatistics-summary": "Slijede statistike postavljenih datoteka koje pokazuju zadnju inačicu datoteke. Starije ili izbrisane inačice nisu prikazane.",
        "headline-anchor-title": "Poveznica na ovaj odlomak",
        "special-characters-group-greek": "grčki",
        "special-characters-group-cyrillic": "ćirilica",
        "special-characters-group-arabic": "arapski",
-       "special-characters-group-persian": "Perzijski",
+       "special-characters-group-persian": "perzijski",
        "special-characters-group-hebrew": "hebrejski",
        "special-characters-group-bangla": "Bangla znakovi",
        "special-characters-group-telugu": "telugu",
        "special-characters-group-sinhala": "Sinhaleški znakovi",
        "special-characters-group-gujarati": "Gudžaratski znakovi",
        "special-characters-group-thai": "Tajlandski (tajski) znakovi",
-       "special-characters-group-lao": "Laoski znakovi",
-       "special-characters-group-khmer": "kmerski"
+       "special-characters-group-lao": "laoski znakovi",
+       "special-characters-group-khmer": "kmerski",
+       "mw-widgets-titleinput-description-redirect": "preusmjeravanje na $1"
 }
index 301fa9c..64acf51 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Paul Beppler"
+                       "Paul Beppler",
+                       "Midnight Gambler"
                ]
        },
        "tog-underline": "Links (Verbinnunge) unnerstreiche:",
@@ -28,7 +29,7 @@
        "tog-shownumberswatching": "Oonzoohl der beobachtende Benutzer oonzeiche",
        "tog-oldsig": "Voarhandne Signatuar:",
        "tog-fancysig": "Signatuar als Wikitext behandle (ohne automatische Verlinkung)",
-       "tog-uselivepreview": "Voarschau sofort oonzeiche (experimentell)",
+       "tog-uselivepreview": "Voarschau sofort oonzeiche",
        "tog-forceeditsummary": "Warne, soweit beim Speichre die Zusammerfassung fehlt",
        "tog-watchlisthideown": "Eigne Beoorbeitunge in der Beobachtungslist ausblenne",
        "tog-watchlisthidebots": "Beoorbeitunge doorrich Bots in der Beobachtungslist ausblenne",
        "otherlanguages": "In annre Sproche",
        "redirectedfrom": "(Weitergeleitet von $1)",
        "redirectpagesub": "Weiterleitung",
+       "redirectto": "Weiterleitunge noh:",
        "lastmodifiedat": "Die Seit woor zuletzt am $1 um $2 Uhr geännert.",
        "viewcount": "Die Seit woard bisher {{PLURAL:$1|einmal|$1 mal}} abgeruff.",
        "protectedpage": "Geschützte Seit",
        "disclaimers": "Impressum",
        "disclaimerpage": "Project:Impressum",
        "edithelp": "Beoorbeitungshellef",
+       "helppage-top-gethelp": "Hellef",
        "mainpage": "Hauptseit",
        "mainpage-description": "Hauptseit",
        "policy-url": "Project:Richtlinie",
        "hidetoc": "Verberriche",
        "collapsible-collapse": "Inklappe",
        "collapsible-expand": "Ausklappe",
+       "confirmable-yes": "Jo",
+       "confirmable-no": "Nee",
        "thisisdeleted": "$1 oonsiehn orrer wiederherstelle?",
        "viewdeleted": "$1 oonzeiche?",
        "restorelink": "$1 {{PLURAL:$1|gelöschte Version|gelöschte Versione}}",
        "passwordreset": "Passwort zurücksetze",
        "passwordreset-text-one": "Füll das Formular aus, um den Passwort zurückzusetze.",
        "passwordreset-text-many": "{{PLURAL:$1|Füll en von der Felder aus, um en temporäres Passwort por E-Mail zugesandt zu bekomme.}}",
-       "passwordreset-legend": "Passwort zurücksetze",
        "passwordreset-disabled": "Das Zurücksetze von Passwörter woard in dem Wiki deaktiviert.",
        "passwordreset-emaildisabled": "Die E-Mail-Funktione worre uff dem Wiki deaktiviert.",
        "passwordreset-username": "Benutzernoome:",
        "resettokens": "Tokens zurücksetze",
        "resettokens-text": "Du kannst Tokens zurücksetze, wo dir den Zugriff uff bestimmte private Date ermöchliche, wo mit deinem Benutzerkonto hier verknüpft sind.\n\nDu sollst das nuar mache, wenn du verguckt die Tokens versiehntlich mit jemandem geteilt host orrer dein Konto gefährdet ist.",
        "resettokens-no-tokens": "Do gebts ken Tokens zum Zurücksetze.",
-       "resettokens-legend": "Tokens zurücksetze",
        "resettokens-tokens": "Tokens:",
        "resettokens-token-label": "$1 (aktueller Weart: $2)",
        "resettokens-watchlist-token": "Token für den Webfeed (Atom/RSS) von der [[Special:Watchlist|Ännrunge an Seite uff deiner Beobachtungslist]]",
        "currentrev": "Aktuelle Version",
        "currentrev-asof": "Aktuelle Version vom $2, $3 Uhr",
        "revisionasof": "Version vom $2, $3 Uhr",
-       "revision-info": "Version vom $4, $5 Uhr von $2",
+       "revision-info": "Version vom $4, $5 Uhr von {{GENDER:$6|$2}}$7",
        "previousrevision": "← Nächstältre Version",
        "nextrevision": "Nächstjüngre Version →",
        "currentrevisionlink": "Aktuelle Version",
        "notextmatches": "Ken Üwereinstimmunge mit Inhalte",
        "prevn": "{{PLURAL:$1|voarhericher|vorheriche $1}}",
        "nextn": "{{PLURAL:$1|nächster|nächste $1}}",
+       "prev-page": "vorrich Seit",
+       "next-page": "nächste Seit",
        "prevn-title": "{{PLURAL:$1|Voarheriches Ergebnis|Vorherige $1 Ergebnisse}}",
        "nextn-title": "{{PLURAL:$1|Voarheriches Ergebnis|Vorherige $1 Ergebnisse}}",
        "shown-title": "Zeiche $1 {{PLURAL:$1|Ergebnis|Ergebnisse}} pro Seit",
        "search-result-category-size": "{{PLURAL:$1|1 Seit|$1 Seite}} ({{PLURAL:$2|1 Unnerkategorie|$2 Unnerkategorie}}, {{PLURAL:$3|1 Datei|$3 Dateie}})",
        "search-redirect": "(Weiterleitung von „$1“)",
        "search-section": "(Abschnitt $1)",
+       "search-category": "(Kategorie $1)",
        "search-file-match": "(treffende Dateiinhalte)",
        "search-suggest": "Host du gemeent „$1“?",
        "search-interwiki-caption": "Schwesterprojekte",
        "randomincategory": "Zufälliche Seit von en Kategorie",
        "randomincategory-invalidcategory": "\"$1\" ist ken gülticher Kategorieenoome.",
        "randomincategory-nopages": "Es gebt kene Seite in [[:Category:$1]].",
+       "randomincategory-category": "Kategorie:",
        "randomredirect": "Zufällich Weiterleitung",
        "randomredirect-nopages": "Im Noomeraum „$1“ sind ken Weiterleitunge voarhand.",
        "statistics": "Statistik",
        "nmembers": "{{PLURAL:$1|1 Eintrooch|$1 Einträche}}",
        "nmemberschanged": "$1 → {{PLURAL:$2|En Mitglied|$2 Mitglieder}}",
        "nrevisions": "{{PLURAL:$1|1 Beoorbeitung|$1 Beoorbeitunge}}",
-       "nviews": "{{PLURAL:$1|1 Abfroch|$1 Abfroche}}",
        "nimagelinks": "Verwendt uff {{PLURAL:$1|en Seit|$1 Seite}}",
        "ntransclusions": "Verwendt uff {{PLURAL:$1|en Seit|$1 Seite}}",
        "specialpage-empty": "Do sind aktuell ken zutreffende Einträche voarhand.",
        "querypage-disabled": "Die Spezialseit woard aus Gründe von der Leistungserhaltung deaktiviert.",
        "booksources": "ISBN-Suche",
        "booksources-search-legend": "Such noh Bezugsquelle für Bücher",
+       "booksources-search": "Suche",
        "booksources-text": "Dies ist en List mit Links zu Internetseite, wo neie und gebrauchte Bücher verkoofe. Dort kann das ooch weitre Informationen üwer die Bücher gebe. {{SITENAME}} ist mit kenem von der Oonbieter geschäftlich verbünd.",
        "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültich.\nBittschön prüf, ob die korrekt von der Quell üwertroohr woard.",
        "specialloguserlabel": "Ausführender Benutzer:",
        "delete-warning-toobig": "Die Seit hot mit meahr wie $1 {{PLURAL:$1|Version|Versione}} en seahr lange Versionsgeschicht. Das Abwische kann zu Störunge im Datebankbetrieb führe.",
        "deleting-backlinks-warning": "'''Warnung:''' Es verweise noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|annre Seite]] uff die zu abwischende Seit orrer die Seit ist noch in en anner Platz ingebund.",
        "rollback": "Zurücksetze von der Ännrunge",
-       "rollback_short": "Zurücksetze",
        "rollbacklink": "Zurücksetze",
        "rollbacklinkcount": "{{PLURAL:$1|En Version|$1 Versione}} zurücksetze",
        "rollbacklinkcount-morethan": "Meahr wie {{PLURAL:$1|en Version|$1 Versione}} zurücksetze",
        "import": "Seite importiere",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Wähl en Wiki und en Seit für se importiere.\nDie Versionsdate und Benutzernoome bleibe dabei erhalt.\nAll Transwiki-Import-Aktione werre im [[Special:Log/import|Import-Logbuch]] protokolliert.",
+       "import-interwiki-sourcewiki": "Quellwiki:",
        "import-interwiki-history": "Alle Versione von der Seit importiere",
        "import-interwiki-templates": "Alle Vorlooche einschliesse",
        "import-interwiki-submit": "Importiere",
-       "import-interwiki-namespace": "Zielnoomeraum:",
-       "import-interwiki-rootpage": "Zielstammseit (optional):",
        "import-upload-filename": "Dateinoome:",
        "import-comment": "Grund:",
        "importtext": "Bittschön die Datei üwer die Spezialseit [[Special:Export|Exportfunktion]] aus dem Quellwiki exportiere.\nDie uff dem lokale Rechner (Komputadoar) speichre und donoh hier hochloode.",
        "import-rootpage-nosubpage": "Im Noomeraum \"$1\" von der Stammseit sind ken Unnerseite erlaubt.",
        "importlogpage": "Import-Logbuch",
        "importlogpagetext": "Administrativer Import von Seite mit Versionsgeschicht von annre Wikis.",
-       "import-logentry-upload": "importierte \"[[$1]]\" von en Datei",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versione}}",
-       "import-logentry-interwiki": "importierte \"$1\" (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} von $2",
        "javascripttest": "JavaScript-Test",
-       "javascripttest-title": "$1-Tests werre doorrichgeführt",
        "javascripttest-pagetext-noframework": "Die Seit ist JavaSkript-Tests voarbehalt.",
        "javascripttest-pagetext-unknownframework": "Unbekanntes Framework \"$1\".",
        "javascripttest-pagetext-frameworks": "Bittschön wähl en von der follichende Prüfumgebunge aus: $1",
        "javascripttest-pagetext-skins": "Wähl en Benutzeroberfläch zur Doorrichführung von der Test aus:",
        "javascripttest-qunit-intro": "Sieh die [$1 Dokumentation zu Tests] uff mediawiki.org",
-       "javascripttest-qunit-heading": "MediaWiki-JavaSkript-QUnit-Tester",
        "tooltip-pt-userpage": "Dein Benutzerseit",
        "tooltip-pt-anonuserpage": "Benutzerseit von der IP-Adress von der aus du Ännrunge doorrichführst",
        "tooltip-pt-mytalk": "Dein Diskussionsseit",
        "watchlisttools-edit": "normal beoorbeite",
        "watchlisttools-raw": "im Listeformat beoorbeite (Import/Export)",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussion]])",
-       "unknown_extension_tag": "Unbekanntes Parser-Tag \"$1\"",
        "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel „$2“ üwerschreibt den voarher verwenndte Schlüssel „$1“.",
        "version": "Version",
        "version-extensions": "Installierte Erweitrunge",
        "version-entrypoints": "URLs von der Einstiechspunkt",
        "version-entrypoints-header-entrypoint": "Einstiechspunkt",
        "version-entrypoints-header-url": "URL",
+       "version-libraries-library": "Bibliothek",
+       "version-libraries-version": "Version",
+       "version-libraries-license": "Lizenz",
+       "version-libraries-description": "Beschreibung",
+       "version-libraries-authors": "Autore",
        "redirect": "Weiterleitung uff Benutzerseit, Seit, Seiteversion orrer Datei",
        "redirect-legend": "Weiterleitung uff en Benutzerseit, Seit, Seiteversion orrer Datei",
        "redirect-summary": "Die Spezialseit leitet uff en Benutzerseit (numerische Benutzerkennung oongeb), Seit (Seitekennung oongeb), Seiteversion (Versionskennung oongeb) orrer Datei (Dateinoome oongeb) weiter. Benutzung: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] orrer [[{{#Special:Redirect}}/file/Example.jpg]].",
        "tags-description-header": "Vollständiche Beschreibung",
        "tags-active-header": "Aktiv?",
        "tags-hitcount-header": "Markierte Ännrunge",
+       "tags-actions-header": "Aktione",
        "tags-active-yes": "J",
        "tags-active-no": "Ne, nein",
        "tags-edit": "Beoorbeite",
        "tags-hitcount": "$1 {{PLURAL:$1|Ändrung|Ändrunge}}",
+       "tags-create-reason": "Grund:",
+       "tags-create-submit": "Erstelle",
+       "tags-delete-reason": "Grund:",
+       "tags-activate-reason": "Grund:",
+       "tags-deactivate-reason": "Grund:",
+       "tags-edit-reason": "Grund:",
        "comparepages": "Seite vergleiche",
        "compare-page1": "Seit 1",
        "compare-page2": "Seit 2",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ännerte}} die Gruppezugehörigkeit für $3",
        "logentry-rights-autopromote": "$1 woard automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}",
        "rightsnone": "(ken)",
+       "feedback-adding": "Rückmeldung weard zur Seit hinzugefücht …",
+       "feedback-back": "Zurück",
+       "feedback-bugcheck": "Super! Bittschön üwerprüf noch, ob das sich hierbei net um en schon [$1 bekannte Fehler] handelt.",
+       "feedback-bugnew": "Ich honn das üwerprüft. Den neie Fehler melde.",
        "feedback-bugornote": "Soweit du ganz detalhiert en technisches Problem beschreiben möchst, meld bittschön [$1 en Fehler].\nAnnerfalls kannst du ooch das do unne stehende ganz enfache Formular benutze. Dein Kommentar weard, zusammer mit deinem Benutzernoome und der Version von der von dir verwenndt Webbrowsers sowie Betriebssystems, uff der Seit \"[$3 $2]\" hinzugefücht.",
-       "feedback-subject": "Betreff:",
-       "feedback-message": "Nachricht:",
        "feedback-cancel": "Abbreche",
-       "feedback-submit": "Rückmeldung schicke",
-       "feedback-adding": "Rückmeldung weard zur Seit hinzugefücht …",
+       "feedback-close": "Erledicht (fertich)",
+       "feedback-error-title": "Fehler",
        "feedback-error1": "Fehler: Unbekanntes Ergebnis von der API",
        "feedback-error2": "Fehler: Beoorbeitung gescheitert",
        "feedback-error3": "Fehler: Ken Antwort von der API",
+       "feedback-message": "Nachricht:",
+       "feedback-subject": "Betreff:",
+       "feedback-submit": "Rückmeldung schicke",
        "feedback-thanks": "Dankschön. Dein Rückmeldung woard uff der Seit \"[$2 $1]\" gespeichert.",
-       "feedback-close": "Erledicht (fertich)",
-       "feedback-bugcheck": "Super! Bittschön üwerprüf noch, ob das sich hierbei net um en schon [$1 bekannte Fehler] handelt.",
-       "feedback-bugnew": "Ich honn das üwerprüft. Den neie Fehler melde.",
        "searchsuggest-search": "Such",
        "searchsuggest-containing": "wo enthält …",
        "api-error-badaccess-groups": "Du host net die Berechtichung Dateie in des Wiki hochzuloode.",
        "expand_templates_remove_nowiki": "<nowiki>-Tags in der Ausgäb unnerdrücke",
        "expand_templates_generate_xml": "XML-Parser-Boom zeiche",
        "expand_templates_generate_rawhtml": "Rohes HTML oonzeiche",
-       "expand_templates_preview": "Voarschau"
+       "expand_templates_preview": "Voarschau",
+       "pagelang-name": "Seit",
+       "pagelang-language": "Sproch",
+       "mediastatistics-table-mimetype": "MIME-Typ",
+       "mediastatistics-header-unknown": "Unbekannt",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videos",
+       "mediastatistics-header-office": "Office",
+       "special-characters-title-endash": "en dash",
+       "special-characters-title-emdash": "em dash"
 }
index f09c14f..b67c507 100644 (file)
        "youhavenewmessagesmanyusers": "Vannak $1 sok szerkesztőtől ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|új üzenet|999=új üzenetek}} a vitalapodon",
        "newmessagesdifflinkplural": "{{PLURAL:$1|változás|999=változás}}",
-       "youhavenewmessagesmulti": "Új üzenet vár a(z) $1 wikin",
+       "youhavenewmessagesmulti": "Új üzenetek várnak a(z) $1 wikin",
        "editsection": "szerkesztés",
        "editold": "szerkesztés",
        "viewsourceold": "lapforrás",
        "namespaceprotected": "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
        "customcssprotected": "Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
        "customjsprotected": "Nem szerkesztheted ezt a JavaScript-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
-       "mycustomcssprotected": "Nincs jogod szerkeszteni ezt a CSS lapot.",
-       "mycustomjsprotected": "Nincs jogod szerkeszteni ezt a Javascript lapot.",
+       "mycustomcssprotected": "Nincs jogod szerkeszteni ezt a CSS-lapot.",
+       "mycustomjsprotected": "Nincs jogod szerkeszteni ezt a JavaScript-lapot.",
        "myprivateinfoprotected": "Nincs jogod módosítani a privát adataidat.",
        "mypreferencesprotected": "Nincs jogod módosítani a beállításaidat.",
        "ns-specialprotected": "A speciális lapok nem szerkeszthetők.",
        "nologin": "Nem rendelkezel még felhasználói fiókkal? $1.",
        "nologinlink": "Itt regisztrálhatsz",
        "createaccount": "Regisztráció",
-       "gotaccount": "Ha már korábban regisztráltál, '''$1'''.",
+       "gotaccount": "Már van fiókod? $1.",
        "gotaccountlink": "Bejelentkezés",
        "userlogin-resetlink": "Elfelejtetted a bejelentkezési adataidat?",
        "userlogin-resetpassword-link": "Elfelejtetted a jelszavad?",
        "passwordreset": "Jelszó törlése",
        "passwordreset-text-one": "A jelszó átmeneti beállításához töltsd ki az űrlapot.",
        "passwordreset-text-many": "{{PLURAL:$1|Az átmeneti jelszó elküldéséhez töltsd ki az alábbi mezők egyikét.}}",
-       "passwordreset-legend": "Új jelszó kérése",
        "passwordreset-disabled": "Új jelszó kérése nem engedélyezett ezen a wikin.",
        "passwordreset-emaildisabled": "Az e-mail funkció le van tiltva ezen a wikin.",
        "passwordreset-username": "Felhasználónév:",
        "resettokens": "Tokenek törlése",
        "resettokens-text": "Újra generálhatod a tokeneket, amely a fiókodhoz rendelt bizonyos magánadatokhoz enged hozzáférést.\n\nEzt akkor érdemes használnod, hogy véletlenül megosztottad a tokeneket valakivel, vagy ha valaki feltörte a fiókodat.",
        "resettokens-no-tokens": "Nincs újragenerálható token.",
-       "resettokens-legend": "Tokenek újragenerálása",
        "resettokens-tokens": "Tokenek:",
        "resettokens-token-label": "$1 (jelenlegi érték: $2)",
        "resettokens-watchlist-token": "Kulcs egy hírcsatornához (Atom/RSS), ami a [[Special:Watchlist|figyelőlistádon lévő lapok változásaiból]] készül",
        "yourdiff": "Eltérések",
        "copyrightwarning": "Vedd figyelembe, hogy a {{SITENAME}} wikin végzett összes módosítás a(z) $2 alatt jelenik meg (lásd a(z) $1 lapot a részletekért). Ha nem akarod, hogy az írásodat módosítsák vagy továbbterjesszék, akkor ne küldd be.<br />\nAzt is megígéred, hogy ezt magadtól írtad, vagy egy közkincsből vagy más szabad forrásból másoltad.\n'''NE KÜLDJ BE JOGVÉDETT MUNKÁT ENGEDÉLY NÉLKÜL!'''",
        "copyrightwarning2": "Vedd figyelembe, hogy a {{SITENAME}} wikin végzett összes módosítást szerkeszthetik, módosíthatják vagy eltávolíthatják más szerkesztők.\nHa nem akarod, hogy az írásodat módosítsák, akkor ne küldd be.<br />\nAzt is megígéred, hogy ezt magadtól írtad, vagy egy közkincsből vagy más szabad forrásból másoltad (lásd a(z) $1 lapot a részletekért).\n'''NE KÜLDJ BE JOGVÉDETT MUNKÁT ENGEDÉLY NÉLKÜL!'''",
+       "editpage-cannot-use-custom-model": "Ennek a lapnak a tartalommodellje nem változtatható.",
        "longpageerror": "'''HIBA: Az általad beküldött szöveg {{PLURAL:$1|egy kilobájt|$1 kilobájt}} hosszú, ami több az engedélyezett {{PLURAL:$2|egy kilobájtnál|$2 kilobájtnál}}.\nA szerkesztést nem lehet elmenteni.'''",
        "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ó:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Üres objektum",
        "content-json-empty-array": "Üres tömb",
+       "duplicate-args-warning": "<strong>Figyelmeztetés:</strong> A(z) [[:$1]] lap dupla értékkel hívja meg a(z) [[:$2]] sablont („$3” paraméter). Csak az utolsó érték lesz felhasználva.",
        "duplicate-args-category": "Dupla paramétermegadást tartalmazó lapok",
        "duplicate-args-category-desc": "Az oldal olyan sablon hívásokat tartalmaz, amely ugyanazt a paramétert használja, például <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Figyelem: ezen a lapon túl sok erőforrásigényes elemzőfüggvény-hívás található.\n\nKevesebb, mint {{PLURAL:$2|egy|$2}} kellene, jelenleg {{PLURAL:$1|egy|$1}} van.",
        "post-expand-template-argument-warning": "Figyelem: Ez a lap legalább egy olyan sablonparamétert tartalmaz, amely kibontva túl nagy, így el lett(ek) hagyva.",
        "post-expand-template-argument-category": "Elhagyott sablonparaméterekkel rendelkező lapok",
        "parser-template-loop-warning": "Végtelen ciklus a következő sablonban: [[$1]]",
-       "parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határérékét ($1)",
+       "parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határértéket ($1)",
        "language-converter-depth-warning": "A nyelvátalakító rekurzióinak száma túllépve ($1)",
        "node-count-exceeded-category": "Túl sok csomópontot tartalmazó lapok",
        "node-count-exceeded-category-desc": "A lap túllépi a maximális csomópontszámot.",
        "undo-failure": "A szerkesztést nem lehet automatikusan visszavonni vele ütköző későbbi szerkesztések miatt.",
        "undo-norev": "A szerkesztés nem állítható vissza, mert nem létezik vagy törölve lett.",
        "undo-nochange": "A szerkesztés már vissza lett állítva.",
-       "undo-summary": "Visszavontam [[Special:Contributions/$2|$2]] ([[User talk:$2|vita]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]]) szerkesztését (oldid: $1)",
+       "undo-summary": "Visszavontam [[Special:Contributions/$2|$2]] ([[User talk:$2|vita]]) szerkesztését (oldid: $1)",
        "undo-summary-username-hidden": "A rejtett felhasználó által végzett $1 változat visszavonása",
        "cantcreateaccounttitle": "Felhasználói fiók létrehozása sikertelen",
        "cantcreateaccount-text": "Erről az IP-címről ('''$1''') nem lehet regisztrálni, mert [[User:$3|$3]] blokkolta az alábbi indokkal:\n\n:''$2''",
        "badsig": "Érvénytelen aláírás; ellenőrizd a HTML-formázást.",
        "badsiglength": "Az aláírásod túl hosszú.\n{{PLURAL:$1|Egy|$1}} karakternél rövidebbnek kell lennie.",
        "yourgender": "Biológiai nem:",
-       "gender-unknown": "Inkább nem adom meg",
+       "gender-unknown": "Amikor rólad van szó, a szoftver semleges szavakat fog használni, ha lehetséges",
        "gender-male": "Férfi",
        "gender-female": "Nő",
        "prefs-help-gender": "Nem kötelező: a szoftver használja a nemtől függő üzenetek megjelenítéséhez. Az információ mindenki számára látható.",
        "userrights-lookup-user": "Szerkesztőcsoportok beállítása",
        "userrights-user-editname": "Add meg a szerkesztő nevét:",
        "editusergroup": "Szerkesztőcsoportok módosítása",
-       "editinguser": "'''[[User:$1|$1]]''' szerkesztő jogainak megváltoztatása $2",
+       "editinguser": "<strong>[[User:$1|$1]]</strong> felhasználó jogainak megváltoztatása $2",
        "userrights-editusergroup": "Szerkesztőcsoportok módosítása",
        "saveusergroups": "Szerkesztőcsoportok mentése",
        "userrights-groupsmember": "Csoporttag:",
        "backend-fail-notsame": "Egy nem azonos fájl már létezik $1 néven.",
        "backend-fail-invalidpath": "$1 nem érvényes tárolási útvonal.",
        "backend-fail-delete": "Nem sikerült törölni ezt a fájlt: $1 .",
-       "backend-fail-describe": "Nem lehet megváltoztatna a \"$1\" fájl metaadatát.",
+       "backend-fail-describe": "Nem lehet megváltoztatni a(z) „$1” fájl metaadatait.",
        "backend-fail-alreadyexists": "Ez a fájl már létezik: $1 .",
        "backend-fail-store": "Nem sikerült a(z) $1 fájl tárolása $2 helyen.",
        "backend-fail-copy": "Nem sikerült a(z) $1 fájl másolása $2 helyre.",
        "listduplicatedfiles-summary": "Ez azon fájlok listája, ahol a legfrissebb fájl verzió megegyezik egy mások fájl legújabb verziójával. Csak a helyi fájlok figyelembe vételével.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] tartalmaz [[$3|{{PLURAL:$2|egy|$2}} duplikátumot]]",
        "unusedtemplates": "Nem használt sablonok",
-       "unusedtemplatestext": "Ez a lap azon {{ns:template}} névtérbe tartozó lapokat gyűjti össze, melyek nincsenek használva egyetlen lapon sem.\nEllenőrizd a meglévő hivatkozásokat, mielőtt törölnéd őket.",
+       "unusedtemplatestext": "Ez a lap azon {{ns:template}} névtérbe tartozó lapokat gyűjti össze, amelyek nincsenek beillesztve egyetlen lapon sem.\nNe felejtsd el ellenőrizni az egyéb hivatkozásokat, mielőtt törölnéd őket.",
        "unusedtemplateswlh": "más hivatkozások",
        "randompage": "Lap találomra",
        "randompage-nopages": "A következő {{PLURAL:$2|névtérben|névterekben}} nincsenek lapok: $1.",
        "randomincategory-nopages": "Nincsenek lapok a [[:Category:$1|$1]] kategóriában.",
        "randomincategory-category": "Kategória:",
        "randomincategory-legend": "Véletlen lap a kategóriából",
+       "randomincategory-submit": "Menj",
        "randomredirect": "Átirányítás találomra",
        "randomredirect-nopages": "A(z) „$1” névtérben nincsenek átirányítások.",
        "statistics": "Statisztika",
        "nmembers": "{{PLURAL:$1|egy|$1}} elem",
        "nmemberschanged": "$1 → $2 tag",
        "nrevisions": "{{PLURAL:$1|egy|$1}} változat",
-       "nviews": "{{PLURAL:$1|egy|$1}} megtekintés",
        "nimagelinks": "{{PLURAL:$1|Egy|$1}} lapon van használva",
        "ntransclusions": "{{PLURAL:$1|egy|$1}} lapon van használva",
        "specialpage-empty": "Ez az oldal üres.",
        "unusedimages": "Nem használt fájlok",
        "wantedcategories": "Keresett kategóriák",
        "wantedpages": "Keresett lapok",
-       "wantedpages-summary": "Legtöbb hivatkozással rendelkező nem létező oldalak, nem számolva az átirányításokat. Azon nem létező oldalak listája, amelyre a legtöbb átirányítás mutat itt található: [[{{#special:BrokenRedirects}}]]",
+       "wantedpages-summary": "Legtöbb hivatkozással rendelkező nem létező oldalak, nem számolva az átirányításokat. Azon nem létező oldalak, amelyekre a legtöbb átirányítás mutat, a [[{{#special:BrokenRedirects}}|hibás átirányítások listáján]] szerepelnek.",
        "wantedpages-badtitle": "Érvénytelen cím található az eredményhalmazban: $1",
        "wantedfiles": "Keresett fájlok",
        "wantedfiletext-cat": "A következő fájlok használatban vannak, de nem léteznek. Külső tárhelyről származó fájlok akkor is a listára kerülhetnek, ha léteznek. Az ilyen hamis riasztások <del>áthúzva</del> jelennek meg. Ezen felül az olyan beágyazott fájlok, amelyek nem léteznek a  [[:$1]] kategóriában jelennek meg.",
        "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": "{{GENDER:$1|felhasználó}}nevű szerkesztő e-mail-címére ezen űrlap kitöltésével üzenetet tudsz küldeni.\nFeladóként a [[Special:Preferences|beállításaid]]nál megadott e-mail-címed fog szerepelni, így a címzett közvetlenül tud majd válaszolni neked.",
+       "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",
        "usermaildisabledtext": "Nem küldhetsz emailt más felhasználóknak ezen a wikin",
        "unwatchthispage": "Figyelés leállítása",
        "notanarticle": "Nem szócikk",
        "notvisiblerev": "A változat törölve lett",
-       "watchlist-details": "A vitalapokon kívül {{PLURAL:$1|egy|$1}} lap van a figyelőlistádon.",
+       "watchlist-details": "$1 lap van a figyelőlistádon, a vitalapokat külön nem számolva.",
        "wlheader-enotif": "Az e-mailen keresztül történő értesítés engedélyezve.",
        "wlheader-showupdated": "Azok a lapok, amelyek megváltoztak, mióta utoljára megnézted őket, '''vastagítva''' láthatók.",
        "wlnote": "Alább {{PLURAL:$1|az utolsó változás|az utolsó <strong>$1</strong> változás}} látható az elmúlt {{PLURAL:$2|órában|<strong>$2</strong> órában}}, $3 $4-kor.",
        "watcherrortext": "Hiba történt a(z) „$1” lapra vonatkozó figyelőlista-beállítások módosítása közben.",
        "enotif_reset": "Az összes lap megjelölése felkeresettként",
        "enotif_impersonal_salutation": "{{SITENAME}} felhasználó",
-       "enotif_subject_deleted": "$2 törölte a $1 {{SITENAME}} oldalt.",
+       "enotif_subject_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.",
        "rollback-success": "$1 szerkesztéseit visszaállítottam $2 utolsó változatára.",
        "sessionfailure-title": "Munkamenethiba",
        "sessionfailure": "Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel;\nez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt.\nKérjük, hogy nyomd meg a „vissza” gombot, és töltsd le újra az oldalt, ahonnan jöttél, majd próbáld újra.",
+       "changecontentmodel": "A lap tartalommodelljének megváltoztatása",
+       "changecontentmodel-legend": "Tartalommodell megváltoztatása",
+       "changecontentmodel-title-label": "Lapcím",
+       "changecontentmodel-model-label": "Új tartalommodell",
+       "changecontentmodel-reason-label": "Indoklás:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|megváltoztatta}} a(z) $3 lap tartalommodeljét erről: „$4” erre: „$5”",
+       "logentry-contentmodel-change-revertlink": "visszaállítás",
+       "logentry-contentmodel-change-revert": "visszaállítás",
        "protectlogpage": "Lapvédelmi napló",
        "protectlogtext": "Alább látható a lapvédelemmel kapcsolatos változtatások listája.\nA [[Special:ProtectedPages|védett lapok listáján]] megtekintheted a jelenleg is érvényben lévő védelmeket.",
        "protectedarticle": "levédte a(z) [[$1]] lapot",
        "tooltip-pt-logout": "Kijelentkezés",
        "tooltip-pt-createaccount": "Arra bíztatunk, hogy hozz létre egy fiókot, és jelentkezz be, azonban ez nem kötelező",
        "tooltip-ca-talk": "Az oldal tartalmának megvitatása",
-       "tooltip-ca-edit": "Te is szerkesztheted ezt az oldalt. Mentés előtt használd az előnézet gombot.",
+       "tooltip-ca-edit": "A lap szerkesztése",
        "tooltip-ca-addsection": "Új szakasz nyitása",
        "tooltip-ca-viewsource": "Ez egy védett lap. Ide kattintva megnézheted a forrását.",
        "tooltip-ca-history": "A lap korábbi változatai",
        "pageinfo-robot-index": "Engedélyezett",
        "pageinfo-robot-noindex": "Nem engedélyezett",
        "pageinfo-watchers": "Figyelők száma",
+       "pageinfo-visiting-watchers": "A lapot figyelők száma, akik nézték a friss változtatásait",
        "pageinfo-few-watchers": "Kevesebb mint $1 szerkesztő figyeli",
        "pageinfo-redirects-name": "Átirányítások száma erre a lapra",
        "pageinfo-subpages-name": "A lap allapjai",
        "version-libraries": "Telepített könyvtárak",
        "version-libraries-library": "Könyvtár",
        "version-libraries-version": "Verzió",
+       "version-libraries-license": "Licenc",
+       "version-libraries-description": "Leírás",
+       "version-libraries-authors": "Szerzők",
        "redirect": "Átirányítás fájl, szerkesztő, oldal vagy oldalváltozat alapján",
        "redirect-legend": "Átirányítás egy fájlra vagy lapra",
        "redirect-summary": "Ez a speciális lap átirányít egy fájlra (megadott fájlnévvel), lapra (megadott lapváltozat- vagy lapazonosító számmal) vagy felhasználóra (felhasználó azonosítószáma alapján). Használat: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] vagy [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "kötőjel",
        "special-characters-title-emdash": "hosszú kötőjel",
-       "special-characters-title-minus": "minusz jel"
+       "special-characters-title-minus": "minusz jel",
+       "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 8754712..8a542a4 100644 (file)
        "no-null-revision": "Non ha potite crear un nove version vacue del le pagina \"$1\"",
        "badtitle": "Titulo invalide",
        "badtitletext": "Le titulo de pagina requestate es invalide, vacue, o un titulo interlingual o interwiki incorrectemente ligate.\nEs possibile que illo contine un o plure characteres que non pote esser usate in titulos.",
+       "title-invalid-empty": "Le titulo de pagina requestate es vacue o contine solmente le nomine de un spatio de nomines.",
+       "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.",
        "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.",
        "passwordreset": "Reinitialisar contrasigno",
        "passwordreset-text-one": "Completa iste formulario pro reinitialisar tu contrasigno.",
        "passwordreset-text-many": "{{PLURAL:$1|Completa un de iste campos pro reciper un contrasigno temporari in e-mail.}}",
-       "passwordreset-legend": "Reinitialisar contrasigno",
        "passwordreset-disabled": "Le reinitialisation de contrasignos ha essite disactivate in iste wiki.",
        "passwordreset-emaildisabled": "Le functionalitate de e-mail ha essite disactivate in iste wiki.",
        "passwordreset-username": "Nomine de usator:",
        "resettokens": "Reinitialisar indicios",
        "resettokens-text": "Hic tu pote reinitialisar le indicios que permitte le accesso a certe datos private associate a tu conto.\n\nTu deberea facer lo si tu los ha accidentalmente dividite con un altere persona o si tu conto ha essite compromittite.",
        "resettokens-no-tokens": "Il non ha indicios a reinitialisar.",
-       "resettokens-legend": "Reinitialisar indicios",
        "resettokens-tokens": "Indicios:",
        "resettokens-token-label": "$1 (valor actual: $2)",
        "resettokens-watchlist-token": "Indicio pro syndication web (Atom/RSS) de [[Special:Watchlist|modificationes a paginas in tu observatorio]]",
        "nmembers": "$1 {{PLURAL:$1|membro|membros}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
        "nrevisions": "$1 {{PLURAL:$1|version|versiones}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visitas}}",
        "nimagelinks": "Usate in $1 {{PLURAL:$1|pagina|paginas}}",
        "ntransclusions": "usate in $1 {{PLURAL:$1|pagina|paginas}}",
        "specialpage-empty": "Il non ha resultatos pro iste reporto.",
index 14ab6dc..77914a0 100644 (file)
        "disclaimers": "Penyangkalan",
        "disclaimerpage": "Project:Penyangkalan umum",
        "edithelp": "Bantuan penyuntingan",
-       "helppage-top-gethelp": "Tolong",
+       "helppage-top-gethelp": "Bantuan",
        "mainpage": "Halaman Utama",
        "mainpage-description": "Halaman Utama",
        "policy-url": "Project:Kebijakan",
        "no-null-revision": "Tidak dapat membuat revisi null baru untuk halaman \"$1\"",
        "badtitle": "Judul tidak sah",
        "badtitletext": "Judul halaman yang diminta tidak sah, kosong, atau judul antarbahasa atau antarwiki yang salah sambung.",
+       "title-invalid-empty": "Judul halaman yang diminta kosong atau berisi hanya nama sebuah ruang nama.",
        "perfcached": "Data berikut ini diambil dari singgahan dan mungkin bukan data mutakhir. {{PLURAL:$1|Hasil}} maksimal ada di singgahan.",
        "perfcachedts": "Data berikut ini diambil dari singgahan dan terakhir diperbarui pada $1. {{PLURAL:$4|Hasil}} maksimal ada di singgahan.",
        "querypage-no-updates": "Pemutakhiran dari halaman ini sedang dimatikan. Data yang ada di sini saat ini tidak akan dimuat ulang.",
        "resetpass-expired": "Kata sandi Anda telah kedaluarsa. Silakan atur kata sandi baru untuk masuk log.",
        "resetpass-expired-soft": "Kata sandi Anda telah kedaluarsa dan perlu disetel ulang. Silakan memilih kata sandi baru, atau klik \"{{int:resetpass-submit-cancel}}\" untuk menyetel ulang pada waktu lain.",
        "resetpass-validity-soft": "Kata sandi tidak valid: $1\n\nSilakan pilih kata sandi baru sekarang, atau klik \"{{int:resetpass-submit-cancel}}\" untuk menyetel ulang pada waktu lain.",
-       "passwordreset": "Setel ulang kata sandi",
+       "passwordreset": "Ubah kata sandi",
        "passwordreset-text-one": "Lengkapi formulir ini untuk menyetel ulang kata sandi.",
        "passwordreset-text-many": "{{PLURAL:$1|Isi salah satu kotak di bawah ini untuk mendapatkan kata sandi sementara melalui surel.}}",
-       "passwordreset-legend": "Setel ulang kata sandi",
        "passwordreset-disabled": "Penyetelan ulang sandi telah dimatikan di wiki ini.",
        "passwordreset-emaildisabled": "Fitur surel telah dinonaktifkan pada wiki ini.",
        "passwordreset-username": "Nama pengguna:",
        "changeemail-password": "Sandi {{SITENAME}} Anda:",
        "changeemail-submit": "Ubah surel",
        "changeemail-throttled": "Anda sudah terlalu banyak mencoba masuk log.\nSilakan menunggu $1 sebelum mencoba lagi.",
-       "resettokens": "Reset token",
+       "resettokens": "Ubah 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": "Tidak ada token untuk di-reset.",
-       "resettokens-legend": "Reset token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (nilai saat ini: $2)",
        "resettokens-watchlist-token": "Token untuk sindikasi web (Atom/RSS) dari [[Special:Watchlist|perubahan di daftar pantauan Anda]]",
        "revdelete-offender": "Revisi penulis:",
        "suppressionlog": "Log penyembunyian",
        "suppressionlogtext": "Berikut adalah daftar penghapusan dan pemblokiran, termasuk konten yang disembunyikan dari para pengurus.\nLihat [[Special:BlockList|daftar pemblokiran]] untuk daftar terkininya.",
-       "mergehistory": "Gabung sejarah halaman",
+       "mergehistory": "Riwayat penggabungan sejarah halaman",
        "mergehistory-header": "Halaman ini memperbolehkan Anda untuk menggabungkan revisi-revisi dari satu halaman sumber ke halaman yang lebih baru.\nPastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu halaman.",
        "mergehistory-box": "Gabung revisi-revisi dari dua halaman:",
        "mergehistory-from": "Halaman sumber:",
        "recentchangeslinked-summary": "Ini adalah daftar perubahan pada halaman yang terkait ke halaman yang spesifik (atau bagian dari kategori yang spesifik).\nHalaman pada [[Special:Watchlist|daftar pantauan Anda]] terlihat <strong>dicetak tebal</strong>.",
        "recentchangeslinked-page": "Nama halaman:",
        "recentchangeslinked-to": "Perlihatkan perubahan dari halaman-halaman yang terhubung dengan halaman yang disajikan",
-       "upload": "Unggah berkas",
+       "upload": "Pengunggahan berkas",
        "uploadbtn": "Muatkan berkas",
        "reuploaddesc": "Kembali ke formulir pemuatan",
        "upload-tryagain": "Kirim perubahan keterangan berkas",
        "mimesearch-summary": "Halaman ini menyediakan fasilitas menyaring berkas berdasarkan tipe MIME-nya. Masukkan: contenttype/subtype atau contenttype/*, misalnya <code>image/jpeg</code>.",
        "mimetype": "Tipe MIME:",
        "download": "unduh",
-       "unwatchedpages": "Halaman yang tak dipantau",
+       "unwatchedpages": "Halaman yang tak terpantau",
        "listredirects": "Daftar pengalihan",
        "listduplicatedfiles": "Daftar berkas duplikat",
        "listduplicatedfiles-summary": "Ini adalah daftar berkas di mana versi terbaru dari berkas tersebut merupakan duplikat dari versi terbaru dari beberapa berkas lain. Hanya berkas lokal yang dianggap.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] memiliki [[$3|{{PLURAL:$2|sebuah duplikat|$2 duplikat}}]].",
-       "unusedtemplates": "Templat yang tak digunakan",
+       "unusedtemplates": "Templat yang tak terpakai",
        "unusedtemplatestext": "Daftar berikut adalah semua halaman pada ruang nama {{ns:template}} yang tidak dipakai di halaman mana pun.\nCek dahulu pranala lain ke templat tersebut sebelum menghapusnya.",
        "unusedtemplateswlh": "pranala lain",
        "randompage": "Halaman sembarang",
        "randompage-nopages": "Tidak ada halaman pada {{PLURAL:$2||}}ruang nama berikut: $1.",
-       "randomincategory": "Halaman acak dalam kategori",
+       "randomincategory": "Halaman sembarang dalam kategori",
        "randomincategory-invalidcategory": "\"$1\" bukanlah nama kategori yang berlaku.",
        "randomincategory-nopages": "Tidak ada halaman dalam [[:Category:$1]].",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Halaman sembarang di kategori",
+       "randomincategory-submit": "Tuju ke",
        "randomredirect": "Pengalihan sembarang",
        "randomredirect-nopages": "Tak terdapat pengalihan pada ruang nama \"$1\".",
        "statistics": "Statistik",
        "nmembers": "$1 {{PLURAL:$1|isi}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|revisi|revisi}}",
-       "nviews": "dilihat $1 {{PLURAL:$1|kali|kali}}",
        "nimagelinks": "Digunakan pada $1 {{PLURAL:$1|halaman|halaman}}",
        "ntransclusions": "digunakan pada $1 {{PLURAL:$1|halaman|halaman}}",
        "specialpage-empty": "Tak ada yang perlu dilaporkan.",
-       "lonelypages": "Halaman tanpa pranala balik",
+       "lonelypages": "Halaman tanpa pranala balik (yatim)",
        "lonelypagestext": "Halaman-halaman berikut tidak memiliki pranala dari atau ditransklusikan ke halaman mana pun di {{SITENAME}}.",
        "uncategorizedpages": "Halaman yang tak terkategori",
        "uncategorizedcategories": "Kategori yang tak terkategori",
        "uncategorizedimages": "Berkas yang tak terkategori",
        "uncategorizedtemplates": "Templat yang tak terkategori",
-       "unusedcategories": "Kategori yang tak digunakan",
-       "unusedimages": "Berkas yang tak digunakan",
+       "unusedcategories": "Kategori yang tak terpakai (kosong)",
+       "unusedimages": "Berkas yang tak terpakai",
        "wantedcategories": "Kategori yang diinginkan",
        "wantedpages": "Halaman yang diinginkan",
        "wantedpages-summary": "Daftar laman tak tersedia dengan tautan pada mereka, tidak termasuk laman yang hanya memiliki penautan pengalihan pada mereka.Untuk daftar laman tak tersedia yang memiliki penautan pengalihan pada mereka, lihat [[{{#special:BrokenRedirects}}]].",
        "wantedfiletext-nocat": "Berkas-berkas berikut digunakan tetapi tidak ada. Berkas dari repositori asing mungkin tercantum meskipun ada. Setiap \"false positive\" akan <del>dicoret</del>.",
        "wantedfiletext-nocat-noforeign": "Berkas berikut ini digunakan tetapi tidak ada.",
        "wantedtemplates": "Templat yang diinginkan",
-       "mostlinked": "Halaman yang tersering dituju",
-       "mostlinkedcategories": "Kategori yang tersering digunakan",
-       "mostlinkedtemplates": "Halaman yang paling ditransklusikan",
+       "mostlinked": "Halaman yang paling digunakan (dituju)",
+       "mostlinkedcategories": "Kategori yang paling digunakan",
+       "mostlinkedtemplates": "Templat yang paling digunakan (ditransklusikan)",
        "mostcategories": "Halaman dengan kategori terbanyak",
-       "mostimages": "Berkas yang tersering digunakan",
+       "mostimages": "Berkas yang paling digunakan",
        "mostinterwikis": "Halaman dengan interwiki terbanyak",
        "mostrevisions": "Halaman dengan perubahan terbanyak",
-       "prefixindex": "Semua halaman dengan awalan",
+       "prefixindex": "Semua halaman dengan awalan (Indeks awalan)",
        "prefixindex-namespace": "Semua halaman dengan awalan (ruang nama $1)",
        "prefixindex-strip": "Strip awalan dalam daftar",
        "shortpages": "Halaman pendek",
        "booksources-invalid-isbn": "ISBN yang diberikan tampaknya tidak valid; periksa kesalahan penyalinan dari sumber asli.",
        "specialloguserlabel": "Pengguna:",
        "speciallogtitlelabel": "Target (judul atau pengguna):",
-       "log": "Log",
+       "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).",
        "logempty": "Tidak ditemukan entri log yang sesuai.",
        "log-title-wildcard": "Cari judul yang diawali dengan teks tersebut",
        "showhideselectedlogentries": "Tampilkan/sembunyikan entri log terpilih",
        "log-edit-tags": "Sunting tag dari entri log yang terpilih",
-       "allpages": "Semua halaman",
+       "allpages": "Daftar halaman",
        "nextpage": "Halaman selanjutnya ($1)",
        "prevpage": "Halaman sebelumnya ($1)",
        "allpagesfrom": "Tampilkan halaman mulai dari:",
        "cachedspecial-viewing-cached-ttl": "Anda melihat versi tembolok halaman ini, yang mungkin sudah berumur $1.",
        "cachedspecial-viewing-cached-ts": "Anda melihat versi tembolok halaman ini, yang mungkin tidak akan benar-benar aktual.",
        "cachedspecial-refresh-now": "Lihat versi terbaru.",
-       "categories": "Kategori",
+       "categories": "Daftar kategori",
        "categoriespagetext": "{{PLURAL:$1|Kategori berikut|Kategori-kategori berikut}} memiliki isi halaman atau media.\n[[Special:UnusedCategories|Kategori yang tak digunakan]] tidak ditampilkan di sini.\nLihat pula [[Special:WantedCategories|kategori yang diinginkan]].",
        "categoriesfrom": "Tampilkan kategori-kategori dimulai dengan:",
        "special-categories-sort-count": "urutkan menurut jumlah",
        "activeusers-hidebots": "Sembunyikan bot",
        "activeusers-hidesysops": "Sembunyikan pengurus",
        "activeusers-noresult": "Pengguna tidak ditemukan.",
-       "listgrouprights": "Daftar kelompok pengguna",
+       "listgrouprights": "Daftar hak kelompok",
        "listgrouprights-summary": "Berikut adalah daftar kelompok pengguna yang terdapat di wiki ini, dengan daftar hak akses mereka masing-masing. Informasi lebih lanjut mengenai hak masing-masing dapat ditemukan di [[{{MediaWiki:Listgrouprights-helppage}}|halaman bantuan hak pengguna]].",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Hak yang diberikan</span>\n* <span class=\"listgrouprights-revoked\">Hak yang dicabut</span>",
        "listgrouprights-group": "Kelompok",
        "unblocked-range": "$1 telah diblokir",
        "unblocked-id": "Blokir $1 telah dicabut",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] telah dibuka blokirnya.",
-       "blocklist": "Pengguna terblokir",
-       "ipblocklist": "Pengguna terblokir",
+       "blocklist": "Daftar pemblokiran pengguna",
+       "ipblocklist": "Daftar pemblokiran pengguna",
        "ipblocklist-legend": "Cari pengguna yang diblokir",
        "blocklist-userblocks": "Sembunyikan pemblokiran akun",
        "blocklist-tempblocks": "Sembunyikan pemblokiran sementara",
        "tooltip-pt-logout": "Keluar log",
        "tooltip-pt-createaccount": "Anda dianjurkan untuk membuat akun dan masuk log; meskipun, hal itu tidak diwajibkan",
        "tooltip-ca-talk": "Pembicaraan halaman isi",
-       "tooltip-ca-edit": "Anda dapat menyunting halaman ini. Gunakan tombol pratayang sebelum menyimpan",
+       "tooltip-ca-edit": "Sunting halaman ini",
        "tooltip-ca-addsection": "Mulai bagian baru",
        "tooltip-ca-viewsource": "Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.",
        "tooltip-ca-history": "Revisi sebelumnya dari halaman ini.",
        "fileduplicatesearch-noresults": "Tidak ditemukan berkas dengan nama \"$1\".",
        "specialpages": "Halaman istimewa",
        "specialpages-note-top": "Keterangan",
-       "specialpages-note": "* Halaman istimewa normal.\n* <span class=\"mw-specialpagerestricted\">Halaman istimewa terlarang.</span>",
+       "specialpages-note": "* Halaman istimewa normal.\n* <span class=\"mw-specialpagerestricted\">Halaman istimewa terbatas</span> (hanya untuk pengurus).",
        "specialpages-group-maintenance": "Laporan pemeliharaan",
        "specialpages-group-other": "Lain-lain",
        "specialpages-group-login": "Masuk log / mendaftar",
index b95a058..a31224a 100644 (file)
@@ -36,7 +36,7 @@
        "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-uselivepreview": "Usaren ti agdama a panagipadas (eksperimental)",
+       "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",
        "pool-queuefull": "Napunnon ti pagyanan ti pagur-urayan",
        "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}}",
        "aboutpage": "Project:Maipanggep",
        "copyright": "Ti linaon ket magun-od babaen ti $1 malaksid no adda sabali a naibaga.",
        "disclaimers": "Dagiti renunsia",
        "disclaimerpage": "Project:Sapasap a renunsia",
        "edithelp": "Tulong ti panagurnos",
+       "helppage-top-gethelp": "Tulong",
        "mainpage": "Umuna a Panid",
        "mainpage-description": "Umuna a Panid",
        "policy-url": "Project:Annuroten",
        "readonly_lag": "Automatiko a narikpan ti database kabayatan a dagiti tagabu a server ti database ket kumamakam iti agturay",
        "internalerror": "Akin-uneg a biddut",
        "internalerror_info": "Akin-uneg a biddut: $1",
+       "internalerror-fatal-exception": "Nadadael a pannakailasin iti kita \"$1\"",
        "filecopyerror": "Saan a makopia ti papeles $1 iti $2.",
        "filerenameerror": "Saan a managanan manen ti papeles \"$1\" iti \"$2\".",
        "filedeleteerror": "Saan a maikkat ti papeles \"$1\".",
        "no-null-revision": "Saan a makapartuat ti awan serbina a panagbaliw para iti panid ti \"$1\"",
        "badtitle": "Madi a titulo",
        "badtitletext": "Ti kiniddaw idi a titulo ti panid ket imbalido, blanko, wenno maysa a saan a husto a naisilpo a silpo ti pagsasao wenno interwiki a titulo.\nMabalin nga aglaon ti a maysa wenno ad-adu a karakter a saan a mausar kadagiti titulo.",
+       "title-invalid-empty": "Ti kiniddaw a titulo ti panid ket awan linaon wenno aglaon laeng ti nagan ti espasio.",
+       "title-invalid-utf8": "Ti kiniddaw a titulo ti panid ket aglaon ti imbalido panagsasaruno ti UTF-8.",
+       "title-invalid-interwiki": "Ti kiniddaw a titulo ti panid ket aglaon ti maysa a silpo ti interwiki a saan a mabalin a mausar kadagiti titulo.",
+       "title-invalid-talk-namespace": "Ti kiniddaw a titulo ti panid ket mangitudo iti tungtungan a panid a saan a mabalin nga adda.",
+       "title-invalid-characters": "Ti kiniddaw a titulo ti panid ket aglaon kadagiti imbalido a karakter: \"$1\".",
+       "title-invalid-relative": "Ti titulo ket addaan iti relatibo a dalan. Dagiti relatibo a titulo ti panid (./, ../) ket imbalido, gapu ta dagitoy ket kankanayon a saan a maabutan no usaren babaen ti pagbasabasa ti agar-aramat.",
+       "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.",
        "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.",
        "wrongpassword": "Saan a husto ti naikabil a kontrasenias. \nPangngaasi a padasen manen.",
        "wrongpasswordempty": "Blanko 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.",
        "mailmypassword": "Isaad manen ti kontrasenias",
        "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.}}",
-       "passwordreset-legend": "Isaad manen ti kontrasenias",
        "passwordreset-disabled": "Nabaldado dagiti panangisaad manen ti kontrasenias iti daytoy a wiki.",
        "passwordreset-emaildisabled": "Dagiti langa ti esurat ket nabaldado iti daytoy a wiki.",
        "passwordreset-username": "Nagan ti agar-aramat:",
        "resettokens": "Isaad manen dagiti tandaan",
        "resettokens-text": "Mabalinmo nga isaad manen dagiti tandaan a mangpalubos ti panagserrek ti naisangayan a pribado datos a mainaig ti pakabilangam ditoy.\n\nAramidem daytoy no aksidente nga inbingaymo dagitoy iti sabali wenno ti pakabilangam ket nakomprimiso.",
        "resettokens-no-tokens": "Awan dagiti maisaad manen a tandaan.",
-       "resettokens-legend": "Isaad manen dagiti tandaan",
        "resettokens-tokens": "Dagiti tandaan:",
        "resettokens-token-label": "$1 (agdama a pateg: $2)",
        "resettokens-watchlist-token": "Tandaan para iti pakan ti web (Atom/RSS) kadagiti [[Special:Watchlist|panagbalbaliw ti pampanid iti listaan ti bambantayam]]",
        "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.",
+       "selfredirect": "<strong>Ballaag:</strong> Ibawbaw-ingmo daytoy a panid iti isu met laeng a panid.\nMabalinmo nga innaganan ti kamali a puntaan para iti baw-ing, wenno mabalin nga ur-urnosem ti kamali a panid.\nNo pindutem manen ti \"{{int:savearticle}}\" , mapartuatto lattan ti baw-ing.",
        "missingcommenttext": "Pangngaasi nga agikabil ti komentario dita baba.",
        "missingcommentheader": "<strong>Palagip:</strong> Saanka a nakaited iti suheto/paulo para iti daytoy a komentario.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
        "summary-preview": "Naipadas a pakabuklan:",
        "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.",
        "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>",
+       "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.",
        "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:",
        "content-model-text": "naranas a testo",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Awan linaon a banag",
+       "content-json-empty-array": "Awan linaon a rimpuok",
+       "duplicate-args-warning": "<strong>Ballaag:</strong> Tawtawagan ti [[:$1]] ti [[:$2]] iti ad-adu ngem maysa a pateg para iti parametro \"$3\". Mausarto laeng ti naudi a naited a pateg.",
        "duplicate-args-category": "Pampanid nga agus-usar kadagiti duplikado nga argumento kadagiti panagtawag ti plantilia",
        "duplicate-args-category-desc": "Ti panid ket aglaon kadagiti panagtawag ti plantilia nga agus-usar kadagiti duplikado dagiti argumento, a kas ti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> wenno <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Ballaag:</strong> Daytoy a panid ket aglaon ti adu unay kadagiti panagtawag ti nangina a parser.\n\nAdda koman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan iti $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
        "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-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 ti tignay)",
+       "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-showdeleted": "ipakita",
        "revisiondelete": "Ikkaten/isubli dagiti naikkat a rebision",
        "revdelete-nooldid-title": "Imbalido ti puntaan a rebision",
-       "revdelete-nooldid-text": "Mabalin a saanmo nga imbaga dagiti puntaan a rebision iti panagaramid daytoy nga annong, awan ti nainaganan a rebision, wenno padpadasem nga ilemlemmeng ti agdama a rebision.",
+       "revdelete-nooldid-text": "Saanmo nga innaganan ti ania man a puntaan a rebision a pakaaramidan daytoy nga annong, wenno awan ti nainaganan a rebision, wenno padpadasem ti mangilemmeng ti ti agdama a rebision.",
        "revdelete-no-file": "Awan dayta nainaganan a papeles.",
        "revdelete-show-file-confirm": "Siguradoka kadi a kayatmo ti mangkita ti naikkat a rebision ti papeles ti \"<nowiki>$1</nowiki>\" manipud idi $2 idi $3?",
        "revdelete-show-file-submit": "Wen",
        "revdelete-legend": "Isaad dagiti panangigawid ti panagkita",
        "revdelete-hide-text": "Testo ti rebision",
        "revdelete-hide-image": "Ilemmeng ti linaon ti papeles",
-       "revdelete-hide-name": "Ilemmeng ti aramid ken puntaan",
+       "revdelete-hide-name": "Ilemmeng ti puntaan ken dagiti parametro",
        "revdelete-hide-comment": "Pakabuklan ti inurnos",
        "revdelete-hide-user": "Nagan ti agar-amat/IP a pagtaengan ti editor",
        "revdelete-hide-restricted": "Depdepen ti datos manipud kadagiti administrador ken dagiti pay sabali",
        "notextmatches": "Awan dagiti kapadpada a testo ti panid",
        "prevn": "napalabas a {{PLURAL:$1|$1}}",
        "nextn": "sumaruno a {{PLURAL:$1|$1}}",
+       "prev-page": "napalabas a panid",
+       "next-page": "sumaruno a panid",
        "prevn-title": "Napalabas a $1 {{PLURAL:$1|a nagbanagan|kadagiti nagbanagan}}",
        "nextn-title": "Sumaruno a $1 {{PLURAL:$1|a nagbanagan|kadagiti nagbanagan}}",
        "shown-title": "Ipakita ti $1 {{PLURAL:$1|a nagbanagan|kadagiti nagbanagan}}  ti tunggal maysa a panid",
        "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.",
-       "search-error": "Adda maysa a biddut a napasamak bayat nga agbirbiruk:$1",
+       "search-error": "Adda napasamak a biddut bayat nga agbirbiruk: $1",
        "preferences": "Kakaykayatan",
        "mypreferences": "Kakaykayatan",
        "prefs-edits": "Bilang dagiti inurnos:",
        "prefs-personal": "Bariweswes ti agar-aramat",
        "prefs-rc": "Kaudian a balbaliw",
        "prefs-watchlist": "Listaan ti bambantayan",
+       "prefs-editwatchlist": "Urnosen ti listaan ti bambantayan",
+       "prefs-editwatchlist-label": "Urnosen dagiti naikabil iti bambantayam:",
+       "prefs-editwatchlist-edit": "Kitaen ken ikkaten dagiti titulo iti bambantayam",
+       "prefs-editwatchlist-raw": "Urnosen ti naata a listaan ti bambantayan",
+       "prefs-editwatchlist-clear": "Dalusan ti listaan ti bambantayan",
        "prefs-watchlist-days": "Al-aldaw nga iparang iti listaan ti bambantayan:",
        "prefs-watchlist-days-max": "Kapaut nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}",
        "prefs-watchlist-edits": "Kaadu a bilang ti ipakita kadagiti sinukatan iti napadakkel a listaan ti bambantayan:",
        "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}}",
-       "recentchangescount": "Bilang dagiti inurnos nga ipakita babaen ti kinasigud:",
+       "recentchangescount": "Bilang dagiti inurnos nga ipakita babaen ti kasisigud:",
        "prefs-help-recentchangescount": "Daytoy ket mangiraman iti kaudian a balbaliw, dagiti pakasaritaan ti panid, ken dagiti listaan.",
        "prefs-help-watchlist-token2": "Daytoy ti sekreto a tulbek iti pakan ti web iti listaan ti bambantayam.\nTi sinoman a makaammo daytoy ket mabalinda a basaen ti listaan ti bambantayam, isu a saanmo nga ipabingay.\nNo masapulmo, [[Special:ResetTokens|mabalinmo nga isaad manen]].",
        "savedprefs": "Naidulinen dagiti kakaykayatam.",
        "prefs-files": "Dagiti papeles",
        "prefs-custom-css": "Naiduma a CSS",
        "prefs-custom-js": "Naiduma a JavaScript",
-       "prefs-common-css-js": "Bingay a CSS/JavaScript dagiti amin a kudil:",
+       "prefs-common-css-js": "Bingay a CSS/JavaScript para kadagiti amin a kudil:",
        "prefs-reset-intro": "Mabalinmo nga usaren daytoy a panid tapno maisublim dagita kakaykayatam iti kasisigud iti daytoy a wiki.\nNgem saanto a mabalinen nga ipasubli.",
        "prefs-emailconfirm-label": "Pammasingked ti esurat:",
        "youremail": "Esurat:",
        "userrights-lookup-user": "Agtaripato kadagiti grupo ti agar-aramat",
        "userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
        "editusergroup": "Urnosen dagiti grupo ti agar-aramat",
-       "editinguser": "Suksukatan ti karbengan ti agar-aramat ni <strong>[[User:$1|$1]]</strong> $2",
+       "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:",
        "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-passwordreset": "Agkita kadagiti esurat ti panangisaad manen ti kontrasenias",
+       "right-managechangetags": "Agpartuat ken agikkat kadagiti [[Special:Tags|etiketa]] manipud ti 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",
        "newuserlogpagetext": "Daytoy ket listaan dagiti pannakapartuat iti agar-aramat.",
        "rightslog": "Listaan dagiti karbengan ti agar-aramat",
        "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-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-history": "pakasaritaan",
        "uploaderror": "Biddut ti panagikarga",
        "upload-recreate-warning": "<strong>Ballag: Ti papeles babaen ti dayta a nagan ket naikkat wenno naiyalis.</strong>\n\nTi listaan ti panagikkat ken panagiyalis para iti daytoy a panid ket naited ditoy para iti pakainugotan:",
        "uploadtext": "Usaren ti porma dita baba tapno makaikarga iti papeles.\nTi panagkita wenno panagbiruk ti dati a naikarga a papeles mapan idiay [[Special:FileList|listaan dagiti naikarga a papeles]], dagiti naikarga wenno naikarga manen ket nailista pay idiay [[Special:Log/upload|listaan ti panagikarga]], dagiti panagikkat ket idiay [[Special:Log/delete|listaan ti panagikkat]].\n\nTi panangiraman ti papeles iti panid, usaren ti silpo a kas dagiti sumaganad a porma:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> tapno mausar ti napno a bersion ti papeles \n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> tapno mausar ti 200 a piksel a kalawa a panagiparang iti kanigid a margin nga addaan iti \"alt text\"a kas ti deskripsion\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> para iti dagus a panangisilpo iti papeles nga awan ti panangipakita ti papeles",
-       "upload-permitted": "Dagiti maipalubos a kita ti papeles: $1.",
-       "upload-preferred": "Dagiti kaykayat a kita ti papeles: $1.",
-       "upload-prohibited": "Dagiti maiparit a kita ti papeles: $1.",
+       "upload-permitted": "Maipalubos a {{PLURAL:$2|kita|kitkita}} ti papeles: $1.",
+       "upload-preferred": "Kaykayat a {{PLURAL:$2|kita|kitkita}} ti papeles: $1.",
+       "upload-prohibited": "Maiparit a {{PLURAL:$2|kita|kitkita}} ti papeles: $1.",
        "uploadlogpage": "Listaan ti panagikarga",
        "uploadlogpagetext": "Dita baba ket ti listaan dagiti kaudian a panangikarga iti papeles.\nKitaen ti [[Special:NewFiles|galeria dagiti baro a papeles]] para iti adu pay a bisual a pakabuklan.",
        "filename": "Nagan ti papeles",
        "uploaddisabledtext": "Nabaldado dagiti panagikarga ti papeles.",
        "php-uploaddisabledtext": "Dagiti panangikarga ti papeles ket nabaldado iti PHP.\nPanngaasi a kitaem ti pannakaisaad ti panagikarga ti papeles.",
        "uploadscripted": "Daytoy a papeles ket naglaon ti HTML wenno eskritu ti kodigo a mabalin a kamali nga inpatarus babaen ti pagbasabasa ti web.",
+       "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-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\".",
        "uploadinvalidxml": "Ti XML iti naikarga a papeles ket saan a maiwaswas.",
        "uploadvirus": "Ti papeles ket aglaon ti birus! \nDagiti salaysay: $1",
        "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.",
        "imgfile": "papeles",
        "listfiles": "Listaan ti papeles",
        "listfiles_thumb": "Bassit a ladawan",
        "randomincategory-nopages": "Awan ti pampanid iti kategoria ti [[:Category:$1]].",
        "randomincategory-category": "Kategoria:",
        "randomincategory-legend": "Pugto a panid iti kategoria",
+       "randomincategory-submit": "Inkan",
        "randomredirect": "Pugto a baw-ing",
        "randomredirect-nopages": "Awan dagiti baw-ing iti daytoy a nagan ti espasio ti \"$1\".",
        "statistics": "Estadistika",
        "nmembers": "$1 a {{PLURAL:$1|kameng|kamkameng}}",
        "nmemberschanged": "$1 → $2 a {{PLURAL:$2|kameng|kamkameng}}",
        "nrevisions": "$1 {{PLURAL:$1|a rebison|kadagiti rebision}}",
-       "nviews": "$1 {{PLURAL:$1|a panangkita|kadagiti panangkita}}",
        "nimagelinks": "Inusar iti $1 a {{PLURAL:$1|panid|pampanid}}",
        "ntransclusions": "inusar iti $1 a {{PLURAL:$1|panid|pampanid}}",
        "specialpage-empty": "Awan dagiti nagbanagan daytoy a reporta.",
        "unusedimages": "Dagiti saan a nausar a papeles",
        "wantedcategories": "Dagiti makiddaw a kategoria",
        "wantedpages": "Dagiti makiddaw a panid",
+       "wantedpages-summary": "Listaan dagiti awan a panid a kaaduan a nakasilpo kaniada, malaksid kadagiti panid nga adda laeng kadagiti bawing a nakasilpo kaniada. Para iti listaan kadagiti awan a panid nga addaan kadagiti baw-ing a nakasilpo kaniada, kitaen [[{{#special:BrokenRedirects}}|ti listaan dagiti naputed a baw-ing]].",
        "wantedpages-badtitle": "Imbalido a titulo iti agasmang ti nagbanagan: $1",
        "wantedfiles": "Dagiti makiddaw a papeles",
        "wantedfiletext-cat": "Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles manipud kadagiti ganganaet a repositorio ket mabalin a mailista urayno adda. Ti kasta man a saan nga umno a positibo ket <del>maikkatto</del>. Iti maipatinayon, dagiti panid nga agisengngat kadagiti papeles nga awan ket nailista iti [[:$1]].",
        "booksources-search": "Biruken",
        "booksources-text": "Dita baba ket listaan dagiti silpo ti sabali a sitio nga aglaklako ti baro ken saan a nausar a liblibro, ken mabalin nga addaan pay iti adu a pakaammo a maipanggep kadagiti libro a birbirukem:",
        "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud ti kasisigud a taudan.",
-       "specialloguserlabel": "Perpormer:",
+       "specialloguserlabel": "Nangitungpal:",
        "speciallogtitlelabel": "Puntaan (titulo wenno agar-aramat):",
        "log": "Dagiti listaan",
        "all-logs-page": "Amin a listaan a publiko",
        "logempty": "Awan dagiti maipada a banag iti listaan.",
        "log-title-wildcard": "Agbiruk kadagiti titulo a mangrugi iti daytoy a testo",
        "showhideselectedlogentries": "Baliwan ti panagkita kadagiti napili a naikabil iti listaan",
+       "log-edit-tags": "Urnosen dagiti etiketa iti napili a listaan ti naikabkabil",
        "allpages": "Amin a pampanid",
        "nextpage": "sumaruno a panid ($1)",
        "prevpage": "Napalabas a panid ($1)",
        "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 \"Esurat\" nga annong iti {{SITENAME}}",
+       "emailuserfooter": "Daytoy nga esurat ket impatulod babaen ni $1 kenni $2 iti \"{{int:emailpage}}\" nga annong iti {{SITENAME}}",
        "usermessage-summary": "Pumanpanaw iti mesahe ti sistema.",
        "usermessage-editor": "Mensahero ti sistema",
        "watchlist": "Bambantayan",
        "namespace": "Nagan ti espasio:",
        "invert": "Baliktaden ti napili",
        "tooltip-invert": "Ikur-it daytoy a kahon ti panagilemmeng kadagiti sinukatan a panid iti uneg ti napili a nagan ti espasio (ken ti nairaman a nagan ti espasio no naikur-it)",
+       "tooltip-whatlinkshere-invert": "Ikur-it daytoy a kahon tapno ilemmeng dagiti silpo manipud kadagiti panid iti uneg ti napili a nagan ti espaio.",
        "namespace_association": "Mainaig a nagan ti espasio",
        "tooltip-namespace_association": "Ikur-it daytoy a kahon ti panagiraman ti tungtungan wenno suheto ti nagan ti espasio a nairaman kadagiti napili a nagan ti espasio",
        "blanknamespace": "(Umuna)",
        "thumbnail-temp-create": "Saan a makapartuat ti temporario a bassit a ladawan ti papeles",
        "thumbnail-dest-create": "Saan a maidulin ti basit a ladawan idiay pagipanan",
        "thumbnail_invalid_params": "Imbalido dagiti parametro ti bassit a ladawan",
+       "thumbnail_toobigimagearea": "Papeles a dakdakkel dagiti dimensionna ngem $1",
        "thumbnail_dest_directory": "Saan a nakapartuat ti pangipanan a direktorio.",
        "thumbnail_image-type": "Daytoy a kita ti ladawan ket saan a nasuportaran",
        "thumbnail_gd-library": "Saan a kompleto a konpigurasion ti biblioteka ti GD: Awan ti annong ti $1",
        "thumbnail_image-missing": "Kasla awan daytoy a papeles: $1",
        "thumbnail_image-failure-limit": "Adu unayen dagiti nabiit a napaay a panagipadas ($1 wenno ad-adu) a panangiparamg daytoy bassit a ladawan. Pangngaasi a padasen manen intono madamdama.",
        "import": "Agala kadagiti panid",
-       "importinterwiki": "Agala ti transwiki",
-       "import-interwiki-text": "Agpilika ti wiki ken titulo ti panid nga alaem.\nDagiti rebision ti petsa ken dagiti nagan ti mannurat ket maipreserba.\nAmin a transwiki nga alaem ket mailista iti [[Special:Log/import|listaan ti panagala]].",
+       "importinterwiki": "Agala manipud iti sabali a wiki",
+       "import-interwiki-text": "Agpilika ti wiki ken titulo ti panid nga alaem.\nDagiti rebision ti petsa ken dagiti nagan ti mannurat ket maipreserba.\nAmin dagiti naala manipud kadagiti sabali a wiki ket mailista iti [[Special:Log/import|listaan ti panagala]].",
        "import-interwiki-sourcewiki": "Taudan a wiki:",
        "import-interwiki-sourcepage": "Taudan a panid:",
        "import-interwiki-history": "Kopiaen amin dagiti rebision ti pakasaritaan daytoy a panid",
        "import-interwiki-templates": "Iraman amin dagiti plantilia",
        "import-interwiki-submit": "Agala",
+       "import-mapping-default": "Agala kadagiti kasisigud a lokasion",
+       "import-mapping-namespace": "Agala a mangipan iti nagan ti espasio:",
+       "import-mapping-subpage": "Alaen a kas dagiti subpanid ti sumaganad a panid:",
        "import-upload-filename": "Nagan ti papeles:",
        "import-comment": "Komentario:",
        "importtext": "Pangngaasi nga ipanmo ti papeles manipud ti nagtaudan a wiki nga agusar ti [[Special:Export|ramit ti panagipan]].\nIdulinmo iti bukodmo a kompiuter ken ikarga ditoy.",
        "importcantopen": "Saan a maluktan ti innala a papeles",
        "importbadinterwiki": "Saan a nasayaat a silpo ti interwiki",
        "importsuccess": "Nalpasen ti panagala!",
-       "importnosources": "Awan ti innala a taudan ti transwiki ti naipalawag ken ti dagus a pakasaritaan ti panagikarga ket nabaldado.",
+       "importnosources": "Awan dagiti wiki ti naipalawag a pagalaan ken ti dagus a pakasaritaan dagiti panagikarga ket nabaldado.",
        "importnofile": "Awan ti innalam a papeles ti naikarga.",
        "importuploaderrorsize": "Ti panagikarga ti innala a papeles ket napaay.\nTi papeles ket dakdakel ngem ti maipalubos a kadakkel ti maikarga.",
        "importuploaderrorpartial": "Ti panagikarga ti innala a papeles ket napaay.\nPaset laeng ti papeles ti naikarga.",
        "javascripttest": "Panagsubok ti JavaScript",
        "javascripttest-pagetext-noframework": "Daytoy a panid ket naireserba para iti panagpataray kadagiti panagsubok ti JavaScript.",
        "javascripttest-pagetext-unknownframework": "Di ammo a tabas ti panagsubok ti \"$1\".",
+       "javascripttest-pagetext-unknownaction": "Di ammo a tignay ti \"$1\".",
        "javascripttest-pagetext-frameworks": "Pangngaasi nga agpili ti maysa kadagiti sumaganad a tabas ti panagsubok: $1",
        "javascripttest-pagetext-skins": "Agpili ti kudil a pangipatarayan kadagiti panagsubok:",
        "javascripttest-qunit-intro": "Kitaen ti [ $1 dukomentasion ti panagsubok] idiay mediawiki.org.",
        "pageinfo-protect-cascading-yes": "Wen",
        "pageinfo-protect-cascading-from": "Dagiti panagsalaknib ket agsariap manipud ti",
        "pageinfo-category-info": "Pakaammo ti kategoria",
+       "pageinfo-category-total": "Dagup a bilang ti kamkameng",
        "pageinfo-category-pages": "Bilang dagiti panid",
        "pageinfo-category-subcats": "Bilang dagiti subkategoria",
        "pageinfo-category-files": "Bilang dagiti papeles",
        "patrol-log-page": "Listaan ti napatruliaan",
        "patrol-log-header": "Daytoy ket listaan dagiti napatruliaan a rebision.",
        "log-show-hide-patrol": "$1 listaan ti napatruliaan",
+       "log-show-hide-tag": "$1 ti listaan ti etiketa",
        "deletedrevision": "Naikkat a daan a rebision ti $1",
        "filedeleteerror-short": "Biddut ti panakaikkat ti papeles: $1",
        "filedeleteerror-long": "Adda nasarakan a biddut idi agikikkat ti papeles:\n\n$1",
        "version-entrypoints": "Pagserrekan a puntos dagiti URL",
        "version-entrypoints-header-entrypoint": "Pagserrekan a puntos",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Dagiti naisaad a biblioteka",
+       "version-libraries-library": "Biblioteka",
+       "version-libraries-version": "Bersion",
+       "version-libraries-license": "Lisensia",
+       "version-libraries-description": "Deskripsion",
+       "version-libraries-authors": "Dagiti mannurat",
        "redirect": "Baw-ing babaen ti papeles, agar-aramat, panid wenno ID ti rebision",
        "redirect-legend": "Ibaw-ing iti papeles wenno panid",
        "redirect-summary": "Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti rebision wenno ID ti panid), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panagusar:\n[[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]], wenno\n[[{{#Special:Redirect}}/user/101]].",
        "tags-tag": "Nagan ti etiketa",
        "tags-display-header": "Tabas dagiti listaan ti panagsukat",
        "tags-description-header": "Napno a deskripsion ti kaibuksilan.",
+       "tags-source-header": "Taudan",
        "tags-active-header": "Aktibo?",
        "tags-hitcount-header": "Dagiti adda etiketana a sinukatan",
+       "tags-actions-header": "Dagiti aramid",
        "tags-active-yes": "Wen",
        "tags-active-no": "Saan",
+       "tags-source-extension": "Naipalawag babaen ti maysa a pagpaatiddog",
+       "tags-source-manual": "Manual a naipakat babaen dagiti agar-aramat ken dagiti bot",
+       "tags-source-none": "Saan a maus-usar",
        "tags-edit": "urnosen",
+       "tags-delete": "ikkaten",
        "tags-hitcount": "$1 {{PLURAL:$1|a sinukatan|a sinuksukatan}}",
+       "tags-create-heading": "Agpartuat iti baro nga etiketa",
+       "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-already-exists": "Addan ti 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-delete-reason": "Rason:",
+       "tags-delete-not-found": "Awan ti etiketa ti \"$1\".",
+       "tags-delete-too-many-uses": "Ti etiketa ti \"$1\" ket naipakat iti ad-adu ngem $2 {{PLURAL:$2|a rebision|kadagiti rebision}}, a ti kaibuksillanna ket saan a mabalin a maikkat.",
+       "tags-delete-warnings-after-delete": "Ti etiketa ti \"$1\" ket balligi a naikkat, ngem nakita {{PLURAL:$2|ti sumaganad a ballag|dagiti sumaganad a balaag}}:",
+       "tags-activate-reason": "Rason:",
+       "tags-activate-not-found": "Awan ti etiketa ti \"$1\".",
+       "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-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",
+       "tags-edit-manage-link": "Taripatuan dagiti etiketa",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Napili a rebision|Dagiti napili a rebision}} iti [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Ti napili a listaan ti napasamak|Dagiti napili a listaan ti napasamak}}:",
+       "tags-edit-revision-legend": "Aginayon wenno agikkat kadagiti etiketa manipud {{PLURAL:$1|ti daytoy a rebision|kadagiti amin a $1 a rebision}}",
+       "tags-edit-logentry-legend": "Aginayon wenno agikkat kadagiti etiketa manipud {{PLURAL:$1|ti daytoy a listaan ti naikabil|kadagiti amin a $1 a listaan ti naikabkabil}}",
+       "tags-edit-existing-tags": "Dagiti adda nga etiketa:",
+       "tags-edit-existing-tags-none": "''Awan''",
+       "tags-edit-new-tags": "Dagiti baro nga etiketa:",
+       "tags-edit-add": "Inayon dagitoy nga etiketa:",
+       "tags-edit-remove": "Ikkaten dagitoy nga etiketa:",
+       "tags-edit-remove-all-tags": "(ikkaten amin nga etiketa)",
+       "tags-edit-chosen-placeholder": "Agpili kadagiti etiketa",
+       "tags-edit-chosen-no-results": "Awan kadagiti maipada nga etiketa ti nabirukan",
+       "tags-edit-reason": "Rason:",
+       "tags-edit-revision-submit": "Ipakat dagiti binaliwan {{PLURAL:$1|iti daytoy a rebision|kadagiti $1 a rebision}}",
+       "tags-edit-logentry-submit": "Ipakat dagiti panagbaliw {{PLURAL:$1|iti daytoy a listaan ti naikabil|kadagiti $1 a listaan ti naikabkabil}}",
+       "tags-edit-success": "Balligi a naipakat dagiti binaliwan.",
+       "tags-edit-failure": "Saan a maipakat dagiti binaliwan:\n$1",
+       "tags-edit-nooldid-title": "Imbalido a rebision ti puntaan",
+       "tags-edit-nooldid-text": "Saanka a nanginagan ti ania man a rebision a puntaan a pagaramidan daytoy nga annong, wenno awan ti nainaganan a rebision.",
+       "tags-edit-none-selected": "Pangngaasi nga agpili iti saan a basbassit ngem maysa nga inayon wenno ikkaten nga etiketa.",
        "comparepages": "Ipada dagiti panid",
        "compare-page1": "Panid 1",
        "compare-page2": "Panid 2",
        "compare-revision-not-exists": "Awan ti innaganam a rebision.",
        "dberr-problems": "Pasensia! Daytoy a sitio ket agdadama nga agsansanay kadagiti teknikal a pagrigatan.",
        "dberr-again": "Padasem ti aguray kadagiti mano a minuto ken agikarga manen.",
-       "dberr-info": "(Saan a makontak ti server ti database: $1)",
-       "dberr-info-hidden": "(Saan a makontak ti server ti database)",
+       "dberr-info": "(Saan a maserrekan ti server ti database: $1)",
+       "dberr-info-hidden": "(Saan a maserrekan ti database)",
        "dberr-usegoogle": "Iti agdama mabalinmo a padasen ti agbiruk babaen ti Google.",
        "dberr-outofdate": "Palagip a dagiti listaanda kadagiti kukuami a linaon ket mabalin a nagpaso.",
        "dberr-cachederror": "Daytoy ket naidulin a kopia ti kiniddawmo a panid, ken mabalin a saan a kabarbaro.",
        "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",
-       "logentry-delete-delete": "Ni $1 ket {{GENDER:$2|inikkatna}} ti panid ti $3",
+       "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-delete-revision": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita  {{PLURAL:$5|iti panagbaliw |dagiti $5 a panagbaliw}} iti panid $3: $4",
        "revdelete-restricted": "naipakat dagiti panangigawid kadagiti administrador",
        "revdelete-unrestricted": "inikkat dagiti panangigawid para kadagiti administrador",
        "logentry-merge-merge": "Ni $1 ket {{GENDER:$2|intiponna}} ti $3 iti $4 (kadagiti rebision aginggana iti $5)",
-       "logentry-move-move": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid $3 iti $4",
-       "logentry-move-move-noredirect": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 iti $4 a saan a nangibati ti baw-ing",
-       "logentry-move-move_redir": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 iti $4 a nagtuon iti baw-ing",
+       "logentry-move-move": "{{GENDER:$2|Inyalis}} ni $1 ti panid ti $3 iti $4",
+       "logentry-move-move-noredirect": "{{GENDER:$2|Inyalis}} ni $1 ti panid ti $3 iti $4 a saan a nangibati ti baw-ing",
+       "logentry-move-move_redir": "{{GENDER:$2|Inyalis}} ni $1 ti panid ti $3 iti $4 a nagtuon iti baw-ing",
        "logentry-move-move_redir-noredirect": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 iti $4 a nagtuon iti baw-ing a saan a nangibati ti baw-ing",
        "logentry-patrol-patrol": "Ni $1 ket {{GENDER:$2|minarkaanna}} ti rebision ti $4 iti panid ti $3 a napatruliaan",
-       "logentry-patrol-patrol-auto": "Ni $1 ket automatiko a {{GENDER:$2|minarkaanna}} ti rebision ti $4 iti panid ti $3 a napatruliaan",
+       "logentry-patrol-patrol-auto": "Automatiko a {{GENDER:$2|minarkaan}} ni $1 ti rebision ti $4 iti panid ti $3 a napatruliaan",
        "logentry-newusers-newusers": "Ti pakabilangan idi ni $1 ket {{GENDER:$2|napartuat}}",
-       "logentry-newusers-create": "Ti pakabilangan idi ni $1 ket {{GENDER:$2|napartuat}}",
+       "logentry-newusers-create": "{{GENDER:$2|Napartuat}} ti pakabilangan ni agar-aramat $1",
        "logentry-newusers-create2": "Ti pakabilangan ti agar-aramat $3 ket {{GENDER:$2|napartuat}} idi babaen ni $1",
        "logentry-newusers-byemail": "Ti pakabilangan a $3 ket {{GENDER:$2|pinartuat}} idi babaen ni $1 ken ti kontrasenias ket naipatulod idi babaen ti esurat",
-       "logentry-newusers-autocreate": "Ti pakabilangan ti agar-aramat ni $1 ket automatiko a {{GENDER:$2|napartuat}}",
+       "logentry-newusers-autocreate": "Automatiko a {{GENDER:$2|napartuat}} ti pakabilangan ni agar-aramat $1",
        "logentry-rights-rights": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3 manipud ti $4 iti $5",
        "logentry-rights-rights-legacy": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3",
        "logentry-rights-autopromote": "Ni $1 ket automatiko idi a {{GENDER:$2|naipangato}} manipud ti $4 iti $5",
        "logentry-upload-upload": "Ni $1 ket {{GENDER:$2|inkargana}} ti $3",
        "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",
+       "log-name-tag": "Listaan ti etiketa",
        "rightsnone": "(awan)",
        "revdelete-summary": "Pakabuklan ti inurnos",
        "feedback-adding": "Agnaynayon ti feedback iti panid...",
+       "feedback-back": "Agsubli",
        "feedback-bugcheck": "Nasayaaten! Kitaem tapno saan a dagiti adda idin a [$1 nga ammo a parparikut].",
        "feedback-bugnew": "Kinitak. Agireporta iti baro a parikut",
        "feedback-bugornote": "No sisasagakan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti parikut].\nNupay kasta, mausarmo ti nalaka a porma dita baba. Ti komentario nga itedmo ket mainayon iti panid \"[$3 $2], a mairaman ti naganmo nga agar-aramat ken no ania ti pagbasabasa nga us-sarem.",
        "feedback-cancel": "Ukasen",
        "feedback-close": "Nalpasen",
+       "feedback-error-title": "Biddut",
        "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",
        "mediastatistics-table-totalbytes": "Naitiptipon a kadakkel",
        "mediastatistics-header-unknown": "Di ammo",
        "mediastatistics-header-bitmap": "Ladladawan ti bitmap",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Dagiti video",
        "mediastatistics-header-office": "Opisina",
+       "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",
+       "headline-anchor-title": "Isilpo iti daytoy a paset",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Latin napaatiddog",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
-       "special-characters-title-minus": "senial a panagkissay"
+       "special-characters-title-minus": "senial a panagkissay",
+       "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
+       "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1"
 }
index a6b8a8f..b9dbc03 100644 (file)
@@ -19,7 +19,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Macofe",
-                       "Sveinn í Felli"
+                       "Sveinn í Felli",
+                       "Jonbg"
                ]
        },
        "tog-underline": "Undirstrika tengla:",
        "disclaimers": "Fyrirvarar",
        "disclaimerpage": "Project:Almennur fyrirvari",
        "edithelp": "Breytingarhjálp",
+       "helppage-top-gethelp": "Hjálp",
        "mainpage": "Forsíða",
        "mainpage-description": "Forsíða",
        "policy-url": "Project:Samþykktir",
        "resetpass-abort-generic": "Breytingum á lykilorðum hefur verið hætt með viðbót.",
        "passwordreset": "Endurstilla lykilorð",
        "passwordreset-text-one": "Útfylltu þetta eyðublað til þess að endursetja lykilorðið.",
-       "passwordreset-legend": "Endurstilla lykilorð",
        "passwordreset-disabled": "Lokað hefur verið fyrir að endurstilla lykilorð á þessum wiki.",
        "passwordreset-emaildisabled": "Tölvupósteiginleikar hafa verið gerðir óvirkir á þessum wiki.",
        "passwordreset-username": "Notandanafn:",
        "resettokens": "Endurstilla lykla",
        "resettokens-text": "Hér getur þú endurstillt lykla sem veita þér aðgang að ákveðnum persónuupplýsingum um aðganginn þinn.\n\nÞú átt að gera það ef þú ert búin(n) að deila þeim með einhverjum öðrum óviljandi eða ef búið er að brjóta inn í aðganginn þinn.",
        "resettokens-no-tokens": "Það eru engir lyklar að endurstilla.",
-       "resettokens-legend": "Endurstilla lykla",
        "resettokens-tokens": "Lyklar:",
        "resettokens-token-label": "$1 (núverandi gildi: $2)",
        "resettokens-done": "Lyklarnir hafa verið endurstilltir.",
        "right-move": "Færa síður",
        "right-move-subpages": "Færa síður með undirsíðum þeirra",
        "right-move-rootuserpages": "Færa notandasíður",
+       "right-move-categorypages": "Færa flokkasíður",
        "right-movefile": "Færa skrár",
        "right-suppressredirect": "Ekki búa til tilvísun frá gamla nafninu þegar síða er færð",
        "right-upload": "Hlaða inn skrám",
        "action-createpage": "skapa síður",
        "action-createtalk": "skapa spjallsíður",
        "action-createaccount": "skapa þennan notandaaðgang",
+       "action-history": "skoða breytingaskrá þessarar síðu",
        "action-minoredit": "merkja þessa breytingu sem minniháttar",
        "action-move": "færa þessa síðu",
        "action-move-subpages": "færa þessa síðu, og undirsíður hennar",
        "action-move-rootuserpages": "Færa notandasíður",
+       "action-move-categorypages": "færa flokkasíður",
        "action-movefile": "færa þessa skrá",
        "action-upload": "hlaða inn þessari skrá",
        "action-reupload": "yfirrita þessa skrá",
        "nlinks": "$1 {{PLURAL:$1|tengill|tenglar}}",
        "nmembers": "$1 {{PLURAL:$1|meðlimur|meðlimir}}",
        "nrevisions": "$1 {{PLURAL:$1|breyting|breytingar}}",
-       "nviews": "$1 {{PLURAL:$1|fletting|flettingar}}",
        "nimagelinks": "Ítengd á $1 {{PLURAL:$1|síðu|síðum}}",
        "ntransclusions": "Ítengd á $1 {{PLURAL:$1|síðu|síðum}}",
        "specialpage-empty": "Þessi síða er tóm.",
        "allmessages-prefix": "Sía með forskeyti:",
        "allmessages-language": "Tungumál:",
        "allmessages-filter-submit": "Áfram",
+       "allmessages-filter-translate": "Þýða",
        "thumbnail-more": "Stækka",
        "filemissing": "Skrá vantar",
        "thumbnail_error": "Villa við gerð smámyndar: $1",
        "exif-devicesettingdescription": "Lýsing stillinga tækisins",
        "exif-subjectdistancerange": "Svið lengdar á viðfangsefni",
        "exif-imageuniqueid": "Einstakt einkenni myndar",
-       "exif-gpsversionid": "GPS tag útgáfa",
+       "exif-gpsversionid": "Útgáfa GPS-taggs",
        "exif-gpslatituderef": "Norður- eða suður breiddargráða",
        "exif-gpslatitude": "Breiddargráða",
        "exif-gpslongituderef": "Austur- eða vestur lengdargráða",
        "version-antispam": "Amapósts sía",
        "version-other": "Aðrar",
        "version-mediahandlers": "Rekill margmiðlunarskráa",
-       "version-parser-extensiontags": "Þáttuð smáforrita tög",
+       "version-parser-extensiontags": "Tögg í viðauka þáttagreiningar",
        "version-hook-subscribedby": "Í áskrift af",
        "version-version": "($1)",
        "version-license": "MediaWiki leyfi",
+       "version-ext-colheader-description": "Lýsing",
+       "version-license-title": "Leyfi fyrir $1",
        "version-poweredby-credits": "Þessi wiki er knúin af '''[https://www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
        "version-poweredby-others": "aðrir",
        "version-license-info": "MediaWiki er frjáls hugbúnaður; þú mátt endurútgefa hann og/eða breyta honum undir GNU General Public leyfi eins og það er gefið út af Free Software stofnuninni, annaðhvort útgáfu 2 eða (að þínu mati) hvaða nýrri útgáfa sem er.\n\nMediaWiki er útgefin í þeirri von að hann sé gagnlegur, en ÁN ALLRAR ÁBYRGÐAR; þar meðtalið er undanskilin ábyrgð við MARKAÐSETNINGU og að hugbúnaðurinn VIRKI Í ÁKVEÐNUM TILGANGI. Sjá GNU General Public leyfið fyrir frekari upplýsingar.\n\nÞú ættir að hafa fengið [{{SERVER}}{{SCRIPTPATH}}/COPYING afrit af  GNU General Public leyfinu] með þessum hugbúnaði, en ef ekki, skrifaðu til Free Software stofnunarinnar, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Bandaríkjunum eða [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lestu það á netinu]",
        "version-software-product": "Vara",
        "version-software-version": "Útgáfa",
        "version-entrypoints-header-url": "vefslóð",
+       "version-libraries-version": "Útgáfa",
        "redirect-submit": "Áfram",
        "redirect-lookup": "Fletta upp:",
        "redirect-value": "Gildi:",
        "intentionallyblankpage": "Þessi síða er viljandi höfð tóm.",
        "external_image_whitelist": "#Ekki breyta þessari línu<pre>\n#Settu brot úr reglulegum segðum (bara þann hluta sem er á milli //) hér fyrir neðan\n#Þær verða bornar saman við vefslóðir ytri mynda\n#Þær sem passa saman verða sýndar sem myndir, en hinar eingöngu sem tengill á myndina\n#Línur sem byrja á # verða sýndar sem athugasemdir\n#Þetta er hástafafrjálst\n\n#Settu allar reglulegar segðir fyrir ofan þessa línu. Ekki breyta þessari línu.</pre>",
        "tags": "Breyta virkum tögum",
-       "tag-filter": "[[Special:Tags|Tag]] sía:",
+       "tag-filter": "[[Special:Tags|Tagg]]sía:",
        "tag-filter-submit": "Sía",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tög}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tagg|Tögg}}]]: $2)",
        "tags-title": "Tög",
-       "tags-intro": "Ã\81 Ã¾essari síðu er listi yfir Ã¾au tög sem hugbúnaðurinn gæti merkt breytingar með og merkingu þeirra.",
-       "tags-tag": "Nafn tags",
+       "tags-intro": "Ã\9eessi síða sýnir tögg, sem hugbúnaðurinn gæti merkt breytingar með, og merkingu þeirra.",
+       "tags-tag": "Heiti taggs",
        "tags-display-header": "Útlit í breytingarskrá",
        "tags-description-header": "Tæmandi merkingarlýsing",
        "tags-active-header": "Virkt?",
        "tags-active-yes": "Já",
        "tags-active-no": "Nei",
        "tags-edit": "breyta",
+       "tags-delete": "eyða",
+       "tags-activate": "virkja",
+       "tags-deactivate": "óvirkja",
        "tags-hitcount": "$1 {{PLURAL:$1|breyting|breytingar}}",
+       "tags-manage-no-permission": "Þú hefur ekki leyfi til að stjórna breytingartöggum.",
+       "tags-create-heading": "Stofna nýtt tagg",
+       "tags-create-submit": "Stofna",
+       "tags-create-no-name": "Þú verður að gefa upp heiti taggsins.",
+       "tags-create-invalid-title-chars": "Taggheiti mega ekki að innihalda stafi sem ekki má nota í síðutitlum.",
+       "tags-create-already-exists": "Taggið \"$1\" er nú þegar til.",
+       "tags-delete-title": "Eyða taggi",
+       "tags-delete-reason": "Ástæða:",
+       "tags-delete-not-found": "Tagið \"$1\" er ekki til.",
+       "tags-activate-title": "Virkja tagg",
+       "tags-activate-reason": "Ástæða:",
+       "tags-activate-not-found": "Tagið \"$1\" er ekki til.",
+       "tags-activate-submit": "Virkja",
+       "tags-deactivate-title": "Óvirkja tagg",
+       "tags-deactivate-reason": "Ástæða:",
+       "tags-deactivate-submit": "Óvirkja",
+       "tags-edit-title": "Breyta töggum",
+       "tags-edit-manage-link": "Stjórna töggum",
        "comparepages": "Bera saman síður",
        "compare-page1": "Síða 1",
        "compare-page2": "Síða 2",
        "feedback-bugornote": "Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu villu].\nEf ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemdin þín verður bætt við síðuna \"[$3 $2]\" ásamt notendanafni og nafni vafrarans sem þú ert að nota.",
        "feedback-cancel": "Hætta við",
        "feedback-close": "Búið",
+       "feedback-error-title": "Villa",
        "feedback-error1": "Villa: Óþekkt útkoma frá API",
        "feedback-error2": "Villa: Breytingin mistókst",
        "feedback-error3": "Villa: Ekkert svar frá API",
        "feedback-subject": "Fyrirsögn:",
        "feedback-submit": "Senda",
        "feedback-thanks": "Takk! Ábendingu þinni hefur verið bætt við á síðuna \"[$2 $1]\".",
+       "feedback-thanks-title": "Takk!",
        "searchsuggest-search": "Leita",
        "searchsuggest-containing": "sem innihalda ...",
        "api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.",
        "expand_templates_ok": "Í lagi",
        "expand_templates_remove_comments": "Fjarlægja athugasemdir",
        "expand_templates_preview": "Forskoða",
+       "pagelang-language": "Tungumál",
        "mediastatistics": "Margmiðlunar tölfræði",
        "mediastatistics-summary": "Tölfræði um upphaldar skráar gerðir. Hún inniheldur eingöngu nýjustu útgáfu skráarinnar. Gamlar eða eyddar skrár eru ekki teknar með.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bæti}} ($2; $3%)",
        "special-characters-group-sinhala": "Sinhalskt",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Taílenskt",
-       "special-characters-group-lao": "Laoskt"
+       "special-characters-group-lao": "Laoskt",
+       "mw-widgets-titleinput-description-new-page": "síðan er ekki enn til",
+       "mw-widgets-titleinput-description-redirect": "tilvísun á $1"
 }
index 73bbe8c..3870cd1 100644 (file)
@@ -83,7 +83,8 @@
                        "Toadino2",
                        "Purodha",
                        "TecnoMaster",
-                       "Alexmar983"
+                       "Alexmar983",
+                       "Federico Mugnaini"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "passwordreset": "Reimposta password",
        "passwordreset-text-one": "Compila questo modulo per reimpostare la tua password.",
        "passwordreset-text-many": "{{PLURAL:$1|Compila uno dei campi per ricevere una password temporanea tramite email.}}",
-       "passwordreset-legend": "Reimposta password",
        "passwordreset-disabled": "La reimpostazione delle password è stata disabilitata su questa wiki",
        "passwordreset-emaildisabled": "Le funzionalità di posta elettronica sono state disabilitate su questa wiki.",
        "passwordreset-username": "Nome utente:",
        "resettokens": "Reimposta token",
        "resettokens-text": "Qui puoi reimpostare le chiavi che permettono l'accesso a determinati dati privati associati alla tua utenza.\n\nDovresti farlo se le hai accidentalmente condivise con qualcuno o se la tua utenza è stato compromessa.",
        "resettokens-no-tokens": "Non ci sono token da reimpostare.",
-       "resettokens-legend": "Reimposta token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (valore attuale: $2)",
        "resettokens-watchlist-token": "Token per il feed web (Atom/RSS) delle [[Special:Watchlist|modifiche alle pagine nei tuoi osservati speciali]]",
        "yourdiff": "Differenze",
        "copyrightwarning": "Per favore tieni presente che tutti i contributi a {{SITENAME}} si considerano pubblicati nei termini d'uso della licenza $2 (vedi $1 per maggiori dettagli).\nSe non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera.\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
        "copyrightwarning2": "Per favore tieni presente che tutti i contributi a {{SITENAME}} possono essere modificati, stravolti o cancellati da altri contributori.\nSe non vuoi che i tuoi testi possano essere alterati, allora non inserirli.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera (vedi $1 per maggiori dettagli).\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
+       "editpage-cannot-use-custom-model": "Il modello del contenuto di questa pagina non può essere modificato.",
        "longpageerror": "'''Errore: il testo inviato è lungo {{PLURAL:$1|1|$1}} kilobyte, che è maggiore della dimensione massima consentita ({{PLURAL:$2|1|$2}} kilobyte).'''\nIl testo non può essere salvato.",
        "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:",
        "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-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}}.",
        "badsig": "Errore nella firma non standard, verificare i tag HTML.",
        "badsiglength": "La firma scelta è troppo lunga, non deve superare $1 {{PLURAL:$1|carattere|caratteri}}.",
        "yourgender": "Come riferirsi a te?",
-       "gender-unknown": "Indifferente",
+       "gender-unknown": "Nel menzionarti, il software utilizzerà parole di genere neutrale ogni volta che sarà possibile",
        "gender-male": "È registrato su {{SITENAME}}",
        "gender-female": "È registrata su {{SITENAME}}",
        "prefs-help-gender": "L'impostazione di questa preferenza è opzionale.\nIl software utilizza questo valore per rivolgersi a te e menzionarti agli altri usando il genere grammaticale appropriato.\nQuesta informazione sarà pubblica.",
        "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.",
+       "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-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.",
        "randomincategory-nopages": "Non ci sono pagine in [[:Category:$1]].",
        "randomincategory-category": "Categoria:",
        "randomincategory-legend": "Pagina casuale in una categoria",
+       "randomincategory-submit": "Vai",
        "randomredirect": "Un redirect a caso",
        "randomredirect-nopages": "Non ci sono redirect nel namespace \"$1\".",
        "statistics": "Statistiche",
        "nmembers": "$1 {{PLURAL:$1|elemento|elementi}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|elemento|elementi}}",
        "nrevisions": "$1 {{PLURAL:$1|versione|versioni}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visite}}",
        "nimagelinks": "Utilizzato su $1 {{PLURAL:$1|pagina|pagine}}",
        "ntransclusions": "usato in $1 {{PLURAL:$1|pagina|pagine}}",
        "specialpage-empty": "Questa pagina speciale è attualmente vuota.",
        "unusedimages": "File non utilizzati",
        "wantedcategories": "Categorie richieste",
        "wantedpages": "Pagine più richieste",
-       "wantedpages-summary": "Elenco delle pagine inesistenti con il maggior numero di collegamenti a loro, escludendo le pagine che hanno solo i reindirizzamenti che li collegano. Per un elenco di pagine inesistenti che hanno reindirizzamenti che li collegano, vedere [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Elenco delle pagine inesistenti con il maggior numero di collegamenti a loro, escludendo le pagine che hanno solo i reindirizzamenti che li collegano. Per un elenco di pagine inesistenti che hanno reindirizzamenti che li collegano, vedi [[{{#special:BrokenRedirects}}|l'elenco dei reindirizzamenti errati]].",
        "wantedpages-badtitle": "Titolo non valido nel gruppo di risultati: $1",
        "wantedfiles": "File richiesti",
        "wantedfiletext-cat": "I seguenti file sono utilizzati, ma non esistono. I file ospitati su repository esterni potrebbero essere elencati anche se di fatto esistenti. Questi falsi positivi saranno <del>barrati</del>. Le pagine che incorporano i file che non esistono sono elencate in [[:$1]].",
        "protectedpages-summary": "Questa pagina elenca le pagine esistenti che sono attualmente protette. Per un elenco di titoli protetti dalla creazione, vedi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Solo protezioni ricorsive",
        "protectedpages-noredirect": "Nascondi redirect",
-       "protectedpagesempty": "Al momento non vi sono pagine protette",
+       "protectedpagesempty": "Al momento non esistono pagine protette con i parametri specificati.",
        "protectedpages-timestamp": "Data e ora",
        "protectedpages-page": "Pagina",
        "protectedpages-expiry": "Scadenza",
        "rollback-success": "Annullate le modifiche di $1; pagina riportata all'ultima versione di $2.",
        "sessionfailure-title": "Sessione fallita",
        "sessionfailure": "Si è verificato un problema nella sessione che identifica l'accesso; il sistema non ha eseguito il comando impartito per precauzione. Tornare alla pagina precedente con il tasto 'Indietro' del proprio browser, ricaricare la pagina e riprovare.",
+       "changecontentmodel": "Modifica il modello di contenuto di una pagina",
+       "changecontentmodel-legend": "Modifica il modello di contenuto",
+       "changecontentmodel-title-label": "Titolo della pagina",
+       "changecontentmodel-model-label": "Nuovo modello di contenuto",
+       "changecontentmodel-reason-label": "Motivo:",
+       "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.",
+       "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",
+       "logentry-contentmodel-change-revert": "ripristina",
        "protectlogpage": "Protezioni",
        "protectlogtext": "Di seguito sono elencate le modifiche alle protezioni delle pagine.\nVedi la [[Special:ProtectedPages|lista delle pagine protette]] per l'elenco delle protezioni di pagina attualmente attive.",
        "protectedarticle": "ha protetto \"[[$1]]\"",
        "tooltip-pt-logout": "Uscita (logout)",
        "tooltip-pt-createaccount": "Si consiglia di registrarsi e di effettuare l'accesso, anche se non è obbligatorio",
        "tooltip-ca-talk": "Vedi le discussioni relative a questa pagina",
-       "tooltip-ca-edit": "Puoi modificare questa pagina. Per favore usa il pulsante di anteprima prima di salvare",
+       "tooltip-ca-edit": "Modifica questa pagina",
        "tooltip-ca-addsection": "Inizia una nuova sezione",
        "tooltip-ca-viewsource": "Questa pagina è protetta, ma puoi vedere il suo codice sorgente",
        "tooltip-ca-history": "Versioni precedenti di questa pagina",
        "version-libraries": "Librerie installate",
        "version-libraries-library": "Libreria",
        "version-libraries-version": "Versione",
+       "version-libraries-license": "Licenza",
+       "version-libraries-description": "Descrizione",
+       "version-libraries-authors": "Autori",
        "redirect": "Reindirizzamento da file, utente, pagina o versione",
        "redirect-legend": "Reindirizza a un file o una pagina",
        "redirect-summary": "Questa pagina speciale reindirizza a un file (specificando il nome del file), a una pagina (specificando un ID di versione o un ID pagina) o a un utente (specificando un ID utente numerico).\nEsempi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "lineetta enne",
        "special-characters-title-emdash": "lineetta emme",
-       "special-characters-title-minus": "segno meno"
+       "special-characters-title-minus": "segno meno",
+       "mw-widgets-titleinput-description-new-page": "questa pagina non esiste ancora",
+       "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1"
 }
index 53daed6..b77811c 100644 (file)
@@ -65,7 +65,8 @@
                        "Los688",
                        "朝彦",
                        "Otokoume",
-                       "赤城。"
+                       "赤城。",
+                       "Sujiniku"
                ]
        },
        "tog-underline": "リンクの下線:",
        "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) のトークン",
        "creating": "「$1」を作成中",
        "editingsection": "「$1」を編集中 (節単位)",
        "editingcomment": "「$1」を編集中 (新しい節)",
-       "editconflict": "編集競合: $1",
+       "editconflict": "編集競合: $1",
        "explainconflict": "このページを編集し始めた後に、他の誰かがこのページを変更しました。\n上側のテキスト領域は現在の最新の状態です。\n編集していた文章は下側のテキスト領域に示されています。\n編集していた文章を、上側のテキスト領域の、既存の文章に組み込んでください。\n上側のテキスト領域の内容<strong>だけ</strong>が、「{{int:savearticle}}」をクリックした時に実際に保存されます。",
        "yourtext": "編集中の文章",
        "storedversion": "保存された版",
        "content-model-css": "CSS",
        "content-json-empty-object": "空のオブジェクト",
        "content-json-empty-array": "空の配列",
+       "duplicate-args-warning": "<strong>警告:</strong> [[:$1]]は「$3」パラメータの値が複数存在する[[:$2]]を呼び出しています。提供されている最後の値のみが使用されます。",
        "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{{PLURAL:$2|呼び出しを $2 回}}未満にしてください ({{PLURAL:$1|現在は $1 回}})。",
        "badsig": "署名用のソースが正しくありません。\nHTMLタグを見直してください。",
        "badsiglength": "署名が長すぎます。\n$1 {{PLURAL:$1|文字}}以下である必要があります。",
        "yourgender": "表示に使用する性別",
-       "gender-unknown": "未指定",
+       "gender-unknown": "あなたに言及する時、ソフトウェアは可能な限り、性別が中性の単語を使おうとします。",
        "gender-male": "男",
        "gender-female": "女",
        "prefs-help-gender": "この項目の設定は省略できます。\nソフトウェアが利用者向けの画面表示であなたに言及する際に、適切な文法的性を選択するために使用されます。\nこの情報は公開されます。",
        "right-sendemail": "他の利用者にメールを送信",
        "right-passwordreset": "パスワード再設定メールを閲覧",
        "right-managechangetags": "[[Special:Tags|タグ]]のデータベースにおける作成および削除",
+       "right-changetags": "個々の版とログエントリの任意の[[Special:Tags|タグ]]の追加と削除",
        "newuserlogpage": "アカウント作成記録",
        "newuserlogpagetext": "以下はアカウント作成の記録です。",
        "rightslog": "利用者権限変更記録",
        "uploaddisabledtext": "ファイルのアップロードは、無効になっています。",
        "php-uploaddisabledtext": "ファイルのアップロードがPHPで無効化されています。\nfile_uploadsの設定を確認してください。",
        "uploadscripted": "このファイルは、ウェブブラウザーが誤って解釈してしまうおそれがあるHTMLまたはスクリプトコードを含んでいます。",
+       "uploaded-script-svg": "アップロードされたSVGファイルにスクリプト可能な要素「$1」が見つかりました。",
+       "uploaded-hostile-svg": "アップロードされたSVGファイルのスタイル要素に安全ではないCSSが見つかりました。",
        "uploadscriptednamespace": "この SVG ファイルは無効な名前空間「$1」を含んでいます。",
        "uploadinvalidxml": "アップロードされたファイルに含まれる XML が構文解析できませんでした。",
        "uploadvirus": "このファイルはウイルスを含んでいます!\n詳細: $1",
        "randomincategory-nopages": "カテゴリ [[:Category:$1|$1]] にはページがありません。",
        "randomincategory-category": "カテゴリ:",
        "randomincategory-legend": "カテゴリ内でおまかせ表示",
+       "randomincategory-submit": "表示",
        "randomredirect": "おまかせリダイレクト",
        "randomredirect-nopages": "「$1」名前空間に転送ページはありません。",
        "statistics": "統計",
        "nmembers": "$1項目",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|項目}}",
        "nrevisions": "$1版",
-       "nviews": "$1回の閲覧",
        "nimagelinks": "$1 {{PLURAL:$1|ページ}}で使用",
        "ntransclusions": "$1 {{PLURAL:$1|ページ}}で使用",
        "specialpage-empty": "該当するものはありません。",
        "rollback-success": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。",
        "sessionfailure-title": "セッションの失敗",
        "sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\n前のページへ戻って再度読み込んだ後に、もう一度試してください。",
+       "changecontentmodel-title-label": "ページ タイトル",
+       "changecontentmodel-model-label": "新しい コンテンツ モデル",
+       "changecontentmodel-reason-label": "理由:",
        "protectlogpage": "保護記録",
        "protectlogtext": "以下はページ保護に対する変更の記録です。\n現在、保護レベルを変更できるページについては[[Special:ProtectedPages|保護ページ一覧]]を参照してください。",
        "protectedarticle": "「[[$1]]」を保護しました",
        "movedarticleprotection": "が保護の設定を「[[$2]]」から「[[$1]]」へ移動しました",
        "protect-title": "「$1」の保護レベルを変更",
        "protect-title-notallowed": "「$1」の保護レベルを表示",
-       "prot_1movedto2": "[[$1]] を [[$2]] へ移動",
+       "prot_1movedto2": "[[$1]] を [[$2]] へ移動しました",
        "protect-badnamespace-title": "保護不可能な名前空間",
        "protect-badnamespace-text": "この名前空間のページは保護できません。",
        "protect-norestrictiontypes-text": "利用できる制限の種類がないため、このページは保護できません。",
        "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": "このページは保護されています。\nページのソースを閲覧できます。",
        "tooltip-ca-history": "このページの過去の版",
        "version-libraries": "インストールされているライブラリー",
        "version-libraries-library": "ライブラリー",
        "version-libraries-version": "バージョン",
+       "version-libraries-license": "ライセンス",
+       "version-libraries-description": "説明",
+       "version-libraries-authors": "作者",
        "redirect": "ファイル名、利用者ID、ページID、版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]]",
        "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": "一致するタグが見つかりません",
        "tags-edit-reason": "理由:",
+       "tags-edit-revision-submit": "変更を {{PLURAL:$1|this revision|$1 revisions}} に適用",
+       "tags-edit-logentry-submit": "変更を {{PLURAL:$1|this log entry|$1 log entries}} に適用",
+       "tags-edit-success": "変更が正常に適用されました。",
        "tags-edit-failure": "変更は適用できませんでした: $1",
        "tags-edit-nooldid-title": "無効な対象版",
+       "tags-edit-none-selected": "追加または削除するには、少なくとも1つ以上のタグを選択してください。",
        "comparepages": "ページの比較",
        "compare-page1": "ページ 1",
        "compare-page2": "ページ 2",
        "log-name-managetags": "タグ管理記録",
        "log-description-managetags": "このページは[[Special:Tags|タグ]]に関係する管理タスクをリストアップしています。ログには管理者によって手動で実行された操作の記録しか記載されていません。ウィキ・ソフトウェアによって、ログを残さずにタグが作成・削除されている場合があります。",
        "logentry-managetags-create": "$1 がタグ「$4」を{{GENDER:$2|作成しました}}",
+       "log-name-tag": "タグ記録",
        "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|除去しました}}",
        "feedback-error1": "エラー: 認識できない結果を API が返しました",
        "feedback-error2": "エラー: 編集に失敗しました",
        "feedback-error3": "エラー: API からの応答がありません",
+       "feedback-error4": "エラー: 指定されたフィードバックに投稿することができません",
        "feedback-message": "メッセージ:",
        "feedback-subject": "件名:",
        "feedback-submit": "送信",
        "log-name-pagelang": "言語変更記録",
        "log-description-pagelang": "これはページ言語の変更の記録です。",
        "logentry-pagelang-pagelang": "$1 がページ $3 の言語を $4 から $5 に{{GENDER:$2|変更しました}}",
-       "default-skin-not-found": "おっと! あなたのウィキの既定の外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\nあなたのインストールには以下の外装が含まれています。外装の有効化と既定の選択については、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。\n\n$2\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これにはいくつかの外装と拡張機能が含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。\n\n; MediaWiki をアップグレードした場合:\n: MediaWiki 1.24 以降のバージョンでは、インストール済みの外装は自動的には有効になりません。 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery マニュアル:外装の自動探索] をご覧ください)。<code>LocalSettings.php</code> に以下の行をペーストして、現在インストールされている外装を有効にできます。\n\n<pre>$3</pre>\n\n; <code>LocalSettings.php</code>を編集したばかりの場合:\n: 外装名に打ち間違いがないか再度確認してください。",
-       "default-skin-not-found-no-skins": "おっと! あなたのウィキの既定の外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\n外装をインストールしていません。\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これには外装と拡張機能がいくつか含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。外装の有効化と既定の選択についての情報は、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル:外装設定] をご覧ください。",
+       "default-skin-not-found": "おっと! あなたのウィキの既定の外装 <code>$1</code> として定義されている <code>$wgDefaultSkin</code> は利用できません。\n\nあなたのインストールには以下の{{PLURAL:$4|skin|外装}}が含まれています。{{PLURAL:$4|it|外装の有効化と既定の選択}}については、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。\n\n$2\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これにはいくつかの外装と拡張機能が含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。\n\n; MediaWiki をアップグレードした場合:\n: MediaWiki 1.24 以降のバージョンでは、インストール済みの外装は自動的には有効になりません。 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery マニュアル:外装の自動探索] をご覧ください)。<code>LocalSettings.php</code> に以下の{{PLURAL:$5|line|行}}をペーストして、現在インストールされている{{PLURAL:$5|skin|外装}}を有効にできます。\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code>を編集したばかりの場合:\n: 外装名に打ち間違いがないか再度確認してください。",
+       "default-skin-not-found-no-skins": "おっと! <code>$1</code>で定義されている、あなたのウィキの既定の外装 (<code>$wgDefaultSkin</code>)は利用できません。\n\n外装をインストールしていません。\n\n; MediaWikiをインストールしたばかりか更新したばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。MediaWikiの1.24およびそれ以降は、メインのリポジトリ内には任意の外装が含まれていません。[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。, by:\n:* 個々の外装 tarballs を[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: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。外装の有効化と既定の選択についての情報は、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル:外装設定] をご覧ください。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (有効)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''無効''')",
        "mediastatistics": "メディア統計",
        "special-characters-group-khmer": "クメール文字",
        "special-characters-title-endash": "en ダッシュ",
        "special-characters-title-emdash": "em ダッシュ",
-       "special-characters-title-minus": "マイナス記号"
+       "special-characters-title-minus": "マイナス記号",
+       "mw-widgets-titleinput-description-new-page": "ページは存在しません",
+       "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト"
 }
index 18b18dd..b376f83 100644 (file)
        "nmembers": "$1 წევრი",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|წევრი|წევრი}}",
        "nrevisions": "$1 რედაქტირება",
-       "nviews": "$1 ჩვენება",
        "nimagelinks": "გამოიყენება $1 {{PLURAL:$1|გვერდზე}}",
        "ntransclusions": "გამოიყენება $1 {{PLURAL:$1|გვერდზე}}",
        "specialpage-empty": "ეს გვერდი ცარიელია.",
        "markedaspatrolledtext": "არჩეული ვერსია [[:$1]] მონიშნულია როგორც პატრულირებული",
        "rcpatroldisabled": "ბოლო ცვლილებების პატრულირება აკრძალულია",
        "rcpatroldisabledtext": "ბოლო ცვლილებების პატრულირების შესაძლებლობა ამ მომენტისთვის გათიშულია",
-       "markedaspatrollederror": "შეუძლებელია ამ სტატიის მოhttp://translatewiki.net/w/i.php?title=MediaWiki:Markedaspatrollederror/ka&action=edit&loadgroup=core&loadtask=untranslatedნიშნვნა პატრულირებულად.",
+       "markedaspatrollederror": "შეუძლებელია ამ სტატიის მონიშვნა პატრულირებულად.",
        "markedaspatrollederrortext": "თქვენ უნდა მონიშნოთ ვერსია, რომელიც პატრულირებულად ჩაითვლება.",
        "markedaspatrollederror-noautopatrol": "თქვენ ვერ მონიშნავთ თქვენივე შესწორებებს პატრულირებულად.",
        "markedaspatrollednotify": "ეს ცვლილება გვერდზე „$1“ პატრულირებულად მოინიშნა.",
        "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 78b706e..5b18c9b 100644 (file)
@@ -42,7 +42,7 @@
        "tog-shownumberswatching": "បង្ហាញ​ចំនួនអ្នកប្រើប្រាស់​ដែលតាមដាន​ទំព័រនេះ",
        "tog-oldsig": "ហត្ថលេខាមានហើយ៖",
        "tog-fancysig": "ចុះហត្ថលេខា​ជា​អត្ថបទវិគី​ (ដោយ​គ្មានតំណភ្ជាប់​ស្វ័យប្រវត្តិ)",
-       "tog-uselivepreview": "ប្រើប្រាស់​ការមើលមុនរហ័ស (ស្ថិតក្រោមការពិសោធន៍នៅឡើយ)",
+       "tog-uselivepreview": "ប្រើប្រាស់​ការមើលមុនរហ័ស",
        "tog-forceeditsummary": "សូមរំលឹកខ្ញុំ​កាលបើខ្ញុំទុកប្រអប់ចំណារពន្យល់ឱ្យនៅទំនេរ",
        "tog-watchlisthideown": "លាក់​កំណែប្រែ​របស់ខ្ញុំ​ពី​បញ្ជីតាមដាន",
        "tog-watchlisthidebots": "លាក់កំណែប្រែ​របស់​រូបយន្ត​ពី​បញ្ជីតាមដាន",
        "disclaimers": "ការបដិសេធ",
        "disclaimerpage": "Project:ការបដិសេធ​ទូទៅ",
        "edithelp": "ជំនួយ​ក្នុងការកែប្រែ",
+       "helppage-top-gethelp": "ជំនួយ​",
        "mainpage": "ទំព័រដើម",
        "mainpage-description": "ទំព័រដើម",
        "policy-url": "Project:គោលការណ៍",
        "viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖",
        "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''មកកាន់ទំព័រនេះ៖",
        "protectedinterface": "ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។\nដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។",
-       "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។",
+       "editinginterface": "<strong>ប្រយ័ត្ន៖</strong> អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បន្លាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើននាក់ ដែលប្រើប្រាស់វិគីនេះ។",
        "translateinterface": "ដើម្បីបន្ថែមឬកែប្រែការបកប្រែសម្រាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគម្រោងបកប្រែវិគីមេឌា។",
        "cascadeprotected": "ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស\"ជាបណ្ដាក់\"៖\n$2",
        "namespaceprotected": "អ្នកមិនមានសិទ្ធិកែប្រែទំព័រក្នុងប្រភេទ'''$1'''ទេ។",
        "wrongpassword": "ពាក្យសម្ងាត់​ដែលបានវាយបញ្ចូល​មិនត្រឹមត្រូវទេ។\n\nសូមព្យាយាម​ម្តងទៀត។",
        "wrongpasswordempty": "ពាក្យសម្ងាត់មិនបានវាយបញ្ចូលទេ។\n\nសូមព្យាយាម​ម្តងទៀត។",
        "passwordtooshort": "ពាក្យសម្ងាត់ត្រូវ​មាន​យ៉ាងតិចណាស់​ {{PLURAL:$1|១ តួអក្សរ|$1តួអក្សរ}}។",
+       "passwordtoolong": "ពាក្យសម្ងាត់មិនអាចវែងជាង{{PLURAL:$1|1 តួ|$1 តួ}}ទេ។",
        "password-name-match": "ពាក្យសម្ងាត់ត្រូវតែខុសគ្នាពីអត្តនាមរបស់អ្នក។",
        "password-login-forbidden": "ហាមប្រាមមិនអោយប្រើអត្តនាមនិងពាក្យសម្ងាត់នេះ។",
        "mailmypassword": "កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ",
        "passwordreset": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
        "passwordreset-text-one": "បំពេញសំណុំបែបបទនេះដើម្បីស្ដារពាក្យសម្ងាត់របស់អ្នក។",
        "passwordreset-text-many": "{{PLURAL:$1|សូមបំពេញក្នុងប្រអប់មួយក្នុងចំណោមប្រអប់ខាងក្រោមដើម្បីទទួលពាក្យសម្ងាត់បណ្ដោះអាសន្នមួយតាមរយៈអ៊ីមែល។}}",
-       "passwordreset-legend": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
        "passwordreset-disabled": "មុខងារប្ដូរទៅពាក្យសម្ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
        "passwordreset-emaildisabled": "មុខងារអ៊ីមែលត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
        "passwordreset-username": "អត្តនាម៖",
        "preview": "មើលជាមុន",
        "showpreview": "បង្ហាញ​ការមើលជាមុន",
        "showdiff": "បង្ហាញ​បន្លាស់ប្ដូរ",
+       "blankarticle": "<strong>ប្រយ័ត្ន៖</strong> ទំព័រដែលអ្នកកំពុងបង្កើតជាទំព័រទទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀត ទំព័រនេះនឹងត្រូវរក្សាទុកដោយគ្មានខ្លឹមសារខាងក្នុង។",
        "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។ បើសិនជាអ្នក <strong>[$1 កត់ឈ្មោះចូល]</strong> ឬ <strong>[$2 បង្កើតគណនី]</strong> នោះការកែប្រែរបស់អ្នកនឹងត្រូវភ្ចាប់ជាមួយអត្តនាមរបស់អ្នកផង នឹងមានផលប្រយោជន៍ផ្សេងទៀតផង។",
        "anonpreviewwarning": "<em>អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។</em>",
        "missingsummary": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។\n\nបើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
        "missingcommentheader": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់មតិយោបល់នេះទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
        "summary-preview": "ការមើលជាមុនរបស់ចំណារពន្យល់:",
        "subject-preview": "ការមើលជាមុនរបស់ប្រធានបទ/ចំណងជើង:",
+       "previewerrortext": "មានបញ្ហាកើតឡើងពេលព្យាយាមើលជាមុនបន្លាស់ប្ដូររបស់អ្នក។",
        "blockedtitle": "អ្នកប្រើនេះត្រូវបានហាមឃាត់ហើយ",
        "blockedtext": "'''ឈ្មោះគណនីឬអាសយដ្ឋានIPរបស់អ្នកស្ថិតក្រោមការហាមឃាត់ហើយ។'''\n\nការហាមឃាត់ត្រូវបានធ្វើដោយ $1\n\nដោយសំអាងលើហេតុផល ''$2''។\n\n\n* ចាប់ផ្ដើមការហាមឃាត់ ៖ $8\n* ផុតកំណត់ការហាមឃាត់ ៖ $6\n* គណនីហាមឃាត់់ ៖ $7\n\n\nអ្នកអាចទាក់ទងទៅ $1 ឬ [[{{MediaWiki:Grouppage-sysop}}|អ្នកអភិបាល]]ដទៃទៀតដើម្បីពិភាក្សាពីការហាមឃាត់នេះ ។\n\nអ្នកមិនអាចប្រើប្រាស់មុខងារ \"អ៊ីមែលទៅអ្នកប្រើប្រាស់នេះ\" បានទេ លើកលែងតែអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវមួយ​ត្រូវបានផ្ដល់អោយក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]​របស់លោកអ្នកហើយលោកអ្នកមិនត្រូវបានគេហាមឃាត់មិនឱ្យប្រើប្រាស់មុខងារនោះ។\n\nអាសយដ្ឋានIPបច្ចុប្បន្នរបស់លោកអ្នកគឺ $3 និងអត្តលេខហាមឃាត់គឺ #$5 ។\n\nសូមបញ្ចូលព័ត៌មានលំអិតទាំងអស់ខាងលើនេះ ក្នុងអ៊ីមែលទាក់ទងនឹងបញ្ហានេះ។",
        "autoblockedtext": "អាសយដ្ឋានIPរបស់អ្នកបានត្រូវហាមឃាត់ដោយស្វ័យប្រវត្តិ ព្រោះវាត្រូវបានប្រើប្រាស់ដោយអ្នកប្រើប្រាស់ម្នាក់ទៀត ដែលត្រូវបានហាមឃាត់ដោយ $1 ។\n\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។ អត្តលេខហាមឃាត់គឺ #$5។\nសូមបញ្ចូលព័ត៌មានលំអិតទាំងអស់ខាងលើនេះ ក្នុងអ៊ីមែលទាក់ទងនឹងបញ្ហានេះ។",
        "history-feed-empty": "ទំព័រដែលអ្នកបានស្នើមិនមានទេ។\nប្រហែលជាវាត្រូវបានគេលុបចោលពីវីគីឬ​ត្រូវបានគេដាក់ឈ្មោះថ្មី។\nសូមសាក [[Special:Search|ស្វែងរកនៅក្នុងវិគី]] ដើម្បីរកទំព័រថ្មីដែលមានការទាក់ទិន។",
        "rev-deleted-comment": "(ចំណារពន្យល់ត្រូវបានដកចេញ)",
        "rev-deleted-user": "(អត្តនាមត្រូវបានលុបចេញ)",
-       "rev-deleted-event": "(á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e á\9f\81á\9e\8fá\9e»á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96ត្រូវបានដកចេញ)",
+       "rev-deleted-event": "(á\9e\9fá\9f\81á\9e\85á\9e\80á\9f\92á\9e\8aá\9e¸á\9e\9bá\9e\98á\9f\92á\9e¢á\9e·á\9e\8fá\9e¢á\9f\86á\9e\96á\9e¸á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e á\9f\81á\9e\8fá\9e»ត្រូវបានដកចេញ)",
        "rev-deleted-user-contribs": "[បានលុបចេញអត្តនាមឬអាសដ្ឋានIP នេះហើយ - ការកែប្រែលាក់មិនអោយអ្នករួមចំណែកដទៃមើលឃើញ]",
        "rev-deleted-text-permission": "កំណែ​ប្រែ​នៃ​ទំព័រ​នេះ​ត្រូវ​បាន'''​លុបចោល'''​។\nប្រហែល​ជា​មាន​ព័ត៌មាន​លម្អិត​នៅ​ក្នុង​[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់​ហេតុ​នៃ​ការ​លុប​ចោល]។",
        "rev-deleted-text-unhide": "កំណែ​ប្រែ​នៃ​ទំព័រ​នេះ​ត្រូវ​បាន'''​លុបចោល'''​។\nប្រហែល​ជា​មាន​ព័ត៌មាន​លម្អិត​នៅ​ក្នុង​[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់​ហេតុ​នៃ​ការ​លុបចោល​]។\nអ្នក​នៅ​តែ​អាច​[$1 មើល​កំណែ​នេះ​]ប្រសិន​បើ​អ្នក​ចង់​។",
        "revdelete-legend": "ដាក់កំហិតគំហើញ",
        "revdelete-hide-text": "បិទបាំងអត្ថបទកំណែប្រែ",
        "revdelete-hide-image": "បិទបាំងខ្លឹមសារនៃឯកសារ",
-       "revdelete-hide-name": "á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9e·á\9e\84á\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85",
+       "revdelete-hide-name": "á\9e\9bá\9e¶á\9e\80á\9f\8bá\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85á\9e\93á\9e·á\9e\84á\9e\94á\9f\89á\9e¶á\9e\9aá\9f\89á\9e¶á\9e\98á\9f\89á\9f\82á\9e\8f",
        "revdelete-hide-comment": "កែប្រែចំណារពន្យល់",
        "revdelete-hide-user": "អត្តនាម​ឬអាសយដ្ឋានIPរបស់អ្នកកែប្រែ",
        "revdelete-hide-restricted": "ដាក់កំហិត​ទិន្នន័យ​ពី​អ្នកអភិបាល ក៏​ដូចជា​អ្នក​ដទៃ​ទៀត",
        "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|លទ្ធផល|លទ្ធផល}}ក្នុងមួយទំព័រ",
        "powersearch-togglelabel": "គូសធីក៖",
        "powersearch-toggleall": "ទាំងអស់",
        "powersearch-togglenone": "ទទេ",
+       "powersearch-remember": "ចងចាំការជ្រើសរើសសម្រាប់ការស្វែងរកលើកក្រោយ",
        "search-external": "ស្វែងរកនៅខាងក្រៅ",
        "searchdisabled": "ឧបករណ៍​ស្វែងរក​របស់​{{SITENAME}} មិនបានអនុញ្ញាត​។\nក្នុង​ពេល​ឥឡូវ​នេះ​ អ្នកអាច​ស្វែង​រក​តាម​រយៈ​ Google បាន​។\nសូមចងចាំ​ថា​ លិបិក្រម​នៃ​មាតិការ​របស់​{{SITENAME}} អាចហួស​សម័យ​។​",
        "search-error": "មានបញ្ហាពេលកំពុងស្វែងរក៖ $1",
        "prefs-personal": "ប្រវត្តិរូប",
        "prefs-rc": "បន្លាស់​ប្ដូរ​ថ្មីៗ",
        "prefs-watchlist": "បញ្ជីតាមដាន",
+       "prefs-editwatchlist": "កែប្រែបញ្ជីតាមដាន",
+       "prefs-editwatchlist-label": "កែប្រែវត្ថុនៅក្នុងទំព័រតាមដានរបស់អ្នក",
+       "prefs-editwatchlist-edit": "មើលនិងដកចេញចំណងជើងនានានៅក្នុងបញ្ជីតាមដានរបស់អ្នក",
+       "prefs-editwatchlist-raw": "កែប្រែបញ្ជីតាមដានឆៅ",
+       "prefs-editwatchlist-clear": "ជម្រះបញ្ចីតាមដានរបស់អ្នក",
        "prefs-watchlist-days": "ចំនួនថ្ងៃត្រូវបង្ហាញក្នុងបញ្ជីតាមដាន៖",
        "prefs-watchlist-days-max": "អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}",
        "prefs-watchlist-edits": "ចំនួនអតិបរមានៃបំលាស់ប្តូរត្រូវបង្ហាញក្នុងបញ្ជីតាមដានដែលបានពង្រីក៖",
        "guesstimezone": "បំពេញពីកម្មវិធីរាវរក",
        "timezoneregion-africa": "អាហ្វ្រិក",
        "timezoneregion-america": "អាមេរិក",
-       "timezoneregion-antarctica": "á\9e¢á\9e\84á\9f\8bá\9e\8fá\9e¶á\9e\80á\9e\8fិក",
-       "timezoneregion-arctic": "á\9e¢á\9e¶á\9e\80á\9e\8fិក",
+       "timezoneregion-antarctica": "á\9e¢á\9e\84á\9f\8bá\9e\8fá\9e¶á\9e\80á\9e\91ិក",
+       "timezoneregion-arctic": "á\9e¢á\9e¶á\9e\80á\9e\91ិក",
        "timezoneregion-asia": "អាស៊ី",
        "timezoneregion-atlantic": "មហាសមុទ្រអាត្លង់ទិក",
        "timezoneregion-australia": "អូស្ត្រាលី",
        "prefs-info": "ព័ត៌មានផ្ទាល់​ខ្លួន",
        "prefs-i18n": "ភាសា",
        "prefs-signature": "ហត្ថលេខា​",
-       "prefs-dateformat": "á\9e\91á\9f\86រង់កាលបរិច្ឆេទ",
-       "prefs-timeoffset": "á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82ម៉ោង",
+       "prefs-dateformat": "á\9e\91á\9e\98á\9f\92រង់កាលបរិច្ឆេទ",
+       "prefs-timeoffset": "á\9e\82á\9e\98á\9f\92á\9e\9bá\9e¶á\9e\8fម៉ោង",
        "prefs-advancedediting": "ជម្រើសទូទៅ​",
        "prefs-editor": "អ្នកកែប្រែ",
        "prefs-preview": "មើលជាមុន",
-       "prefs-advancedrc": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-advancedrendering": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-advancedsearchoptions": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-advancedwatchlist": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-displayrc": "á\9e\87á\9f\86រើសការបង្ហាញ",
-       "prefs-displaywatchlist": "á\9e\87á\9f\86រើសការបង្ហាញ",
+       "prefs-advancedrc": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-advancedrendering": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-advancedsearchoptions": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-advancedwatchlist": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-displayrc": "á\9e\87á\9e\98á\9f\92រើសការបង្ហាញ",
+       "prefs-displaywatchlist": "á\9e\87á\9e\98á\9f\92រើសការបង្ហាញ",
        "prefs-tokenwatchlist": "កូនសោរ",
        "prefs-diffs": "ភាពខុសគ្នា",
        "prefs-help-prefershttps": "ចំណង់ចំណូលចិត្តនេះនឹងមានប្រសិទ្ធិភាពពេលអ្នកកត់ឈ្មោះចូលលើកក្រោយ។",
        "userrights-lookup-user": "គ្រប់គ្រងក្រុមអ្នកប្រើប្រាស់",
        "userrights-user-editname": "បញ្ចូលអត្តនាម៖",
        "editusergroup": "កែប្រែក្រុមអ្នកប្រើប្រាស់",
-       "editinguser": "á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b '''[[User:$1|$1]]''' $2",
+       "editinguser": "á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\9aá\9e\94á\9e\9fá\9f\8b{{GENDER:$1|á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "កែប្រែក្រុមអ្នកប្រើប្រាស់",
        "saveusergroups": "រក្សាក្រុមអ្នកប្រើប្រាស់ទុក",
        "userrights-groupsmember": "ក្រុមសមាជិកភាព៖",
        "right-protect": "ប្ដូរកម្រិតការពាររួចកែប្រែទំព័រដែលបានការពារជាថ្នាក់",
        "right-editprotected": "កែប្រែទំព័រដែលបានការពារដោយ \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "កែប្រែទំព័រដែលបានការពារដោយ \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "កែប្រែខ្លឹមសារគំរូរបស់ទំព័រមួយ",
        "right-editinterface": "កែប្រែអន្តរមុខអ្នកប្រើប្រាស់",
        "right-editusercssjs": "កែប្រែឯកសារ CSS និង JS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "right-editusercss": "កែប្រែឯកសារ CSS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "action-createpage": "បង្កើតទំព័រនានា",
        "action-createtalk": "បង្កើតទំព័រពិភាក្សានានា",
        "action-createaccount": "បង្កើតគណនីអ្នកប្រើប្រាស់នេះ",
+       "action-history": "មើលប្រវត្តិទំព័រនេះ",
        "action-minoredit": "ចំណាំកំណែប្រែនេះថាជាកំណែប្រែតិចតួច",
        "action-move": "ប្ដូរទីតាំងទំព័រនេះ",
        "action-move-subpages": "ប្ដូរទីតាំងទំព័រនេះព្រមទាំងអនុទំព័ររបស់វា",
        "action-viewmywatchlist": "មើលបញ្ជីតាមដានរបស់អ្នក",
        "action-viewmyprivateinfo": "មើលព័ត៌មានឯកជនរបស់អ្នក",
        "action-editmyprivateinfo": "កែប្រែព័ត៌មានឯកជនរបស់អ្នក",
+       "action-editcontentmodel": "កែប្រែខ្លឹមសារគំរូរបស់ទំព័រមួយ",
        "nchanges": "$1 {{PLURAL:$1|បន្លាស់ប្ដូរ|បន្លាស់ប្ដូរ}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|គិតតាំងពីការបើកមើលចុងក្រោយ}}",
        "enhancedrc-history": "ប្រវត្តិ",
-       "recentchanges": "á\9e\94á\9f\86លាស់ប្ដូរថ្មីៗ",
+       "recentchanges": "á\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មីៗ",
        "recentchanges-legend": "ជម្រើសនានា​ សម្រាប់ការបង្ហាញបន្លាស់ប្ដូរថ្មីៗ",
        "recentchanges-summary": "តាមដានរាល់បំលាស់ប្ដូរថ្មីៗបំផុតចំពោះវិគីនៅលើទំព័រនេះ។",
+       "recentchanges-noresult": "គ្មានកំណែប្រែក្នុងរយៈពេលដែលបានផ្ដល់អោយដែលត្រូវនឹងលក្ខខណ្ឌទាំងនេះទេ។",
        "recentchanges-feed-description": "តាមដាន​បន្លាស់ប្ដូរថ្មីៗ​បំផុត​នៃ​វិគី​នេះក្នុង​មតិព័ត៌មាន​នេះ​។",
        "recentchanges-label-newpage": "ការកែប្រែនេះបានបង្កើតទំព័រថ្មីមួយ",
        "recentchanges-label-minor": "នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ",
        "recentchanges-label-plusminus": "ទំហំទំព័រត្រូវបានផ្លាស់ប្ដូរគិតជាចំនួនបៃ",
        "recentchanges-legend-heading": "''កំណត់សម្គាល់៖'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (មើលផងដែរនូវ [[Special:NewPages|បញ្ជីទំព័រថ្មី]])",
-       "rcnotefrom": "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
+       "rcnotefrom": "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី <strong>$4 $3</strong> (បង្ហាញអតិបរមាចំនួន <strong>$1</strong>)។",
        "rclistfrom": "បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $3 $2",
        "rcshowhideminor": "$1កំណែប្រែ​តិចតួច",
        "rcshowhideminor-show": "បង្ហាញ​",
        "show": "បង្ហាញ",
        "minoreditletter": "តិច",
        "newpageletter": "ថ្មី",
-       "boteditletter": "á\9e\9aá\9e¼á\9e\94á\9e\99á\9e\93á\9f\92á\9e\8f",
+       "boteditletter": "យន្ត",
        "number_of_watching_users_pageview": "[មាន{{PLURAL:$1|អ្នកប្រើប្រាស់|អ្នកប្រើប្រាស់}}$1នាក់កំពុងមើល]",
        "rc_categories": "កម្រិតទីតាំងចំណាត់ថ្នាក់ក្រុម(ខណ្ឌដោយសញ្ញា \"|\")",
        "rc_categories_any": "មួយណាក៏បាន",
        "license": "អាជ្ញាបណ្ណ",
        "license-header": "ការដាក់​អាជ្ញាប័ណ្ណ",
        "nolicense": "គ្មាន",
+       "licenses-edit": "កែប្រែជម្រើសអាជ្ញាប័ណ្ឌ",
        "license-nopreview": "(មិនទាន់មានការបង្ហាញការមើលជាមុនទេ)",
-       "upload_source_url": "(URL ត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)",
-       "upload_source_file": "(ឯកសារក្នុងកុំព្យូទ័ររបស់អ្នក)",
+       "upload_source_url": "(ឯកសារដែលអ្នកជ្រើសរើសពីURLត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)",
+       "upload_source_file": "(á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9aá\9e¾á\9e\9fá\9e\96á\9e¸á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e»á\9f\86á\9e\96á\9f\92á\9e\99á\9e¼á\9e\91á\9f\90á\9e\9aá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80)",
        "listfiles-delete": "លុបចោល",
        "listfiles-summary": "ទំព័រពិសេស​នេះ​បង្ហាញ​គ្រប់​ឯកសារ​ដែល​បានផ្ទុកឡើង។",
        "listfiles_search_for": "ស្វែងរកឈ្មោះមេឌា៖",
+       "listfiles-userdoesnotexist": "គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ \"$1\"មិនទាន់បានចុះឈ្មោះទេ។",
        "imgfile": "ឯកសារ",
        "listfiles": "បញ្ជីរូបភាព",
        "listfiles_thumb": "កូនរូបភាព",
        "download": "ទាញយក",
        "unwatchedpages": "ទំព័រមិនត្រូវបានតាមដាន",
        "listredirects": "បញ្ជីនៃការបញ្ជូនបន្ត",
+       "listduplicatedfiles": "បញ្ជីឯកសារជាន់គ្នា",
        "unusedtemplates": "ទំព័រគំរូ​ដែលលែងត្រូវបានប្រើ",
        "unusedtemplatestext": "ទំព័រ​នេះ​មាន​រាយ​នាម​ទំព័រ​ទាំង​អស់​នៅ​ក្នុង​ប្រភេទ​{{ns:template}} ដែល​មិន​បាន​រាប់​បញ្ជូល​ក្នុង​ទំព័រ​ដទៃ​ទៀត​។\nសូម​ចងចាំ​ក្នុង​ការ​ត្រួត​ពិនិត្យ​​តំណ​ភ្ជាប់​ផ្សេង​ៗ​ទៀត​ដែល​ភ្ជាប់​មក​ទំព័រ​គំរូ​មុន​នឹង​លុប​វា​ចោល​។",
        "unusedtemplateswlh": "តំណភ្ជាប់ផ្សេងៗទៀត",
        "randomincategory": "ទំព័រចៃដន្យក្នុងចំណាត់ថ្នាក់ក្រុម",
        "randomincategory-invalidcategory": "\"$1\" មិនមែនជាឈ្មោះចំណាតក្រុមត្រឹមត្រូវ។",
        "randomincategory-nopages": "គ្មានទំព័រណាមួយក្នុងចំណាត់ថ្នាក់ក្រុម [[:Category:$1|$1]] ទេ។",
+       "randomincategory-category": "ចំណាត់ថ្នាក់ក្រុម៖",
+       "randomincategory-legend": "ទំព័រចៃដន្យក្នុងចំណាត់ថ្នាក់ក្រុម",
        "randomredirect": "ទំព័របញ្ជូនបន្តចៃដន្យ",
        "randomredirect-nopages": "គ្មានទំព័របញ្ជូនបន្តណាមួយនៅក្នុងប្រភេទ \"$1\" ទេ។",
        "statistics": "ស្ថិតិ",
        "ninterwikis": "$1 {{PLURAL:$1|អន្តរវិគី|អន្តរវិគី}}",
        "nlinks": "$1 {{PLURAL:$1|តំណភ្ជាប់|តំណភ្ជាប់}}",
        "nmembers": "$1{{PLURAL:$1|សមាជិក|សមាជិក}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|សមាជិក|សមាជិក}}",
        "nrevisions": "$1 {{PLURAL:$1|កំណែប្រែ}}",
-       "nviews": "$1 {{PLURAL:$1|ការចូលមើល}}",
        "nimagelinks": "ត្រូវបានប្រើនៅលើទំព័រចំនួន $1។",
        "ntransclusions": "ត្រូវបានប្រើនៅលើទំព័រចំនួន $1",
        "specialpage-empty": "គ្មានលទ្ធផលសម្រាប់របាយណ៍នេះទេ។",
        "lonelypages": "ទំព័រកំព្រា",
-       "lonelypagestext": "ទំព័រដូចតទៅនេះមិនត្រូវបានភ្ជាប់ពីទំព័រដទៃនៅក្នុង {{SITENAME}}ទេ។",
+       "lonelypagestext": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9e¼á\9e\85á\9e\8fá\9e\91á\9f\85á\9e\93á\9f\81á\9f\87á\9e\98á\9e·á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e¬á\9e\99á\9f\84á\9e\84á\9e\98á\9e\80á\9e\96á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9e\91á\9f\83á\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84 {{SITENAME}}á\9e\91á\9f\81á\9f\94",
        "uncategorizedpages": "ទំព័រគ្មានចំណាត់ថ្នាក់ក្រុម",
        "uncategorizedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលមិនត្រូវបានចាត់ជាថ្នាក់",
        "uncategorizedimages": "រូបភាពគ្មានចំណាត់ថ្នាក់ក្រុម",
        "uncategorizedtemplates": "ទំព័រគំរូគ្មានចំណាត់ថ្នាក់ក្រុម",
-       "unusedcategories": "á\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\8aá\9f\82á\9e\9bá\9e\98á\9e·á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b",
-       "unusedimages": "ឯកសារ(មេឌា​ រូបភាព)ដែលមិនត្រូវបានប្រើប្រាស់",
-       "wantedcategories": "á\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\8aá\9f\82á\9e\9bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\82á\9f\92á\9e\93á\9e¶á\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
-       "wantedpages": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8aá\9f\82á\9e\9bâ\80\8bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\82á\9f\92á\9e\93á\9e¶â\80\8bá\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
+       "unusedcategories": "á\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\98á\9e·á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾",
+       "unusedimages": "ឯកសារមិនប្រើ",
+       "wantedcategories": "á\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\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
+       "wantedpages": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
        "wantedpages-badtitle": "ចំណងជើង​មិន​ត្រឹមត្រូវ​នៅ​ក្នុង​សំនុំ​លទ្ធផល​៖ $1",
-       "wantedfiles": "á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
-       "wantedtemplates": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\82á\9f\86á\9e\9aá\9e¼á\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
+       "wantedfiles": "á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
+       "wantedtemplates": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\82á\9f\86á\9e\9aá\9e¼á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
        "mostlinked": "ទំព័រដែលត្រូវបានតភ្ជាប់មកច្រើនបំផុត",
        "mostlinkedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានតភ្ជាប់មកច្រើនបំផុត",
        "mostlinkedtemplates": "ទំព័រគំរូ​ដែលត្រូវបានប្រើប្រាស់​ច្រើនបំផុត",
        "deadendpages": "ទំព័រ​ទាល់",
        "deadendpagestext": "ទំព័រដូចតទៅនេះមិនតភ្ជាប់ទៅទំព័រដទៃទៀតក្នុង {{SITENAME}} ទេ។",
        "protectedpages": "ទំព័រដែលត្រូវបានការពារ",
-       "protectedpages-indef": "á\9e\9fá\9f\86រាប់តែការការពារដែលមិនកំណត់ប៉ុណ្ណោះ",
-       "protectedpages-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9f\94 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\93នៅក្រោមការការពារមិនអោយបង្កើត សូមមើលនៅ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]។",
-       "protectedpages-cascade": "á\9e\9fá\9f\86រាប់ការការពារជាថ្នាក់ប៉ុណ្ណោះ​",
+       "protectedpages-indef": "á\9e\9fá\9e\98á\9f\92រាប់តែការការពារដែលមិនកំណត់ប៉ុណ្ណោះ",
+       "protectedpages-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9f\94 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\8fនៅក្រោមការការពារមិនអោយបង្កើត សូមមើលនៅ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]។",
+       "protectedpages-cascade": "á\9e\9fá\9e\98á\9f\92រាប់ការការពារជាថ្នាក់ប៉ុណ្ណោះ​",
        "protectedpages-noredirect": "លាក់ការបញ្ជូនបន្ត",
        "protectedpagesempty": "​មិន​មាន​ទំព័រ​ណា​ដែល​ត្រូវបាន​ការពារ ជាមួយប៉ារ៉ាម៉ែត​ទាំងនេះទេ។",
        "protectedpages-timestamp": "ត្រាពេលវេលា",
        "protectedpages-unknown-timestamp": "មិនស្គាល់",
        "protectedpages-unknown-performer": "អ្នកប្រើប្រាស់មិនស្គាល់",
        "protectedtitles": "ចំណងជើងត្រូវបានការពារ",
-       "protectedtitles-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\93នៅក្រោមការការពារមិនអោយបង្កើត។ សម្រាប់បញ្ជីទំព័រដែលកំពុងត្រូវបានការពារ សូមមើលនៅ [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]។",
+       "protectedtitles-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\8fនៅក្រោមការការពារមិនអោយបង្កើត។ សម្រាប់បញ្ជីទំព័រដែលកំពុងត្រូវបានការពារ សូមមើលនៅ [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]។",
        "protectedtitlesempty": "មិន​មាន​ចំណងជើង​ណា​ដែល​ត្រូវ​បាន​ការពារ​ជាមួយនឹង​ប៉ារ៉ាម៉ែត​ទាំងនេះ​ទេ​នាពេលថ្មីៗនេះ។",
        "listusers": "បញ្ជីអ្នកប្រើប្រាស់",
        "listusers-editsonly": "បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ",
        "emailccsubject": "ច្បាប់ចម្លងនៃសារដែលអ្នកផ្ញើទៅកាន់ $1 ៖ $2",
        "emailsent": "អ៊ីមែលត្រូវបានផ្ញើទៅហើយ",
        "emailsenttext": "សារអ៊ីមែលរបស់អ្នកត្រូវបានផ្ញើរួចហើយ។",
-       "emailuserfooter": "អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ\"អ៊ីមែលអ្នកប្រើប្រាស់\"របស់{{SITENAME}}។",
-       "usermessage-summary": "á\9e\91á\9e»á\9e\80á\9e\9fá\9e¶á\9e\9a",
+       "emailuserfooter": "អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ\"{{int:emailpage}}\"របស់{{SITENAME}}។",
+       "usermessage-summary": "á\9e\91á\9e\98á\9f\92á\9e\9bá\9e¶á\9e\80á\9f\8bá\9e\9fá\9e¶á\9e\9aá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92",
        "usermessage-editor": "ប្រព័ន្ធផ្ញើសារ",
        "watchlist": "បញ្ជីតាមដាន",
        "mywatchlist": "បញ្ជីតាមដាន​",
        "unwatchthispage": "ឈប់តាមដាន",
        "notanarticle": "មិនមែនជាទំព័រមាតិកា",
        "notvisiblerev": "ការកែតម្រូវត្រូវបានលុបចោល",
-       "watchlist-details": "{{PLURAL:$1|$1 page|ទំព័រ $1}}នៅក្នុងបញ្ជីតាមដានរបស់អ្នក ដោយមិនរាប់បញ្ចូលទំព័រពិភាក្សា។",
+       "watchlist-details": "{{PLURAL:$1|$1 ទំព័រ១|ទំព័រចំនួន $1}}នៅក្នុងបញ្ជីតាមដានរបស់អ្នក ដោយមិនរាប់បញ្ចូលទំព័រពិភាក្សា។",
        "wlheader-enotif": "បើកប្រើការផ្ដល់ដំណឹងតាមរយៈអ៊ីមែល។",
        "wlheader-showupdated": "ទំព័រដែលត្រូវបានផ្លាស់ប្តូរតាំងពីពេលចូលមើលចុងក្រោយរបស់អ្នក ត្រូវបានបង្ហាញជា '''អក្សរដិត'''។",
-       "wlnote": "ខាងក្រោមនេះជា {{PLURAL:$1|បំលាស់ប្តូរចុងក្រោយ|'''$1'''បំលាស់ប្តូរចុងក្រោយ}}ក្នុងរយះពេល{{PLURAL:$2|'''$2'''ម៉ោង}}ចុងក្រោយ គិតចាប់ពី $3, $4។",
+       "wlnote": "ខាងក្រោមនេះ {{PLURAL:$1|ជាបន្លាស់ប្ដូរចុងក្រោយ|ជាបន្លាស់ប្ដូរចុងក្រោយចំនួន <strong>$1</strong>}} នៅក្នុងរយៈពេល{{PLURAL:$2|១ម៉ោង|<strong>$2</strong> ម៉ោង}} គិតចាប់ពីម៉ោង $4 ថ្ងៃ $3។",
        "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ",
        "watchlist-options": "ជម្រើសនានាក្នុងបញ្ជីតាមដាន",
        "watching": "កំពុង​តាមដាន...",
        "confirmdeletetext": "អ្នកប្រុងនឹងលុបចោលទាំងស្រុង នូវទំព័រមួយដោយរួមបញ្ចូលទាំងប្រវត្តិកែប្រែរបស់វាផង។\nសូមអ្នកអះអាងថា អ្នកពិតជាមានចេតនាធ្វើបែបហ្នឹង និងថាអ្នកបានយល់ច្បាស់ពីផលវិបាកទាំងឡាយដែលអាចកើតមាន និង​សូមអះអាងថា អ្នកធ្វើស្របតាម [[{{MediaWiki:Policy-url}}|គោលការណ៍]]។",
        "actioncomplete": "សកម្មភាពបានសម្រេច",
        "actionfailed": "សកម្មភាព​មិនបានសម្រេច",
-       "deletedtext": "\"$1\"á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\9bá\9e»á\9e\94á\9e\85á\9f\84á\9e\9bá\9e\9aá\9e½á\9e\85á\9e á\9e¾á\9e\99á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b$2á\9e\9fá\9f\86រាប់បញ្ជីនៃការលុបចោលនាពេលថ្មីៗ។",
+       "deletedtext": "\"$1\"á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\9bá\9e»á\9e\94á\9e\85á\9f\84á\9e\9bá\9e\9aá\9e½á\9e\85á\9e á\9e¾á\9e\99á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b$2á\9e\9fá\9e\98á\9f\92រាប់បញ្ជីនៃការលុបចោលនាពេលថ្មីៗ។",
        "dellogpage": "កំណត់ហេតុនៃការលុបចោល",
        "dellogpagetext": "ខាងក្រោមជាបញ្ជីនៃការលុបចោលថ្មីៗបំផុត។",
        "deletionlog": "កំណត់ហេតុនៃការលុបចោល",
        "revertpage": "បានត្រឡប់កំណែប្រែដោយ[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ទៅកំណែប្រែចុងក្រោយដោយ [[User:$1|$1]]",
        "rollback-success": "កំណែ​ដែល​ត្រូវ​បាន​ត្រឡប់​ដោយ​ $1។\nបាន​ផ្លាស់​ប្ដូរ​ទៅ​កំណែ​ចុង​ក្រោយ​វិញ​ដោយ $2។",
        "protectlogpage": "កំណត់ហេតុនៃការការពារ",
-       "protectlogtext": "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\83á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\85á\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\84á\9e\93á\9e·á\9e\84á\9e\8aá\9f\84á\9f\87á\9e\9fá\9f\84á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b [[Special:ProtectedPages|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\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\9fá\9f\86រាប់បញ្ជីការការពារទំព័រដែលកំពុងនៅមានសុពលភាពនៅពេលនេះ។",
+       "protectlogtext": "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\83á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\85á\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\84á\9e\93á\9e·á\9e\84á\9e\8aá\9f\84á\9f\87á\9e\9fá\9f\84á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b [[Special:ProtectedPages|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\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\9fá\9e\98á\9f\92រាប់បញ្ជីការការពារទំព័រដែលកំពុងនៅមានសុពលភាពនៅពេលនេះ។",
        "protectedarticle": "បានការពារ\"[[$1]]\"",
        "modifiedarticleprotection": "បានផ្លាស់ប្តូរកម្រិតការពារនៃ\"[[$1]]\"",
        "unprotectedarticle": "ដកការការពារពី \"[[$1]]\"",
        "protect-locked-access": "គណនីរបស់អ្នកគ្មានការអនុញ្ញាតក្នុងការផ្លាស់ប្ដូរ កម្រិតកាពារទំព័រ ។\nនេះជាការកំណត់បច្ចុប្បន្ន ចំពោះទំព័រ '''$1''' ៖",
        "protect-cascadeon": "បច្ចុប្បន្នទំព័រនេះត្រូវបានការពារ ព្រោះវាបានស្ថិតក្នុង {{PLURAL:$1|ទំព័រដែលមាន}} ការការពារជាថ្នាក់​។\n\nអ្នកអាចផ្លាស់ប្តូរកម្រិតការពារនៃ ទំព័រ ប៉ុន្តែវានឹងមិនប៉ះពាល់ដល់ការការពារជាថ្នាក់ទេ។",
        "protect-default": "អនុញ្ញាត​អ្នក​ប្រើ​ប្រាស់​ទាំង​អស់​",
-       "protect-fallback": "á\9e\9fá\9f\86រាប់តែអ្នកដែលមានការអនុញ្ញាត \"$1\"",
-       "protect-level-autoconfirmed": "á\9e\9fá\9f\86រាប់តែអ្នកប្រើប្រាស់ដែលបានបញ្ជាក់ទទួលស្គាល់ដោយស្វ័យប្រវត្តិ",
+       "protect-fallback": "á\9e\9fá\9e\98á\9f\92រាប់តែអ្នកដែលមានការអនុញ្ញាត \"$1\"",
+       "protect-level-autoconfirmed": "á\9e\9fá\9e\98á\9f\92រាប់តែអ្នកប្រើប្រាស់ដែលបានបញ្ជាក់ទទួលស្គាល់ដោយស្វ័យប្រវត្តិ",
        "protect-level-sysop": "សម្រាប់តែអភិបាល",
        "protect-summary-cascade": "ការពារជា​ថ្នាក់",
        "protect-expiring": "ផុតកំណត់ $1 (UTC)",
        "sp-contributions-search": "ស្វែងរកការរួមចំណែក",
        "sp-contributions-username": "អាសយដ្ឋានIP ឬអត្តនាម៖",
        "sp-contributions-toponly": "បង្ហាញតែការកែប្រែណាដែលជាកំណែថ្មីៗជាងគេប៉ុណ្ណោះ",
+       "sp-contributions-newonly": "បង្ហាញតែកំណែប្រែដែលជាការបង្កើតទំព័រ",
        "sp-contributions-submit": "ស្វែងរក",
        "whatlinkshere": "អ្វី​ដែលភ្ជាប់មកទីនេះ",
        "whatlinkshere-title": "ទំព័រនានាដែល​តភ្ជាប់​ទៅ \"$1\"",
        "tooltip-pt-mycontris": "បញ្ជី​នៃ​ការរួមចំណែក​របស់​អ្នក",
        "tooltip-pt-login": "អ្នកត្រូវបានលើកទឹកចិត្តឱ្យកត់ឈ្មោះចូល។ ប៉ុន្តែនេះមិនមែនជាការបង្ខំទេ។",
        "tooltip-pt-logout": "កត់ឈ្មោះចេញ",
+       "tooltip-pt-createaccount": "អ្នកត្រូវបានលើកទឹកចិត្តបង្កើតគណនីនិងកត់ឈ្មោះចូល។ ប៉ុន្តែនេះមិនមែនជាការបង្ខំទេ។",
        "tooltip-ca-talk": "ការពិភាក្សា​អំពីទំព័រខ្លឹមសារ​នេះ",
        "tooltip-ca-edit": "អ្នកអាច​កែប្រែ​ទំព័រ​នេះ ។ សូមប្រើប្រាស់​ប៊ូតុង 'បង្ហាញការមើលមុន' មុននឹង​រក្សាទុក​វា  ។",
        "tooltip-ca-addsection": "ចាប់​ផ្ដើមផ្នែកថ្មីមួយក្នុងទំព័រពិភាក្សានេះ",
        "size-megabytes": "$1មេកាបៃ",
        "size-gigabytes": "$1ជីកាបៃ",
        "lag-warn-normal": "បំលាស់ប្តូរថ្មីជាង {{PLURAL:$1|second|វិនាទី}}អាចមិនត្រូវបានបង្ហាញក្នុងបញ្ជីនេះ​។",
-       "lag-warn-high": "á\9e\8aá\9f\84á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9f\86á\9e\9aá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¼á\9e\9bá\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\91á\9e·á\9e\93á\9f\92á\9e\93á\9e\93á\9f\90á\9e\99á\9e\98á\9e¶á\9e\93á\9e\97á\9e¶á\9e\96á\9e\99á\9eºá\9e\8fá\9e\99á\9f\89á\9e¶á\9e\9cá\9e\81á\9f\92á\9e\9bá\9e¶á\9f\86á\9e\84 á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\90á\9f\92á\9e\98á\9e¸á\9e\87á\9e¶á\9e\84 $1 á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\94á\9e¶á\9e\93á\9e\91á\9f\81á\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\81á\9f\87។",
+       "lag-warn-high": "á\9e\8aá\9f\84á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9f\86á\9e\9aá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¼á\9e\9bá\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\91á\9e·á\9e\93á\9f\92á\9e\93á\9e\93á\9f\90á\9e\99á\9e\98á\9e¶á\9e\93á\9e\97á\9e¶á\9e\96á\9e\99á\9eºá\9e\8fá\9e\99á\9f\89á\9e¶á\9e\9cá\9e\81á\9f\92á\9e\9bá\9e¶á\9f\86á\9e\84 á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\90á\9f\92á\9e\98á\9e¸á\9e\87á\9e¶á\9e\84 $1 á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\81á\9f\87á\9e\94á\9e¶á\9e\93á\9e\91á\9f\81។",
        "watchlistedit-normal-title": "កែប្រែបញ្ជីតាមដាន",
        "watchlistedit-normal-legend": "ដកចំណងជើងចេញពីបញ្ជីតាមដាន",
        "watchlistedit-normal-explain": "ចំណងជើងក្នុងបញ្ជីតាមដានរបស់អ្នកត្រូវបានបង្ហាញខាងក្រោម។\n\nដើម្បីដកចេញនូវចំណងជើងណាមួយ សូមចុច\"{{int:Watchlistedit-normal-submit}}\"។\n\nអ្នកអាច[[Special:EditWatchlist/raw|កែប្រែបញ្ជីឆៅ]]ផងដែរ។",
        "tags-tag": "ឈ្មោះ​ស្លាក",
        "tags-display-header": "Appearance លើ​បញ្ជី​បំលាស់​ប្ដូរ​",
        "tags-description-header": "បរិយាយពេញលេញ​នៃអត្ថន័យ​",
+       "tags-source-header": "ប្រភព",
        "tags-active-header": "សកម្ម?",
        "tags-hitcount-header": "បំលាស់​ប្ដូរ​ដែលមានស្លាក​",
+       "tags-actions-header": "សកម្មភាព",
        "tags-active-yes": "បាទ/ចាស",
        "tags-active-no": "ទេ",
+       "tags-source-none": "គ្មានគេប្រើទៀតទេ",
        "tags-edit": "កែប្រែ",
-       "tags-hitcount": "$1 {{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}",
+       "tags-delete": "លុបចោល",
+       "tags-activate": "បើកប្រើ",
+       "tags-deactivate": "បិទមិនប្រើ",
+       "tags-hitcount": "$1 {{PLURAL:$1|បន្លាស់ប្ដូរ|បន្លាស់ប្ដូរ}}",
        "comparepages": "ប្រៀបធៀបទំព័រ",
        "compare-page1": "ទំព័រ ១",
        "compare-page2": "ទំព័រ ២",
        "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",
        "rightsnone": "(ទទេ)",
        "revdelete-summary": "កែប្រែចំណារពន្យល់",
        "feedback-adding": "កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...",
        "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-thai": "អក្សរថៃ",
        "special-characters-group-lao": "អក្សរឡាវ",
-       "special-characters-group-khmer": "អក្សរខ្មែរ"
+       "special-characters-group-khmer": "អក្សរខ្មែរ",
+       "special-characters-title-minus": "សញ្ញាដក"
 }
index 31a11c0..a50a321 100644 (file)
@@ -22,7 +22,9 @@
                        "The Evil IP address",
                        "VASANTH S.N.",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Pavanaja",
+                       "Ananth subray"
                ]
        },
        "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
        "pool-servererror": "ಪೂಲ್ ಕೌಂಟರ್ ಸೇವೆಯು ಲಭ್ಯವಿಲ್ಲ ($1).",
        "poolcounter-usage-error": "ಬಳಕೆಯ ದೋಷ: $1",
        "aboutsite": "ಕನ್ನಡ {{SITENAME}} ಬಗ್ಗೆ",
-       "aboutpage": "Project:ನಮà³\8dಮ à²¬à²\97à³\8dà²\97à³\86",
+       "aboutpage": "Project:ಬಗ್ಗೆ",
        "copyright": "ವಿಶೇಷವಾಗಿ ಹೇಳಲಲ್ಲಿದರೆ ಇದು \"$1\" ಕಾಪಿರೈಟ್ ಅಲ್ಲಿ ಲಭ್ಯ ಉಂಟು",
        "copyrightpage": "{{ns:project}}:ಕೃತಿಸ್ವಾಮ್ಯತೆಗಳು",
        "currentevents": "ಪ್ರಚಲಿತ ಸಂಗತಿಗಳು",
        "policy-url": "Project:ನಿಯಮಾವಳಿಗಳು",
        "portal": "ಸಮುದಾಯ ಪುಟ",
        "portal-url": "Project:ಸಮುದಾಯ ಪುಟ",
-       "privacy": "à²\96ಾಸà²\97ಿ à²®à²¾à²¹à²¿à²¤à²¿à²¯ à²¬à²\97à³\8dà²\97à³\86 à²¨à²¿à²²à³\81ವà³\81",
-       "privacypage": "Project:à²\96ಾಸà²\97ಿಮಾಹಿತಿ à²¨à²¿à²¯à²®",
+       "privacy": "à²\97à³\8cಪà³\8dಯತà³\86ಯ à²\95ಾರà³\8dಯನà³\80ತಿ",
+       "privacypage": "Project:à²\97à³\8cಪà³\8dಯತà³\86ಯ à²\95ಾರà³\8dಯನà³\80ತಿ",
        "badaccess": "ಅನುಮತಿ ದೋಷ",
        "badaccess-group0": "ನೀವು ಕೋರಿರುವ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ.",
        "badaccess-groups": "ನೀವು ಕೋರಿರುವ ಕ್ರಿಯೆಯು ಕೇವಲ ಈ {{PLURAL:$2|ಗುಂಪಿಗೆ|ಗುಂಪುಗಳಲ್ಲಿ ಒಂದಕ್ಕೆ}} ಸೇರಿರುವ ಬಳಕೆದಾರರಿಗೆ ಸೀಮಿತವಾಗಿದೆ: $1.",
        "mailerror": "ಅಂಚೆ ಕಳುಹಿಸುವಲ್ಲಿ ದೋಷ: $1",
        "acct_creation_throttle_hit": "ಕ್ಷಮಿಸಿ, ನೀವಾಗಲೇ{{PLURAL:$1|೧ ಖಾತೆಯನ್ನು|$1 ಖಾತೆಗಳನ್ನು}} ತೆರೆದಿದ್ದೀರಿ.\nಇನ್ನು ಹೆಚ್ಚಿನ ಖಾತೆಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.",
        "emailauthenticated": "ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸವು ದಿನಾಂಕ $2 ಸಮಯ $3 ಅಂದು ಧೃಡೀಕೃತವಾಗಿದೆ.",
-       "emailnotauthenticated": "ನಿಮà³\8dಮ à²\87-à²\85à²\82à²\9aà³\86 à²µà²¿à²³à²¾à²¸ à²\87ನà³\8dನà³\82 à²§à³\83ಡà³\80à²\95à³\83ತವಾà²\97ಿಲà³\8dಲ.\nà²\88 à²\95à³\86ಳà²\97ಿನ à²µà³\88ಶಿಷà³\8dà²\9fತೆಗಳಿಗೆ ಇ-ಅಂಚೆಯನ್ನು ನಿಮಗೆ ಕಳುಹಿಸಲು ಆಗುವುದಿಲ್ಲ.",
+       "emailnotauthenticated": "ನಿಮà³\8dಮ à²\87-à²\85à²\82à²\9aà³\86 à²µà²¿à²³à²¾à²¸ à²\87ನà³\8dನà³\82 à²§à³\83ಡà³\80à²\95à³\83ತವಾà²\97ಿಲà³\8dಲ.\nà²\88 à²\95à³\86ಳà²\97ಿನ à²\86ಯà³\8dà²\95ೆಗಳಿಗೆ ಇ-ಅಂಚೆಯನ್ನು ನಿಮಗೆ ಕಳುಹಿಸಲು ಆಗುವುದಿಲ್ಲ.",
        "noemailprefs": "ಈ ಸೌಲಭ್ಯಗಳು ಕೆಲಸ ಮಾಡಬೇಕಾದರೆ ಒಂದು ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ.",
        "emailconfirmlink": "ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಧೃಡೀಕರಿಸಿ",
        "invalidemailaddress": "ಈ ಇ-ಅಂಚೆ ವಿಳಾಸವು ಸರಿಯಾದ ಪ್ರಕಾರದಲ್ಲಿ ಇಲ್ಲದಿರುವುದರಿಂದ ಇದನ್ನು ಸ್ವೀಕಾರ ಮಾಡಲಾಗುವುದಿಲ್ಲ.\nದಯವಿಟ್ಟು ಸರಿಯಾದ ಪ್ರಕಾರದ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ ಅಥವ ಆ ಚೌಕವನ್ನು ಖಾಲಿ ಬಿಡಿ.",
        "resetpass-recycled": "ದಯವಿಟ್ಟು ಈಗಿನ ಪ್ರವೇಶಪದದ ಬದಲು ಹೊಸಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಿ ಮರುಚಾಲನೆ ನೀಡಿ.",
        "resetpass-temp-password": "ತಾತ್ಕಾಲಿಕ ಪ್ರವೇಶಪದ:",
        "passwordreset": "ಪ್ರವೇಶಪದವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿ.",
-       "passwordreset-legend": "ಪ್ರವೇಶಪದವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಿ.",
        "passwordreset-username": "ಬಳಕೆದಾರ ಹೆಸರು:",
        "passwordreset-domain": "ಕ್ಷೇತ್ರ:",
        "passwordreset-email": "ಇ-ಮೇಲ್ ವಿಳಾಸ:",
        "changeemail-newemail": "ಹೊಸ  ಇ-ಅಂಚೆ ವಿಳಾಸ:",
        "changeemail-none": "(ಯಾವೂ ಇಲ್ಲ)",
        "changeemail-submit": "ಇಮೇಲ್ ಬದಲಾಯಿಸಿ",
+       "resettokens-tokens": "ಸಂಕೇತಗಳು:",
+       "resettokens-token-label": "$1(ಪ್ರಸ್ತುತ ಮೌಲ್ಯ:$2)",
        "bold_sample": "ದಪ್ಪಗಿನ ಅಚ್ಚು",
        "bold_tip": "ದಪ್ಪಗಿನ ಅಚ್ಚು",
        "italic_sample": "ಓರೆ ಅಕ್ಷರಗಳು",
        "edit-no-change": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಕಡೆಗಣಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಪಠ್ಯದಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆ ಮಾಡಲಾಗಿಲ್ಲ್ಲ",
        "postedit-confirmation-saved": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗಿದೆ.",
        "edit-already-exists": "ಹೊಸ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗಲಿಲ್ಲ.\nಅದು ಆಗಲೆ ಅಸ್ಥಿತ್ವದಲ್ಲಿದೆ.",
+       "content-model-wikitext": "ವಿಕಿ ಪಠ್ಯ",
+       "content-model-text": "ಸರಳ ಪಠ್ಯ",
        "content-model-javascript": "ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್",
        "content-model-css": "ಸಿಎಸ್‍ಎಸ್",
+       "content-json-empty-object": "ಖಾಲಿ ವಿಷಯ",
+       "content-json-empty-array": "ಖಾಲಿ ರಚನೆ",
        "expensive-parserfunction-warning": "ಎಚ್ಚರಿಕೆ: ಈ ಪುಟದಲ್ಲಿ ಬಹುತೇಕ ದುಬಾರಿ parser function ಕರೆಗಳಿವೆ.\n\nಈಗ {{PLURAL:$1|$1 ಕರೆ|$1 ಕರೆಗಳು}} ಇದ್ದು, $2 {{PLURAL:$2|ಕರೆಗಿಂತ|ಕರೆಗಳಿಗಿಂತ}} ಕಡಿಮೆ ಇರಬೇಕು.",
        "expensive-parserfunction-category": "ಬಹುತೇಕ ದುಬಾರಿ parser function ಕರೆಗಳಿರುವ ಪುಟಗಳು",
        "post-expand-template-inclusion-warning": "' ' 'ಎಚ್ಚರಿಕೆ:' ' ' ಪುಟದಲ್ಲಿ ಹಕುವ ಛಿತ್ರ ಥೊದಥು. \nಕೆಲವು ಟೆಂಪ್ಲೇಟುಗಳು ಹಕಲಗುದಿಲ್ಲ.",
        "histlegend": "ವ್ಯತ್ಯಾಸಗಳ ಆಯ್ಕೆ: ಹೋಲಿಕೆ ಮಾಡಬೇಕು ಎಂದಿರುವ ಎರಡು ಆವೃತ್ತಿಗಳ ಪಕ್ಕದಲ್ಲಿ ಇರುವ ಗುಂಡಿಗಳನ್ನು ಗುರುತು ಮಾಡಿ. ನಂತರ enter ಅನ್ನು ಒತ್ತಿ ಅಥವ ಪಟ್ಟಿಯ ಅಂತ್ಯದಲ್ಲಿರುವ ಗುಂಡಿಯನ್ನು ಒತ್ತಿ.<br />\nಆಖ್ಯಾನ: (ಈಗಿನ) = ಪ್ರಸಕ್ತ ಆವೃತ್ತಿಯೊಂದಿಗೆ ವ್ಯತ್ಯಾಸಗಳು,\n(ಕೊನೆಯ) = ಹಿಂದಿನ ಆವೃತ್ತಿಯೊಂದಿಗೆ ವ್ಯತ್ಯಾಸಗಳು, ಚು = ಚುಟುಕಾದ ಬದಲಾವಣೆ.",
        "history-fieldset-title": "ಇತಿಹಾಸವನ್ನು ವಿಹರಿಸಿ",
        "history-show-deleted": "ಅಳಿಸಿದ್ದು ಮಾತ್ರ",
-       "histfirst": "à²\85ತà³\8dಯà²\82ತ à²®à³\81à²\82à²\9aಿನ",
-       "histlast": "à²\85ತà³\8dಯà²\82ತ à²\87ತà³\8dತà³\80à²\9aಿನ",
+       "histfirst": "ಹಳà³\86ಯ",
+       "histlast": "ಹà³\8aಸ",
        "historysize": "({{PLURAL:$1|೧ ಬೈಟ್|$1 ಬೈಟ್‍ಗಳು}})",
        "historyempty": "(ಖಾಲಿ)",
        "history-feed-title": "ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ",
        "revdelete-hide-text": "ಬದಲಾವಣೆಯ ಪಠ್ಯವನ್ನು ಅಡಗಿಸು",
        "revdelete-hide-image": "ಫೈಲಿನಲ್ಲಿರುವ ಮಾಹಿತಿಯನ್ನು ಅಡಗಿಸು",
        "revdelete-hide-name": "ಕಾರ್ಯ ಮತ್ತು ಗುರಿಗಳನ್ನು ಅಡಗಿಸು",
-       "revdelete-hide-comment": "ಸà²\82ಪಾದನà³\86 à²µà²¿à²µà²°à²£à³\86 à²\85ಡà²\97ಿಸà³\81",
+       "revdelete-hide-comment": "ಸಾರಾà²\82ಶವನà³\81 à²¬à²¦à²²à²¾à²¯à²¿à²¸à²¿",
        "revdelete-hide-user": "ಸಂಪಾದಕರ ಬಳಕೆಯ ಹೆಸರು/IP ಅಡಗಿಸು",
        "revdelete-hide-restricted": "ಈ ನಿಬಂಧನೆಗಳನ್ನು ನಿರ್ವಾಹಕರಿಗೂ ಅನ್ವಯಿಸು ಮತ್ತು ಈ interface ಗೆ ಬೀಗ ಹಾಕು",
        "revdelete-radio-same": "(ಬದಲಾಯಿಸಬೇಡಿ)",
        "searchmenu-exists": "'''\"[[:$1]]\" ಹೆಸರಿನ ಪುಟ ಈ ವಿಕಿಯಲ್ಲಿದೆ.'''",
        "searchmenu-new": "'''''[[:$1]]'' ಪುಟವನ್ನು ಈ ವಿಕಿಯಲ್ಲಿ ಸೃಷ್ಟಿಸಿ!'''",
        "searchprofile-articles": "ಲೇಖನ ಪುಟ",
-       "searchprofile-images": "ಬಹà³\81ಮಾಧà³\8dಯಮ",
+       "searchprofile-images": "ಮಲà³\8dà²\9fಿಮà³\80ಡಿಯ",
        "searchprofile-everything": "ಪ್ರತಿಯೊಂದು",
        "searchprofile-advanced": "ಪರಿಣತ",
        "searchprofile-articles-tooltip": "$1 ನಲ್ಲಿ ಹುಡುಕಿ",
        "listfiles-latestversion": "ಪ್ರಸಕ್ತ ಆವೃತ್ತಿ",
        "listfiles-latestversion-yes": "ಹೌದು",
        "listfiles-latestversion-no": "ಇಲ್ಲ",
-       "file-anchor-link": "à²\9aಿತà³\8dರ",
+       "file-anchor-link": "à²\95ಡತ",
        "filehist": "ಕಡತದ ಇತಿಹಾಸ",
        "filehist-help": "ದಿನ/ಕಾಲ ಒತ್ತಿದರೆ ಆ ಸಮಯದಲ್ಲಿ ಈ ಕಡತದ ವಸ್ತುಸ್ಥಿತಿ ತೋರುತ್ತದೆ.",
        "filehist-deleteall": "ಎಲ್ಲವನ್ನೂ ಅಳಿಸು",
        "unusedtemplateswlh": "ಇತರ ಕೊಂಡಿಗಳು",
        "randompage": "ಯಾದೃಚ್ಛಿಕ ಪುಟ",
        "randompage-nopages": "ಈ ಪುಟಪ್ರಬೇಧದಲ್ಲಿ ಯಾವ ಪುಟವೂ ಇಲ್ಲ.",
+       "randomincategory-submit": "ಹೋಗು",
        "randomredirect": "ಯದೃಚ್ಛಿಕ ಪುನರ್ನಿರ್ದೇಶಿತ ಪುಟ",
        "randomredirect-nopages": "ಈ ಪುಟಪ್ರಬೇಧದಲ್ಲಿ ಯಾವ ಪುನರ್ನಿರ್ದೇಶನಗಳೂ ಇಲ್ಲ.",
        "statistics": "ಅಂಕಿ ಅಂಶಗಳು",
        "nlinks": "$1 {{PLURAL:$1|ಸಂಪರ್ಕ|ಸಂಪರ್ಕಗಳು}}",
        "nmembers": "$1 {{PLURAL:$1|ಸದಸ್ಯ|ಸದಸ್ಯರು}}",
        "nrevisions": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
-       "nviews": "$1 {{PLURAL:$1|ನೋಟ|ನೋಟಗಳು}}",
        "lonelypages": "ಒಬ್ಬಂಟಿ ಪುಟಗಳು",
        "lonelypagestext": "ಈ ಕೆಳಗಿನ ಪುಟಗಳು {{SITENAME}} ಅಲ್ಲಿರುವ ಇತರ ಯಾವ ಪುಟದಿಂದಲೂ ಕೊಂಡಿಯನ್ನು ಹೊಂದಿಲ್ಲ.",
        "uncategorizedpages": "ಅವರ್ಗೀಕೃತ ಪುಟಗಳು",
        "pager-newer-n": "{{PLURAL:$1|ಹೊಸ ೧|ಹೊಸ $1}}",
        "pager-older-n": "{{PLURAL:$1|ಹಳೆ ೧|ಹಳೆ $1}}",
        "suppress": "ನಿಗಾ ಇಡುವವ",
-       "booksources": "ಪà³\81ಸà³\8dತà²\95à²\97ಳ à²®à³\82ಲ",
+       "booksources": "ಪà³\81ಸà³\8dತà²\95ದ à²®à³\82ಲà²\97ಳà³\81",
        "booksources-search-legend": "ಪುಸ್ತಕ ಮೂಲಗಳಿಗೆ ಹುಡುಕು",
        "booksources-search": "ಹುಡುಕು",
        "specialloguserlabel": "ಸದಸ್ಯ:",
index 4cadd83..8d8ac37 100644 (file)
@@ -48,7 +48,9 @@
                        "SeoJeongHo",
                        "Banwol",
                        "Ysjbserver",
-                       "LiteHell"
+                       "LiteHell",
+                       "Lefion",
+                       "Leeheonjin"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "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-nopages": "[[:Category:$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": "$1번 {{PLURAL:$1|읽음}}",
        "nimagelinks": "{{PLURAL:$1|문서}} $1개에서 사용됨",
        "ntransclusions": "{{PLURAL:$1|문서}} $1개에서 사용됨",
        "specialpage-empty": "명령에 대한 결과가 없습니다.",
        "unusedimages": "사용하지 않는 파일 목록",
        "wantedcategories": "필요한 분류 목록",
        "wantedpages": "필요한 문서 목록",
+       "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참고하세요.",
        "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
        "wantedfiles": "필요한 파일 목록",
        "wantedfiletext-cat": "다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.",
        "rollback-success": "$1의 편집을 되돌렸습니다.\n$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]]\" 문서를 보호했습니다",
        "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": "문서의 과거 판",
        "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]].",
index bd52da0..453d189 100644 (file)
        "site-atom-feed": "$1 — Atom лентасы",
        "page-rss-feed": "«$1» — RSS-лентасы",
        "page-atom-feed": "«$1» — Atom-лентасы",
+       "feed-atom": "Atom",
        "red-link-title": "$1 (быллай бет джокъду)",
        "sort-descending": "Кем болуугъа кёре тиз",
        "sort-ascending": "Ёсюуге кёре тиз",
        "passwordreset": "Паролну джибериу",
        "passwordreset-text-one": "Паролугъуз джиберилир ючюн бу форманы толтуругъуз.",
        "passwordreset-text-many": "{{PLURAL:$1|Пароль ийилир ючюн билгилени бир бёлюмюн джазыгъыз.}}",
-       "passwordreset-legend": "Паролну атыу",
        "passwordreset-disabled": "Бу викиде паролла атыу амал джукъланыбды.",
        "passwordreset-emaildisabled": "Бу викиде электрон почтаны функциялары джукъланыбдыла.",
        "passwordreset-username": "Къошулуучуну аты:",
        "changeemail-password": "«{{SITENAME}}» проектде паролугъуз:",
        "changeemail-submit": "Адресни тюрлендир",
        "resettokens": "Токенлени джибер",
-       "resettokens-legend": "Токенлени джибер",
        "resettokens-tokens": "Токенле:",
        "resettokens-token-label": "$1 (бусагъатдагъы: $2)",
        "bold_sample": "Къалын джазыу",
        "headline_tip": "2-чи дараджалы башлыкъ",
        "nowiki_sample": "Формат этилинмеген текстни бери салыгъыз",
        "nowiki_tip": "Вики-формат этиуню игнор эт",
+       "image_sample": "Юлгю.jpg",
        "image_tip": "Эндирилген файл",
+       "media_sample": "Юлгю.ogg",
        "media_tip": "Медиа-файлгъа джибериу",
        "sig_tip": "Къол салыуугъуз эмда заман",
        "hr_tip": "Горизонтал сыз (кёб хайырландырмагъыз)",
        "uploadnewversion-linktext": "Бу файлны джангы версиясын джюклеу",
        "shared-repo-from": "$1-дан",
        "shared-repo": "Ортакъ сакълау джер",
+       "shared-repo-name-wikimediacommons": "Викигёзен",
        "upload-disallowed-here": "Бу файлны юсюню джазаргъа болмайды.",
        "filerevert": "$1 файлны эски халына къайтыу",
        "filerevert-legend": "Файлны эски халына къайтар",
        "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": "Сорма эсеб келтирмеди.",
        "tooltip-pt-logout": "Чыгъыу",
        "tooltip-pt-createaccount": "Ажымсыз керек болмагъанлыкъгъа, тергеу джазыу (аккаунт) къураб системагъа кирирге теджейбиз.",
        "tooltip-ca-talk": "Бетни ичиндегин сюзюу",
-       "tooltip-ca-edit": "Бу бетни тюрлендирирге болады. Сакълагъынчы ал къарауну хайырландырыгъыз.",
+       "tooltip-ca-edit": "Бу бетни тюрлендир",
        "tooltip-ca-addsection": "Джангы бёлюм къура",
        "tooltip-ca-viewsource": "Бу бет тюрлендириуден джакъланыбды. Алай а сиз къараб, текстин копия этерге боллукъсуз",
        "tooltip-ca-history": "Бетни алгъын версиялары",
        "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 70a9f42..3c65082 100644 (file)
@@ -14,7 +14,7 @@
        "tog-hideminor": "Dun de klein Mini-Änderonge (<strong>M</strong>) en de Leß met de „{{lcfirst:{{int:Recentchanges}}}}“ <strong>nit</strong> aanzeije",
        "tog-hidepatrolled": "Dun de nohjeloorte Änderunge en de „{{int:recentchanges}}“ eez ens <strong>nit</strong> aanzeije",
        "tog-newpageshidepatrolled": "Dun de nohjeloorte Änderunge en de Leß „{{int:newpages}}“ eez ens <strong>nit</strong> aanzeije",
-       "tog-extendwatchlist": "Verjrößer de Oppassliss för jede Aat vun müjjeliche Änderunge ze zeije, nit nor de neuste",
+       "tog-extendwatchlist": "Verjrößer de Oppaßleß för jede Aat vun müjjeliche Ännderonge ze zeije, nit alleijns  de neuste.",
        "tog-usenewrc": "De Änderonge en de „{{int:Recentchanges}}“ un en de Oppaßleß en Jroppe zesammevaße.",
        "tog-numberheadings": "Dun de Üvverschrefte automatisch nummereere",
        "tog-showtoolbar": "De Wärkzüchleß zom Ändere aanzeije",
        "tog-forceeditsummary": "Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht",
        "tog-watchlisthideown": "Don ming eije Änderonge <strong>nit</strong> en minger Oppaßleß aanzeije",
        "tog-watchlisthidebots": "Dun jedes Mohl dä Bots ehr Änderonge <strong>nit</strong> en minger Oppaßleß zeije",
-       "tog-watchlisthideminor": "Dun jedes Mol de klein Mini-Änderunge <strong>nit</strong> en minger Oppassliss zeije",
-       "tog-watchlisthideliu": "Enjeloggte Metmaacher ier Änderunge jedesmol <strong>nit</strong> en minger Oppassliss aanzeije",
-       "tog-watchlisthideanons": "Namelose Metmaacher ier Änderunge jedesmol <strong>nit</strong> en minger Oppassliss aanzeije",
-       "tog-watchlisthidepatrolled": "Dun de nohjeloorte Änderunge et eez ens <strong>nit</strong> en minger Oppassliss aanzeije",
+       "tog-watchlisthideminor": "Donn jehdes Mohl de klein Mini-Ännderonge <strong>nit</strong> en minger Oppaßleß zeije",
+       "tog-watchlisthideliu": "Enjeloggte Metmaacher ier Änderonge jehdesmohl <strong>nit</strong> en minger Oppaßleß aanzeije",
+       "tog-watchlisthideanons": "Nahmelohse Metmaacher ier Änderonge jehdesmohl <strong>nit</strong> en minger Oppaßleß aanzeije.",
+       "tog-watchlisthidepatrolled": "Donn de nohjelohrte Oppaßleß et eez ens <strong>nit</strong> en minger Oppaßleß aanzeije.",
        "tog-ccmeonemails": "Scheck mer en Kopie, wann ich en <i lang=\"en\">e-mail</i> an ene andere Metmaacher scheck",
        "tog-diffonly": "Zeich beim Versione Verjliche nur de Ungerscheide aan (ävver pack nit noch de janze Sigg dodronger)",
        "tog-showhiddencats": "Donn de verschtoche Saachjroppe aanzeije",
        "unprotect": "Schoz ändere",
        "unprotectthispage": "Siggeschoz ändere",
        "newpage": "Neu Sigg",
-       "talkpage": "Övver die Sigg heh schwaade",
+       "talkpage": "Övver di Sigg heh schwahde",
        "talkpagelinktext": "Klaaf",
        "specialpage": "Extrasigg",
        "personaltools": "Metmaacher Werkzüch",
        "toolbox": "Wärkzüsch",
        "userpage": "Däm Metmaacher sing Sigg aanluure",
        "projectpage": "De Projeksigg aanluure",
-       "imagepage": "De Sigg övver die Dattei aanluure",
+       "imagepage": "De Sigg övver di Datteij aanlohre",
        "mediawikipage": "Di Sigg med enem Tex uss em Ingerfäjß vum Wiki aanluure",
        "templatepage": "De Schablohn ier Sigk aanluere",
        "viewhelppage": "De Hölpsigg aanluure",
        "badaccess-group0": "Do häs nit jenoch Räächde.",
        "badaccess-groups": "Wat Do wells, dat dörfe nor de Metmaacher us {{PLURAL:$2|dä Jropp „$1“.|eine vun dä Jroppe: $1.|jaa keine Jropp.}}",
        "versionrequired": "De Väsjohn $1 vum MehdijaWikki es nühdesch",
-       "versionrequiredtext": "De Version $1 vun MediaWiki Soffwär es nüdich, öm die Sigg heh bruche ze künne. Süch op [[Special:Version|de Versionssigg]], wat mer heh för ene Soffwärstand han.",
+       "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}}",
        "backlinksubtitle": "←&nbsp;$1",
        "newmessagesdifflinkplural": "{{PLURAL:$1|läzde Änderong|läzde Änderonge|kein Änderonge}}",
        "youhavenewmessagesmulti": "Do häs neu Nachrichte op $1",
        "editsection": "Ändere",
-       "editold": "Heh die Version ändere",
+       "editold": "Heh di Väsjohn änndere",
        "viewsourceold": "Wikitex zeije",
        "editlink": "ändere",
        "viewsourcelink": "aanloore",
        "page-atom-feed": "Atom-Abonnomang-Kannal (<i lang=\"en\">Feed</i>) för de Sigg „$1“",
        "feed-atom": "Atom",
        "feed-rss": "RSS",
-       "red-link-title": "$1 — en Sigg, diet noch nit jitt",
+       "red-link-title": "$1 — en Sigg, di_j_et noch nit jitt",
        "sort-descending": "Röckwääts zoteere",
        "sort-ascending": "Opwääts zoteere",
        "nstab-main": "Atikkel",
        "nstab-template": "Schablohn",
        "nstab-help": "Hölp",
        "nstab-category": "Saachjropp",
-       "nosuchaction": "Die Aufgab (action) kenne mer nit",
-       "nosuchactiontext": "<strong>Na su jet:</strong> De Aufgab us dä URL, die do hinger „<code>action=</code>“ dren steiht, jo die kennt heh dat Wiki jar nit.\nDo künns Desch vertipp han, udder ene verkeehte Lengk hät Desch noh heh jebraat.\nEt künnt sesch och öm ene Fäähler en dä Sofware fum Wiki handelle.",
+       "nosuchaction": "Di Aufgab („<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">action</code>“) känne mer nit",
+       "nosuchactiontext": "<strong>Na su jet:</strong> De Aufgab us däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, di do hinger „<code>action=</code>“ dren steiht, joh, di kennt heh dat Wiki jar nit.\nDo künns Desch vertipp han, udder ene verkeehte Lengk hät Desch noh heh jebraat.\nEt künnt sesch och öm ene Fäähler en dä Sofware fum Wiki handelle.",
        "nosuchspecialpage": "Esu en {{int:nstab-special}} ha'mer nit",
        "nospecialpagetext": "De aanjefrochte {{int:nstab-special}} jitt et nit, de [[Special:SpecialPages|Leß met de {{int:nstab-special}}e]] helf Der wigger.",
        "error": "Fähler",
        "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.",
-       "querypage-no-updates": "'''Heh die Sigg weed nit mieh op ene neue Stand jebraat.'''",
+       "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": "Die Sigg es jeschöz, un mer kann se nit ändere.",
+       "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:",
-       "protectedinterface": "Op dä Sigg heh steiht Tex usem Interface vun de Wiki-Soffwär. Dröm es die jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed.",
+       "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.",
-       "cascadeprotected": "Die Sigg es jeschöz, un mer kann se nit ändere. Se es en en Schotz-Kaskad enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:\n$2",
+       "cascadeprotected": "Di Sigg es jeschöz, un mer kann se nit ändere. Se es en en Schotz-Kaskad enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:\n$2",
        "namespaceprotected": "Do darfs Sigge em Appachtemang „$1“ nit ändere.",
        "customcssprotected": "Do darfs di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Cascading Style Sheet\">CSS</i>-Sigg heh nit ändere. Se jehööd enem andere Metmaacher, un es e Schtök fun dämm singe Enschtällonge.",
        "customjsprotected": "Do darfs di JavaSkep-Sigg heh nit änndere. Se jehööd enem anndere Metmaacher, un es e Schtök fun dämm singe Enschtällonge.",
        "mycustomcssprotected": "Do häs nit dat Rääsch, he di Sigg med enem <i lang=\"en\" xml:lang=\"en\">CSS</i> ze verändere.",
        "mycustomjsprotected": "Do häs nit dat Rääsch, he di Sigg med enem JavaSkrep ze verändere.",
-       "myprivateinfoprotected": "Do häs nit dat Rääsch, Ding päsöönlesche Aanjaabe ze verändere.",
+       "myprivateinfoprotected": "Do häs nit dat Rääsch, Ding päsöhnlesche Aanjahbe ze verändere.",
        "mypreferencesprotected": "Do häs nit dat Rääsch, Ding Enschtällonge ze verändere.",
        "ns-specialprotected": "{{int:nstab-special}}e künne mer nit ändere.",
-       "titleprotected": "Dä Tittel för en Sigg eß verbodde, fum [[User:$1]], un dr Jrond wohr: ''„$2“''",
+       "titleprotected": "Di Övverschreff för en Sigg eß fum [[User:$1]] verbodde woode, un der Jrond wohr: ''„$2“''",
        "filereadonlyerror": "Mer künne di Dattei „$1“ nit ändere, weil dä Dateijebeshtand „$2“ bloß för ze Lässe doh es.\n\nDä Wiki_Köbes dovun hät beim Deeschmaache als Jrond aanjejovve: „$3“",
-       "invalidtitle-knownnamespace": "„$3“ es ene onjöltijje Tittel för em Appachtemang „$2“",
-       "invalidtitle-unknownnamespace": "„$2“ es ene onjöltijje Tittel för e Appachtemang met dä verkehte Nommer $1.",
+       "invalidtitle-knownnamespace": "„$3“ es en onjöltijje Övverschreff för em Appachtemang „$2“",
+       "invalidtitle-unknownnamespace": "„$2“ es sn onjöltijje Övverschreff em onbikannte Appachtemang met dä Nommer $1",
        "exception-nologin": "Nit enjelogg",
        "exception-nologin-text": "Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh enjelogg bes.",
        "exception-nologin-text-manual": "De mööds ald $1, öm heh di Sigg udder di Axjuhn zohjriife ze dörve.",
        "password-login-forbidden": "Dä Zohjang met däm Metmaacher-Name un däm Paßwoot es verbodde.",
        "mailmypassword": "Lohß jonn!",
        "passwordremindertitle": "Neu Paßwoot för {{GRAMMAR:Dat|{{SITENAME}}}}",
-       "passwordremindertext": "Jod müjjelich, Do wors et selver,\nvun de IP Adress $1,\njedenfalls hät eine aanjefroch, dat\nmer Dir e neu Passwood zoschecke soll,\nför et Enlogge en {{GRAMMAR:Akk|{{SITENAME}}}} op\n{{FULLURL:{{MediaWiki:Mainpage}}}}\n($4)\n\nAlsu, e neu Passwood för \"$2\"\nes jetz vürjemerk: \"$3\".\nDo solls De tirek jlich enlogge,\nun dat Passwood widder ändere,\nwann dat esu Dinge Wonsch wor.\nDat neu Passwood leuf noh {{PLURAL:$5|einem Daach|$5 Dääch|noch hück}} us.\nDä Transport övver et Netz met e-mail\nes unsecher, do künne Fremde metlese,\nun winnichstens de Jeheimdeenste dun\ndat och. Usserdäm es \"$3\"\nvilleich nit esu jod ze merke?\n\nWann nit Do, söndern söns wä noh däm\nneue Passwood verlangk hät, wann De\nDich jetz doch widder aan Ding ahl Passwood\nentsenne kanns, jo do bruchs de jar nix\nze don, do kanns De Ding ahl Passwood wigger\nbruche, un die e-mail heh, die kanns De\njlatt verjesse.\n\nEne schöne Jroß vun {{GRAMMAR:Dat|{{SITENAME}}}}.\n\n--\n{{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}",
+       "passwordremindertext": "Jod müjjelich, Do wors et selver,\nvun de IP Adress $1,\njedenfalls hät eine aanjefroch, dat\nmer Dir e neu Passwood zoschecke soll,\nför et Enlogge en {{GRAMMAR:Akk|{{SITENAME}}}} op\n{{FULLURL:{{MediaWiki:Mainpage}}}}\n($4)\n\nAlsu, e neu Passwood för \"$2\"\nes jetz vürjemerk: \"$3\".\nDo solls De tirek jlich enlogge,\nun dat Passwood widder ändere,\nwann dat esu Dinge Wonsch wor.\nDat neu Passwood leuf noh {{PLURAL:$5|einem Daach|$5 Dääch|noch hück}} us.\nDä Transport övver et Netz met e-mail\nes unsecher, do künne Fremde metlese,\nun winnichstens de Jeheimdeenste dun\ndat och. Usserdäm es \"$3\"\nvilleich nit esu jod ze merke?\n\nWann nit Do, söndern söns wä noh däm\nneue Passwood verlangk hät, wann De\nDich jetz doch widder aan Ding ahl Passwood\nentsenne kanns, jo do bruchs de jar nix\nze don, do kanns De Ding ahl Passwood wigger\nbruche, un di e-mail heh, di kanns De\njlatt verjäße.\n\nEne schöne Jroß vun {{GRAMMAR:Dat|{{SITENAME}}}}.\n\n--\n{{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}",
        "noemail": "Dä Metmaacher „$1“ hät en dämm sing Ennschtällonge kein <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß aanjejovve.",
        "noemailcreate": "Do moß en jöltijje Adräß för Ding <i lang=\"en\">e-mail</i> aanjävve",
        "passwordsent": "E neu Passwood es aan de E-Mail Adress vun däm Metmaacher „$1“ ungerwähs. Meld dich domet aan, wann De et häs. Dat ahle Passwood bliev erhalde un kann och noch jebruch wääde, bes dat De Dich et eetste Mol met däm Neue enjelogg häs.",
        "blocked-mailpassword": "Ding IP Adress es blockeet.",
-       "eauthentsent": "En <i lang=\"en\">e-mail</i> es jäz ungerwähs aan di Adräß en de Enschtällonge. Ih dat mieh <i lang=\"en\">e-mails</i> verscheck wääde künne, moß mer maache, wat en dä <i lang=\"en\">e-mail</i> dren schteiht, öm ze beschtääteje, dat di Adräß schtemmp.",
+       "eauthentsent": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> es jäz ungerwähs aan di Adräß en de Enschtällonge. Ih dat mih <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mails</i> verschek wääde künne, moß mer maache, wat en dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> dren schteiht, öm ze beschtähteje, dat di Adräß schtemmp.",
        "throttled-mailpassword": "En Erennerung för di Passwood es alld ongerwähs, un mieh wi eimol en {{PLURAL:$1|der Schtond|$1 Schtonde|nidd ens ener Schtond}} dommer kein schecke.",
        "mailerror": "Fähler beim E-Mail Verschecke: $1.",
-       "acct_creation_throttle_hit": "<b>Schad.</b>\nBesöker fun däm Wiki heh han övver de IP-Addräß, övver di De jraad aam\nNetz aam hange bes, övver der letzte Daach (24 Stunde) zosamme jenumme ald\n{{PLURAL:$1|eine|$1|keine}} mol enen neuen Metmaacher aanjelaht.\nMieh sin nit müjjelich. Dröm künne Lück, die jraad die IP-Addräß han,\nför der Momang nit noch mit Metmaacher neu aanmellde.",
+       "acct_creation_throttle_hit": "<strong>Schahd.</strong>\nBesöker fun däm Wiki heh han övver de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß, övver di De jraad aam\nNetz aam hange bes, övver der letzte Daach (24 Schtonde) zosamme jenumme ald\n{{PLURAL:$1|eine|$1|keine}} mol enen neuen Metmaacher aanjelaht.\nMih sin nit müjjelich. Dröm künne Lück, di jraad di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß han,\nför der Momang nit noch mih Metmaacher neu aanmällde.",
        "emailauthenticated": "De Adräß för Ding <i lang=\"en\" xml:lang=\"en\">e-mail</i> wood aam $2 öm $3 Uhr beschtähtisch.",
        "emailnotauthenticated": "De Adräß för Ding <i lang=\"en\" xml:lang=\"en\">e-mail</i> wood noch nit beschtähtisch. Dröm kann kein E-Mail aan Desch jescheck wääde för:",
        "noemailprefs": "Dun en E-Mail Adress endrage, domet dat et all fluppe kann.",
        "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.",
-       "resetpass-expired-soft": "Ding Paßwood es afjeloufe un moß neu jesaz wääde. Bes esu jood_un donn e neu Paßwoot ußsöhke, udder jangk op {{int:resetpass-submit-cancel}}, öm et schpääder ze säze.",
+       "resetpass-expired-soft": "Ding Paßwood es afjeloufe un moß neu jesaz wähde. Bes esu johd_un donn e neu Paßwoot ußsöhke, udder jangk op {{int:resetpass-submit-cancel}}, öm et schpääder ze säze.",
        "resetpass-validity-soft": "Ding Kännwood es nit johd: $1\n\nSöhk Der e neu Kännwood us, udder jangg_op <em>{{int:resetpass-submit-cancel}}</em>, öm dat schpääder ze donn.",
        "passwordreset": "Et Paßwoot zeröck säze",
        "passwordreset-text-one": "Föll dat Fommolaa uß, öm Ding Paßwoot ze ändere.",
        "passwordreset-text-many": "{{PLURAL:$1|Föll ei vun dä Fälder en heh däm Fommolaa uß, öm e Zwesche_Paßwoot ze krijje.}}",
-       "passwordreset-legend": "Et Paßwoot zeröck säze",
        "passwordreset-disabled": "Et Paßwoot zeröck ze säze es heh em Wiki afjeschalldt.",
        "passwordreset-emaildisabled": "Heh dat Wiki määt nix met <i lang=\"en\">e-mail</i>!",
        "passwordreset-username": "Metmaacher_Nahme:",
        "passwordreset-capture-help": "Wann De heh e Krüzje määß, kriß de di <i lang=\"en\">e-mail</i> met däm neue Paßwoot aanjezeish, ußer dat dä Metmaacher se och zohjescheck kritt.",
        "passwordreset-email": "De Adräß för de <i lang=\"en\">e-mail</i>:",
        "passwordreset-emailtitle": "Einzelheite för der Zohjang op {{GRAMMAR:Akkusativ|{{SITENAME}}}}",
-       "passwordreset-emailtext-ip": "Do künns et sällver jewääse sin, öhnswää em Internet hät vun dä IP-Adräß $1 öm\ne neu Paßwoot jefrooch, för Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}\n$4\nHeh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:\n\n$2\n\n{{PLURAL:$3|Dat Zweschepaßwoot leuf|Di Zweschepaßwööter loufe|Kein Zweschepaßwoot leuf}} en {{PLURAL:$5|enem Daach|$5 Dääsch|keinem Daach}} uß.\nDonn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi\nDo dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot\nentsenne kanns, un et nimmieh ändere wells, udder es suwwisu weiß, dann\nmoß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.",
-       "passwordreset-emailtext-user": "Dä Metmaacher $1 vun {{GRAMMAR:Dativ|{{SITENAME}}}} hät öm e neu Paßwoot jefrooch,\nför Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}\n$4\nHeh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:\n\n$2\n\n{{PLURAL:$3|Dat Zweschepaßwoot leuf|Di Zweschepaßwööter loufe|Kein Zweschepaßwoot leuf}} en {{PLURAL:$5|enem Daach|$5 Dääsch|keinem Daach}} uß.\nDonn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi\nDo dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot\nentsenne kanns, un et nimmieh ändere wells, udder es suwwisu weiß, dann\nmoß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.",
+       "passwordreset-emailtext-ip": "Do künns et sällver jewääse sin, öhnswää em Internet hät vun dä IP-Adräß $1 öm\ne neu Paßwoot jefrooch, för Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}\n$4\nHeh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:\n\n$2\n\n{{PLURAL:$3|Dat Zweschepaßwoot leuf|Di Zweschepaßwööter loufe|Kein Zweschepaßwoot leuf}} en {{PLURAL:$5|enem Daach|$5 Dääsch|keinem Daach}} uß.\nDonn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi\nDo dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot\nentsenne kanns, un et nimmih ändere wells, udder es suwwisu weiß, dann\nmoß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.",
+       "passwordreset-emailtext-user": "Dä Metmaacher $1 vun {{GRAMMAR:Dativ|{{SITENAME}}}} hät öm e neu Paßwoot jefrooch,\nför Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}\n$4\nHeh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:\n\n$2\n\n{{PLURAL:$3|Dat Zweschepaßwoot leuf|Di Zweschepaßwööter loufe|Kein Zweschepaßwoot leuf}} en {{PLURAL:$5|enem Daach|$5 Dääsch|keinem Daach}} uß.\nDonn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi\nDo dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot\nentsenne kanns, un et nimmih ändere wells, udder es suwwisu weiß, dann\nmoß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.",
        "passwordreset-emailelement": "Metmaacher Name: $1\nEijmohl-Paßwoot: $2",
-       "passwordreset-emailsent": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh es verscheck.",
-       "passwordreset-emailsent-capture": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh es verscheck woode. Heh dronger kanns De se lässe.",
-       "passwordreset-emailerror-capture": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh sullt verscheck wääde, ävver dat Verschecke aan {{GENDER:$2|dä|dat|dä Metmaacher|de|dat}} $2 hät nit jeflup: $1",
+       "passwordreset-emailsent": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> met Aanjahbe zom neue Paßwoot för der Zohjang heh es verschek.",
+       "passwordreset-emailsent-capture": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> met Aanjahbe zom neue Paßwoot för der Zohjang heh es verschek woode. Heh dronger kanns De se lässe.",
+       "passwordreset-emailerror-capture": "En <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> met Aanjahbe zom neue Paßwoot för der Zohjang heh sullt verschek wääde, ävver dat Verscheke aan {{GENDER:$2|dä|dat|dä Metmaacher|de|dat}} $2 hät nit jeflup: $1",
        "changeemail": "Donn Ding Address för de <i lang=\"en\">e-mail</i> ändere",
        "changeemail-text": "Föll dat Fommulaa uß, öm Ding Adräß för de <i lang=\"en\">e-mail</i> ze ändere.\nDo moß Ding Paßwoot enjävve, öm Ding Änderong ze bschtäätejje.",
        "changeemail-no-info": "Do mööts ald enjelogg sin, öm tiräk op di Sigg jonn ze dörve",
        "resettokens": "Neue Schlößel maache",
        "resettokens-text": "Do kanns neue Schlößel maache lohße för op beschtemmpte päsöhnlesche Daate uohjriife ze künne, di met Dingem Zohjang heh ze donn han.\n\nDonn dat op jeede Fall, wann se enem Andere bikannt jewoode sin, udder wann Dinge Zohjang jeknack woode es.",
        "resettokens-no-tokens": "Et sin kein Schlößele doh, för neu ze maache.",
-       "resettokens-legend": "Neue Schlößel maache",
        "resettokens-tokens": "Schlößele:",
        "resettokens-token-label": "$1 (Em Momang es et: $2)",
        "resettokens-watchlist-token": "ä 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 [[Special:Watchlist|Änderonge aan Sigge en Dinger Oppaßleß]]",
        "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 die Sigg aanzeläje, 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 die 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 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.",
        "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].",
-       "userpage-userdoesnotexist": "Enne Metmaacher „<nowiki>$1</nowiki>“ hammer nit, beß De secher, dat De die Metmaachersigg ändere oder aanläje wellss?.",
+       "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:",
        "clearyourcache": "'''Opjepass:'''\nNoh em Speichere künnd et sin, datt De Dingem Brauser singe Cache Speicher\növverlisste muss, ih datt De de Änderunge och ze sinn kreß.\n* Beim '''<i lang=\"en\">Mozilla</i>''' un '''<i lang=\"en\">Firefox</i>''' un '''<i lang=\"en\">Safari</i>''', dröck dä Jrußschreffknopp eronger un kleck dann op <i lang=\"en\">Reload</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck <i lang=\"de\">Ctrl+F5</i> / <i lang=\"de\">Strg+F5</i>, udder dröck <i lang=\"en\">Ctrl+R</i> / <i lang=\"de\">Strg+R</i>, obb enem <i lang=\"en\">Macintosh</i> dröck <i lang=\"de\">⌘+R</i>.\n* Beim '''<i lang=\"en\">Google Chrome</i>''', dröck <i lang=\"en\">Ctrl+Jrußschreffknopp+R</i> / <i lang=\"de\">Strg+Jrußschreffknopp+R</i>, obb enem <i lang=\"en\">Macintosh</i> dröck <i lang=\"de\">⌘+Jrußschreffknopp+R</i>.\n* Beim '''<i lang=\"en\">Internet Explorer</i>''', dröck dä Jrußschreffknopp eronger un kleck dann op <i lang=\"en\">Refresh</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck <i lang=\"de\">Ctrl+F5</i> / <i lang=\"de\">Strg+F5</i>,\n* Beim '''<i lang=\"en\">Konqueror</i>''' kleck op <i lang=\"en\">Reload</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck op <i>F5</i>.\n* Beim  '''<i lang=\"en\">Opera</i>''' kanns De övver et Menue jonn un däm janze Zwescheschpeischer singe Enhald övver <i lang=\"en\">Tools → Preferences</i> / <i lang=\"de\">Werkzeug → Einstellungen</i> fottschmieße, neuerdings jeiht et och met <i>Alt+F5</i>.",
        "note": "'''Opjepass:'''",
        "previewnote": "<strong>Heh kütt blohß en Aanseesch vöraff — Ding Änderonge sin noch nidd em Wikki faßjehallde!</strong>",
        "continue-editing": "Jangk tiräk nohm Plaz zom Schrieve",
-       "previewconflict": "Heh die Vör_Aanseesch zeisch dä Enhald vum bovvere Täxfäld.\nEsu wööd di Sigg ußsinn, wann De se jäz afschpeijschere dähts.",
-       "session_fail_preview": "'''Schad: Ding Änderunge kunnte mer su nix met aanfange.\nVersök et jrad noch ens.\nWann dat widder nit flupp, dann versök et ens met [[Special:UserLogout|Uslogge]] un widder Enlogge.'''",
+       "previewconflict": "Heh di Vör_Aanseesch zeisch dä Enhald vum bovvere Täxfäld.\nEsu wööd di Sigg ußsinn, wann De se jäz afschpeijschere dähts.",
+       "session_fail_preview": "<strong>Schahd: Met Dinge Änderonge kunnte mer su nix aanfange.\nVersöhk et jrahd noch ens.\nWann dat widder nit flupp, dann versöhk et ens met [[Special:UserLogout|Ußlogge]] un widder Enlogge.</strong>",
        "session_fail_preview_html": "'''Schad: Ding Änderunge kunnte mer su nix met aanfange. De Daate vun Dinge Login-Säschen sin nit öntlich erüvver jekumme, oder einfach ze alt.'''\n\n''Dat Wiki heh hät rüh HTML zojelooße, dröm weed de Vör-Aansich nit jezeich. Domet solls De jeschötz wääde - hoffe mer - un Aanjreffe met Java_Skripp jäje Dinge Kompjuter künne Der nix aandun.''\n\n'''Falls för Dich söns alles jod ussüht, versök et jrad noch ens. Wann dat widder nit flupp, dann versök et ens met [[Special:UserLogout|Uslogge]] un widder Enlogge.'''",
-       "token_suffix_mismatch": "'''Ding Änderong ham_mer nit övvernomme. Dinge Brauser hät Sazzeijsche em verstoche <i lang=\"en\">Token</i> för et Ändere versout. Dat paßeet och ens, wann enne <i lang=\"en\">Proxy</i> nit fungkßjeneet. Et Affspeichere wör do jefährlesch, do künt dä Sigge_Enhaldt kapott bei jon.'''",
-       "edit_form_incomplete": "'''Ene Aandeil vun dämm Fommulaa es nit reshtesh om ẞööver aanjekumme. Donn Ding Ennjaabe prööve, repareere, un versöhg et norrens.'''",
+       "token_suffix_mismatch": "'''Ding Änderong ham_mer nit övvernomme. Dinge Brauser hät Sazzeijsche en dä verschtoche Makkehrong för et Ändere versout. Dat paßehrt och ens, wann enne <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 nit fungkßjeneet. Et Affschpeischere wöhr doh jefährlesch, do künnt dä Sigge_Enhaldt kapott bei jon.'''",
+       "edit_form_incomplete": "<strong>Ene Aandeil vun dämm Fommolaa es nit reeschtesch om ẞööver aanjekumme. Donn Ding Ennjahbe pröhve, reparehre, un versöhg et norrens.</strong>",
        "editing": "De Sigg „$1“ ändere",
        "creating": "De Sigg „$1“ aanlääje",
        "editingsection": "Ne Avschnedd vun dä Sigg: „$1“ ändere",
        "editingcomment": "„$1“ ändere (ene neue Avschnedd schrieve)",
        "editconflict": "Problemche: „$1“ dubbelt bearbeidt.",
-       "explainconflict": "Ene andere Metmaacher hät aan dä Sigg och jet jeändert, un zwar nohdäm Do et Ändere aanjefange häs. Jetz ha'mer dr Dress am Jang, un Do darfs et widder uszoteere.\n<strong>Opjepass:</strong><ul><li>Dat bovvere Texfeld zeich die Sigg esu, wie se jetz em Momang jespeichert es, alsu met de Änderunge vun alle andere Metmaacher, die flöcker wie Do jespeichert han.</li><li>Dat ungere Texfeld zeich die Sigg esu, wie De se selver zoletz zerääch jebrasselt häs.</li></ul>\nDo muss jetz Ding Änderunge och in dat <strong>bovvere</strong> Texxfeld eren bränge. Natörlich ohne dä Andere ihr Saache kapott ze maache.\n<strong>Nor wat em bovvere Texfeld steiht,</strong> dat weed üvvernomme un avjespeichert, wann De „<b\nstyle=\"padding:2px; background-color:#ddd; color:black\">{{int:savearticle}}</b>“ klicks. Bes dohin kanns De esu off\nwie De wells op „<b style=\"padding:2px; background-color:#ddd; color:black\">{{int:showdiff}}</b>“ un „<b\nstyle=\"padding:2px; background-color:#ddd; color:black\">{{int:showpreview}}</b>“ klicke, öm ze pröfe, watte ald   jods jemaat häs.\n\nAlles Klor?<br /><br />",
+       "explainconflict": "Ene andere Metmaacher hät aan dä Sigg och jet jeändert, un zwar nohdäm Do et Ändere aanjefange häs. Jetz ha'mer dr Dress am Jang, un Do darfs et widder uszoteere.\n<strong>Opjepass:</strong><ul><li>Dat bovvere Täxfeld zeisch di Sigg esu, wie se jetz em Momang jeschpeijschert es, alsu met de Änderonge vun alle andere Metmaacher, di flöcker wie Do jeschpeischert han.</li><li>Dat ongere Täxfeld zeisch di Sigg esu, wie De se sälver zoletz zerääch jebrasselt häs.</li></ul>\nDo muss jetz Ding Änderunge och in dat <strong>bovvere</strong> Texxfeld eren bränge. Natörlich ohne dä Andere ihr Saache kapott ze maache.\n<strong>Nor wat em bovvere Texfeld steiht,</strong> dat weed üvvernomme un avjespeichert, wann De „<b\nstyle=\"padding:2px; background-color:#ddd; color:black\">{{int:savearticle}}</b>“ kleks. Bes dohin kanns De esu öff wi De wells op „<b style=\"padding:2px; background-color:#ddd; color:black\">{{int:showdiff}}</b>“ un „<b\nstyle=\"padding:2px; background-color:#ddd; color:black\">{{int:showpreview}}</b>“ klicke, öm ze pröfe, watte ald   jods jemaat häs.\n\nAlles Klor?<br /><br />",
        "yourtext": "Dinge Tex",
        "storedversion": "De jespeicherte Väsjohn",
-       "nonunicodebrowser": "'''Opjepass:'''\nDinge Brauser kann nit öntlich met däm Unicode un singe Buchstave ömjonn.\nBes esu jod un nemm ene andere Brauser för heh die Sigg!",
-       "editingold": "'''Opjepass!<br />\nDo bes en ahle, üvverhollte Version vun dä Sigg heh am Ändere.\nWann De die avspeichere deis,\nwie se es,\ndann jonn all die Änderunge fleute,\ndie zickdäm aan dä Sigg jemaht woode sin.\nAlsu:\nBes De secher, watte mähs?\n'''",
+       "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äch stonn 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äch {{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 nohwiese, künnt Dich dat en dr Bau bränge!",
+       "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!",
        "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",
-       "protectedpagewarning": "'''Opjepass: Die Sigg heh es jäje Veränderunge jeschötz. Nor de Wiki-Köbesse künne se ändere.'''\nHeh kütt der neuste Enndraach em Logbooch för di Sigg:",
-       "semiprotectedpagewarning": "'''Opjepass:''' Die Sigg heh es halv jesperrt, wie mer sage, dat heiß, Do muss aanjemeldt un enjelogg sin, wann De dran ändere wells.\nHeh kütt der neuste Enndrach em Logbooch doh drövver:",
-       "cascadeprotectedwarning": "'''Opjepaß:''' Die Sigg es jeschöz, un nur de Wiki-Köbesse künne se ändere. Se es en en Schotz-Kaskad enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:",
+       "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}}:",
        "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:",
        "templatesusedsection": "{{PLURAL:$1|De Schablohn|Schablohne|-nix-}} en däm Avschnedd heh:",
        "template-protected": "(jeschöz)",
        "template-semiprotected": "(halfjeschöz - tabu för neu Metmaacher un ohne Enlogge)",
-       "hiddencategories": "Die Sigg heh is en {{PLURAL:$1|dä verschtoche Saachjropp: |dä $1 verschtoche Saachjroppe: |keij verschtoche Saachjroppe dren.}}",
+       "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“. -->",
-       "nocreatetext": "Sigge neu aanläje es nor müjjelich, wann de [[Special:UserLogin|enjelogg]] bes. Der ohne kanns De ävver Sigge ändere, die ald do sin.",
+       "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",
        "sectioneditnotsupported-text": "Afschnedde Ändere is en heh dä Sigg nit zohjelohße.",
        "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:",
-       "moveddeleted-notice": "Heh di Sigg es fottjeschmeße. E Shtöck uß dä Logböösher fum Sigge-Fottschmieße un fum Sigge-Ömnänne för di Sigg kütt jetz, en dä Hoffnung, dat dat Der hellef.",
+       "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.",
        "edit-gone-missing": "Kunnt di Sigg nit änndere. Se schingk verschwunde un weed fottjeschemeße woode sin.",
        "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\" >$2</code> för en Dattei met $1 dren ze verwooschte: $3.",
        "invalid-content-data": "Di Daate en dä Sigg sen onjöltesch.",
        "content-not-allowed-here": "Ene Enhalld vun dä Zoot „$1“ es op dä Sigg „[[$2]]“ nit zohjelohße.",
-       "editwarning-warning": "Wann de vun hee dä Sigg fott jeihß, doh künnte all Ding Änderonge aan dä Sigg verschött jonn.\nDo kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann kriß de se nieh mieh wider. Jangk doför en dä Afschnett „{{int:prefs-editing}}“ en Dinge Enschtellonge.",
+       "editwarning-warning": "Wann de vun heh dä Sigg fott jeihß, doh künnte all Ding Änderonge aan dä Sigg verschött jonn.\nDo kanns heh di Warnong affschallde, wann de aanjemälldt un enjelogg bes, dann kriß de se nih mih wider. Jangk doför en dä Afschnett „{{int:prefs-editing}}“ en Dinge Enschtellonge.",
        "editpage-notsupportedcontentformat-title": "Dat Fommat vun enem Enhalld künne mer nit.",
        "editpage-notsupportedcontentformat-text": "Dat Fommat $1 vun enem Enhalld künne mer nit mem Modäll $2.",
        "content-model-wikitext": "Wikkitäx",
        "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": "'''Opjepaß:''' Die 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.",
+       "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.",
        "expensive-parserfunction-category": "Sigge met zovill Opwand en Paaser-Funkßjohne",
-       "post-expand-template-inclusion-warning": "<strong>Opjepaß:</strong> Heh in di Sigg wähde zo fill Bytes övver Schablohne erin jebraat. Nit all di Schablohne künne enjbonge wähde.",
+       "post-expand-template-inclusion-warning": "<strong>Opjepaß:</strong> Heh in di Sigg wähde zo fill Bytes övver Schablohne erin jebraht. Nit all di Schablohne künne enjbonge wähde.",
        "post-expand-template-inclusion-category": "Sigge met zoh jruuße Schablohne dren enjebonge",
        "post-expand-template-argument-warning": "Opjepaß: Di Sigg heh hät winnischßdens eine Parrammehter en ennem Schablohne-Oprohf wat ze jruhß weed beim Enfölle. Esu en Parramehtere möße mer övverjonn.",
        "post-expand-template-argument-category": "Sigge met övverjange Parrammeetere fun Schablohne",
        "rev-deleted-user": "(Metmaacher_Nahme ußjebländt)",
        "rev-deleted-event": "(Eijnzelheijte vom Logbohch-Enndrahch fottjenomme)",
        "rev-deleted-user-contribs": "[Däm Metmaacher singe Name udder sing <i lang=\"en\">IP</i>-Addräß wood veschtoche, un heh di Änderong douch nit mieh en de Leß met de Beidrääsch op]",
-       "rev-deleted-text-permission": "Die Version fun dä Sigg es '''fottjeschmeße'''.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/delete|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:deletionlog}}}}] loore doht, künnt Ehr velleisch mieh do drövver lesse.",
+       "rev-deleted-text-permission": "Di Väsjohn fun dä Sigg es <strong>fottjeschmeße</strong>.\nWann Ehr em [{{FULLURL:{{#spezial:Log}}/delete|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:deletionlog}}}}] loore doht, künnt Ehr velleisch mih do drövver lässe.",
        "rev-suppressed-text-permission": "Di Väsjohn vun dä Sigg es <strong>verschtoche</strong> woode.\nEinzelheite fengk mer en däm [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Logbohch vum Sigge verschteische].",
        "rev-deleted-text-unhide": "{{int:rev-deleted-text-permission}} Als ene Wiki-Köbes kanns De [$1 se ävver doch bekike], wann De wells.",
-       "rev-suppressed-text-unhide": "Die Version fun dä Sigg es '''verschtoche'''.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:suppressionlog}}}}] loore doht, künnt Ehr velleisch mieh do drövver lesse.\nAls ene Wiki-Köbes kanns De [$1 se ävver doch bekike], wann De wells.",
+       "rev-suppressed-text-unhide": "Di Väsjohn fun dä Sigg es <strong>verschtoche</strong>.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:suppressionlog}}}}] loore doht, künnt Ehr velleisch mih do drövver lesse.\nAls ene Wikki_Köhbeß kanns De [$1 se ävver doch bekike], wann De wells.",
        "rev-deleted-text-view": "{{int:rev-deleted-text-permission}} Als ene Wiki-Köbes kanns De se ävver bekike.",
-       "rev-suppressed-text-view": "Die Version fun dä Sigg es '''verschtoche'''.\nAls ene Wiki-Köbes kanns De se ävver doch bekike, wann De wells.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:suppressionlog}}}}] loore doht, künnt Ehr velleisch mieh do drövver lesse.",
+       "rev-suppressed-text-view": "Di Väsjohn fun dä Sigg es <strong>verschtoche</strong>.\nAls ene Wikki_Köhbeß kanns De se ävver doch bekike, wann De wells.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:suppressionlog}}}}] loore doht, künnt Ehr velleisch mih doh drövver lesse.",
        "rev-deleted-no-diff": "De kanns de Ongerscheide nit beloore, ein vun de Versione es '''fottjeschmeße'''.\nMieh Einzelheite hät [{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:deletionlog}}}}].",
        "rev-suppressed-no-diff": "Do kanns der keine Ungerscheid zwesche dä Versione beloore, weil ein dofun '''fottjeschmeße''' es.",
        "rev-deleted-unhide-diff": "Ein vun de Versione es '''fottjeschmeße'''.\nMieh Einzelheite hät [{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:deletionlog}}}}].\nAls ene Wiki_Köbes kanns De [$1 de Ungerscheide ävver aankike] wann De wells.",
        "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.",
        "revdelete-confirm": "Bes esu joot un doon dat beschtääteje, un donn domet ongerschriive, dat De dat donn wells, dat De weiß, wat dobei eruß kütt, un dat De dat och noh de [[{{MediaWiki:Policy-url}}|Rääjelle]] deihß.",
-       "revdelete-suppress-text": "Dat sullt '''blooß''' jedonn wäde för:\n* onjesäzlesche Aanjaabe\n* unjenehmesch persöhnlesch Daate\n*: ''Aanschreffte, Tellefoon- un ander Nummere, <span lang=\"en\" xml:lang=\"en\">e-mail</span> Adräß, uew.''",
+       "revdelete-suppress-text": "Dat sullt <strong>blooß</strong> jedonn wäde för:\n* onjesäzlesche Aanjahbe\n* unjenehmesch persöhnlesch Daate\n*: Aanschreffte, Tellefoon- un ander Nummere, \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräße, un esu wigger.",
        "revdelete-legend": "Dä öffentlije Zojang enschränke",
        "revdelete-hide-text": "dä Täx vun dä Väsjohn",
        "revdelete-hide-image": "De Enhallt vun däm Beld versteiche",
        "revdelete-edit-reasonlist": "De Jrönde för et Fottschmieße beärbeide",
        "revdelete-offender": "Dä Väsion iere Schriever:",
        "suppressionlog": "Et Logbohch fum Verschteiche",
-       "suppressionlogtext": "Heh noh kütt et Logbohch fum Verschteiche, woh Versione fun Sigge, Zosammefassunge, Quelle, Metmaachername un Metmaacher-Sperre ze fenge sin, di fun de Oure vun de Öffentleschkeit, un och fun de Wiki-Köbesse verstoche woodte, udder widder zeröck op nommaal jebraat woodte.\nLoor en de [[Special:BlockList|{{int:ipblocklist}}]] öm ze sinn, wää un wat em Momang wie jesperrt es.",
+       "suppressionlogtext": "Heh noh kütt et Logbohch fum Verschteiche, woh Versione fun Sigge, Zosammefassunge, Quelle, Metmaachername un Metmaacher-Sperre ze fenge sin, di fun de Oure vun de Öffentleschkeit, un och fun de Wiki-Köbesse verstoche woodte, udder widder zeröck op nommahl jebraat woodte.\nLoor en de [[Special:BlockList|{{int:ipblocklist}}]] öm ze sinn, wää un wat em Momang wie jesperrt es.",
        "mergehistory": "Versione fun Sigge zosamme schmiiße",
        "mergehistory-header": "Met hee dä Sündersigge kanns Du de Versione fun en Urshprongssigg met de Versione fun en neuer Zielsigg zosamme läje. Donn drop aade, dat der Zosammehang fun dä Versione am Engk reschtesch es.",
        "mergehistory-box": "Versione fun zwei Sigge zosamme läje",
        "prefs-skin": "Et Ußsinn",
        "skin-preview": "Vör-Ansich",
        "datedefault": "Ejaal - kein Vörliebe",
-       "prefs-labs": "Neu Saache zom Ußprobeere, die künnte noch nit akeraat fluppe",
+       "prefs-labs": "Neu Saache zom Ußprobeere, di künnte noch nit akeraat fluppe",
        "prefs-user-pages": "Metmaachersigge",
        "prefs-personal": "De Ennschtällonge",
        "prefs-rc": "Neuste Änderonge",
-       "prefs-watchlist": "De Oppassliss",
+       "prefs-watchlist": "De Oppaßleß",
        "prefs-editwatchlist": "De Oppaßleß beärbeijde",
        "prefs-editwatchlist-label": "Endrähsch en Dinge Oppaßleß beärbeijde:",
        "prefs-editwatchlist-edit": "Siggeövverschreffte en Dinge Oppaßleß belohre un eruß schmiiße:",
        "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 Daare för en ming Oppassliss aanzezeije:",
+       "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-edits": "Aanzahl Änderunge för en ming verjrößerte Oppassliss aanzezeije:",
+       "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": "Oppassleß-Kennzeishe:",
+       "prefs-watchlist-token": "Oppaßleß_Kännzeijsche:",
        "prefs-misc": "Söns",
        "prefs-resetpass": "Dat Passwood ändere",
        "prefs-changeemail": "Donn en Adräß för de <i lang=\"en\">e-mail</i> ändere",
        "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": "Dä Metmaacher Su-wi-De-heiß schriiv em Wiki met.",
+       "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-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.",
        "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-info": "Jrundlare",
-       "prefs-i18n": "Shprooche-Enshtellunge",
+       "prefs-i18n": "Schprohche-Enschtällonge",
        "prefs-signature": "Ongerschreff",
        "prefs-dateformat": "Dem Dattum sing Fommaat",
        "prefs-timeoffset": "Enshtellunge för de Uhrzigge",
        "right-nominornewtalk": "Klein Mini-Änderunge aan anderlücks Klaafsigge brenge dänne nit „{{int:newmessageslink}}“",
        "right-apihighlimits": "Hütere Jrenze em API",
        "right-writeapi": "Darf de <tt>writeAPI</tt> bruche",
-       "right-delete": "Sigge fottschmieße, die nit besönders vill ahle Versione han",
+       "right-delete": "Sigge fottschmiiße, di nit besönders vill ahle Väsjohne han",
        "right-bigdelete": "Sigge fottschmiiße, och wann se ahle Versione ze baasch han",
        "right-deletelogentry": "Beschtemmpte Endrääsch em Logbooch fottschmiiße un zerök holle",
        "right-deleterevision": "Einzel Versione fun Sigge fottschmiiße un zeröck holle",
        "right-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-editcontentmodel": "et Modäll vum Ennhald vun Sigge verändere",
-       "right-editinterface": "Sigge met de Texte ändere, die et Wiki kallt",
+       "right-editinterface": "Sigge met de Täxte änndere, di et Wikki kallt",
        "right-editusercssjs": "Anderlücks CSS- un JS-Dateie ändere",
        "right-editusercss": "Anderlücks CSS-Dateie ändere",
        "right-edituserjs": "Anderlücks JS-Dateie ändere",
        "action-sendemail": "<i lang=\"en\">e-mails</i> ze verschecke",
        "action-editmywatchlist": "de eije Oppaßleß ze ändere",
        "action-viewmywatchlist": "de eije Oppaßleß ze belooere",
-       "action-viewmyprivateinfo": "de eije päsöönlesche Aanjaabe ze belooere",
-       "action-editmyprivateinfo": "Ding päsöönlesche Aanjaabe ze ändere",
+       "action-viewmyprivateinfo": "de eije päsöhnlesche Aanjahbe ze belooere",
+       "action-editmyprivateinfo": "Ding päsöhnlesche Aanjahbe ze ändere",
        "action-editcontentmodel": "et Modäll vum Ennhald vun Sigge ze verändere",
        "action-managechangetags": "Kännzeijsche en de Dahtebangk aanlähje udder fottschmiiße",
        "action-applychangetags": "Makehronge met de eije Änderonge zersamme ze verjävve",
        "uploadtext": "Met däm Formular unge kanns de Belder oder ander Daate huhlade.\nJangk op de [[Special:FileList|Less met de huhjelaade Datteie]], öm esu en Datteie ze beloore udder noh inne ze söhke. De Logbööscher vum [[Special:Log/upload|Huhlaade]] un vum [[Special:Log/delete|Sigge fottschmiiße]] künnte Der och hellefe.\n\nDo kanns dann Ding Werk en Sigge enbinge, met Lengks en dä Aate:\n* <code>'''<nowiki>[[</nowiki>{{ns:file}}:'''''Beldche'''''.jpg]]'''</code> — för di janze Dattei ze zeije, wi se eß,\n* <code>'''<nowiki>[[</nowiki>{{ns:file}}:'''''Beld'''''.svg | '''''200''''' px]]'''</code> — för e Mini-Beldsche met 200&nbsp;Pixelle Breedt ze zeije,\n* <code>'''<nowiki>[[</nowiki>{{ns:file}}:'''''Su süht dat us'''''.png | left | thumb | '''''ene Tex''''' ]]'''</code> — deiht e 200-Pixel-Mini-Beldsche en ene Kaßte aan der lenke (<i lang=\"en\">left</i>) Rand vun dä Sigg un „ene Tex“ onger däm Beldsche,\n* <code>'''<nowiki>[[</nowiki>{{ns:media}}:'''''Esu hürt sich dat aan'''''.ogg]]'''</code> — öm tiräk op en Dattei ze Lenke, ohne se aanzzeije.\nUsführlich met alle Müjjelichkeite fings de dat bei de Hölp.",
        "upload-permitted": "{{PLURAL:$2|Bloß dä Datteitüp <code>$1</code> es zohjelohße.|Nor heh di Dateitüpe sin zohjelohße: <code>$1</code>.|Keine Dateitüp es zohjelohße.}}",
        "upload-preferred": "De bevörzochte Zoot{{PLURAL:$2||e|}} Datei{{PLURAL:$2||je|}}: $1.",
-       "upload-prohibited": "Verbodde Zoot{{PLURAL:$2||e|} Dattei{{PLURAL:$2||je|}: $1.",
+       "upload-prohibited": "Verbodde Zoot{{PLURAL:$2||e|}} Dattei{{PLURAL:$2||je|}}: $1.",
        "uploadlogpage": "Logbohch met de huhjelade Dateije",
        "uploadlogpagetext": "Hee sin de Neuste huhjelade Dateie opjeliss un wä dat jedon hät.\n(En de [[Special:NewFiles|Jalleri met neu Dateie]] kriß De ene Övverbleck med Belldsche)",
        "filename": "Dä Nahme vun dä Dattei",
        "ignorewarning": "Warnong övverjonn, un de Datteij trotzdämm afschpeijschere.",
        "ignorewarnings": "Alle Warnonge övverjonn",
        "minlength1": "Datteinahme mösse winnischßtens eij Zeijsche lang sin.",
-       "illegalfilename": "Schad:\n<br />\nEn däm Name vun dä Datei sin Zeiche enthallde,\ndie mer en Titele vun Sigge nit bruche kann.\n<br />\nSök Der statt „$1“ jet anders us,\nun dann muss de dat Dinge noch ens huhlade.",
+       "illegalfilename": "Schahd:\n<br />\nEn däm Name vun dä Datei sin Zeijsche änthallde,\ndi mer en Titele vun Sigge nit bruche kann.\n<br />\nSöhk Der statt „$1“ jet anders us,\nun dann moß de dat Dinge noch ens huhlade.",
        "filename-toolong": "Name för Dateije künne nit mih wi 240 Bytes lang sind.",
        "badfilename": "De Dattei es en „$1“ ömjedäuf.",
        "filetype-mime-mismatch": "Dä Datei ier Ängk vum Name (<code lang=\"en\">.$1</code>) paß nit zo dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot (<code lang=\"en\">$2</code>)",
        "tmp-write-error": "Ene Fähler es opjetrodde bem Schrieve en de Zweschedattei.",
        "large-file": "Dateie sullte nit jröößer wääde, wi $1, ävver Ding Datei es $2 jroß.",
        "largefileserver": "De Dattei es ze jroß. Jrößer wie däm ẞööver sing Enstellung erlaub.",
-       "emptyfile": "Wat De hee jetz huhjelade häs, hät kein Daate dren jehatt. Künnt sin, dat De Dich verdon häs, un dä Name wo verkihrt jeschrevve. Luur ens ov De wirklich <strong>die</strong> Datei hee huhlade wells.",
+       "emptyfile": "Wat De heh jäz huhjelade häs, hät kein Dahte dren jehatt. Künnt sin, dat De Desch verdonn häs, un dä Nahme wo verkihrt jeschrevve. Luhr ens ov De verhafftesch di Dattei heh huhlade wells.",
        "windows-nonascii-filename": "Heh dat Wiki löht kein Datteiname met Sönderzeische zoh.",
        "fileexists": "Et jitt ald en Dattei met däm Nahme. Bes esu johd un lohr Der <strong>[[:$1]]</strong> aan, wann De nit secher bes, da De se ändere wells.\n[[$1|thumb]]",
        "filepageexists": "En Sigg övver di Datei met däm Tittel <strong>[[:$1]]</strong> es ald doh, ävver en Datei met däm Name ham_mer nit. Dinge Tex kütt nit automattesch op di Sigg övver di Dattei. Di Sigg moß De wann nüüdesch noch ens extra ändere.\n[[$1|thumb]]",
        "fileexists-shared-forbidden": "Et jitt ald en Datei met däm Name em jemeinsame Speicher:\n[[File:$1|thumb|center|$1]]\nJangk zeröck un lad Ding Datei unger enem andere Name huh,\nwann De se noch han wells.",
        "file-exists-duplicate": "Di Dattei hät dersellve Enhallt wi hee di {{PLURAL:$1|Datei|Dateie|}}:",
        "file-deleted-duplicate": "En Datei mem sellve Enhallt wi „[[:$1]]“ es ens fottjeschmeße woode. Donn dä Zosammehang em „{{int:dellogpage}}“ nokike, ih dat De se widder huhläds.",
-       "file-deleted-duplicate-notitle": "En Datei mem sellve Enhallt wi di heh es ens fottjeschmeße woode, un dä iehre Tettel es verschtoche. Donn en däm Zosammehang eine froore, dä fottjeschmeße un verstoche Datteije beloore kann, ih dat De se widder huhläds.",
+       "file-deleted-duplicate-notitle": "En Datei mem sellve Enhallt wi di heh es ens fottjeschmeße woode, un dä iehr Övverschreff es verschtoche. Donn en däm Zosammehang Eine frohre, dä fottjeschmeße un verstoche Datteije belohre kann, ih dat De se widder huhläds.",
        "uploadwarning": "Warnung beim Huhlade",
        "uploadwarning-text": "Donn onge dä Täx övver di Dattei ändere, un versöhg_et norr_ens.",
        "savefile": "Dattei avspeichere",
        "upload-description": "Övver di Dattei",
        "upload-options": "Ennschtällonge för et Laade",
        "watchthisupload": "Op di Dattei oppaßße",
-       "filewasdeleted": "Unger däm Name wood ald ens en Datei huhjelade. Die es enzwesche ävver widder fottjeschmesse woode. Luur leever eets ens en et $1 ih dat De se dann avspeichere deis.",
+       "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.",
        "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",
        "img-auth-accessdenied": "Keine Zohjang",
        "img-auth-nopathinfo": "De <code lang=\"en\">PATH_INFO</code> fäählt.\nDä Webßööver es nit doför ennjerescht, di Ennfommazjuhn wigger ze jävve.\nHä künnd_op <code lang=\"en\">CGI</code> opjebout sin, un dröm <code lang=\"en\">img_auth</code> nit ongshtöze künne. Loor em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization Handbooch] noh, wat domet es.",
        "img-auth-notindir": "Dä aanjefroochte Pat is nit em enjeschtallte Verzeischneß för et Huhlaade.",
-       "img-auth-badtitle": "Uß „$1“ lööt sesch keine jöltijje Tittel maache.",
+       "img-auth-badtitle": "Uß „$1“ löht sesch kein jöltijje Övverschreff maache.",
        "img-auth-nologinnWL": "Do bes nit ennjelogg, un „$1“ es nit op dä Leß met de zohjelohße Datteiname.",
        "img-auth-nofile": "En Dattei „$1“ jidd_et nit.",
        "img-auth-isdir": "Do wells op et Verzeishneß „$1“ zohjriife, ävver mer darref bloß op Datteie zohjriife.",
        "filehist": "De Väsjohne vun dä Dattei",
        "filehist-help": "Di domohlije Version kriß De jezeich övver dä Link op em Dattum.",
        "filehist-deleteall": "All Versione fottschmieße",
-       "filehist-deleteone": "Schmieß die Version fott",
-       "filehist-revert": "Zeröck nemme",
+       "filehist-deleteone": "Schmiiß di Väsjohn fott",
+       "filehist-revert": "Zeröck nämme",
        "filehist-current": "Von jetz",
        "filehist-datetime": "Väsjohn vom",
        "filehist-thumb": "Minni-Belldsche",
        "filehist-filesize": "Dateiömfang",
        "filehist-comment": "Aanmärkong",
        "imagelinks": "Jebruch",
-       "linkstoimage": "Heh {{PLURAL:$1|kütt di Sigg|kumme di $1 Sigge|sin keij Sigge}}, die op heh di Dattei linke {{PLURAL:$1|deiht|dun|dun}}:",
+       "linkstoimage": "Heh {{PLURAL:$1|kütt di Sigg|kumme di $1 Sigge|sin keij Sigge}}, di op heh di Dattei lengke {{PLURAL:$1|deiht|donn| donn}}:",
        "linkstoimage-more": "Mieh wie {{PLURAL:$1|ein Sigg link|$1 Sigge linke|kein Sigg link}} op di Datei.\nDe Liß hee dronger zeisch nur {{PLURAL:$1|der eetse Link|de eetste $1 Links|keine Link}} op di Datei.\nMer ävver han och en [[Special:WhatLinksHere/$2|Komplätte Leß]].",
        "nolinkstoimage": "Nix Lengk op heh di Dattei.",
        "morelinkstoimage": "Belohr Der [[Special:WhatLinksHere/$1|de Lengks]] op di Dattei.",
        "randomincategory-nopages": "et sinn er kein Sigge en dä Saachjropp [[:Category:$1|$1]] dren.",
        "randomincategory-category": "Saachjropp:",
        "randomincategory-legend": "En zohfälleje Sigg us dä Saachjropp",
+       "randomincategory-submit": "Lohß Jonn!",
        "randomredirect": "Zofällije Ömleitung",
        "randomredirect-nopages": "En däm Appachtemang „$1“ sin ja kein Ömleidonge dren.",
        "statistics": "Schtatistike",
        "double-redirect-fixed-move": "Di Sigg [[$1]] es ömjenannt un längk jäz autmattesch öm op di Sigg [[$2]].",
        "double-redirect-fixed-maintenance": "De dubbelte Ömleidong vun [[$1]] noh [[$2]] wood opjelühß.",
        "double-redirect-fixer": "(Opjaveleß)",
-       "brokenredirects": "Ömleitunge, die en et Leere jonn",
-       "brokenredirectstext": "Die Ömleitunge hee jonn op Sigge, die mer jaa nit han:",
+       "brokenredirects": "Ömleidonge, di en et Lehre jonn",
+       "brokenredirectstext": "Di Ömleidonge heh jonn op Sigge, di mer jaa nit han:",
        "brokenredirects-edit": "ändere",
        "brokenredirects-delete": "fottschmieße",
        "withoutinterwiki": "Sigge der ohne Lengks op annder Schprohche",
-       "withoutinterwiki-summary": "He sin Sigge jeliß, di nit op annder Shprooche jelingk sin.",
-       "withoutinterwiki-legend": "Aanfang fum Sigge-Tittel",
+       "withoutinterwiki-summary": "He sin Sigge jeleß, di nit op annder Schprohche jelengk sin.",
+       "withoutinterwiki-legend": "Aanfang fun dä Sigg ier Övverschreff",
        "withoutinterwiki-submit": "Zeije",
        "fewestrevisions": "Atikele met de winnischste Versione",
        "nbytes": "$1 Byte{{PLURAL:$1||s|}}",
        "nmembers": "met {{PLURAL:$1|ein Sigg|$1 Sigge}} dren",
        "nmemberschanged": "met&nbsp;$1&nbsp;→&nbsp;{{PLURAL:$2|eine Sigg|$2&nbsp;Sigge|keine Sigg}}",
        "nrevisions": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Keij Änderong}}",
-       "nviews": "{{PLURAL:$1|Eine Avrof|$1 Avrofe|Keine Avrof}}",
        "nimagelinks": "Weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch",
        "ntransclusions": "weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch",
        "specialpage-empty": "Heh en dä Leß es nix dren.",
        "uncategorizedimages": "Dateije, di en kein Saachjroppe dren sin",
        "uncategorizedtemplates": "Schablohne, di en kein Saachjroppe sen",
        "unusedcategories": "Saachjroppe met nix dren",
-       "unusedimages": "Dateie, die nit en Sigge dren stäche",
+       "unusedimages": "Dateije, di nit en Sigge dren steijsche",
        "wantedcategories": "Saachjroppe, di mer noch nit han, di noch jebruch wähde",
-       "wantedpages": "Sigge, die mer noch nit han, die noch jebruch wääde",
+       "wantedpages": "Sigge, di mer noch nit han, di noch jebruch wähde",
        "wantedpages-summary": "He sin Sigge opjeleß, di et noch nit jitt, wo ävver Lengks vun andere Sigge drop jon, di kein Ömleijdonge sin. En Leß met Sigge, di et nit jitt, met Ömleijdonge drop, fengk mer op dä Sigg [[{{#special:BrokenRedirects}}|kappodde Ömleijdonge]].",
-       "wantedpages-badtitle": "Ene onjöltijje Tittel för en Sigg: $1",
+       "wantedpages-badtitle": "Ene onjöltijje Övverschreff för en Sigg: $1",
        "wantedfiles": "Dateije, di onß noch fähle",
-       "wantedfiletext-cat": "Heh di Datteije sin nit doh. Se wääde ävver jebruch, wi wann se doh wööre.\nDatteije uß frembde Sammlonge künne heh opjeleß sin, och wann et se jitt.\nDi sin dann <del>dorschjeschtresche</del>. \nSigge, woh Datteije jebruch wääde sulle, die mer jaa nit han, fengk mer och en dä [[:$1]].",
+       "wantedfiletext-cat": "Heh di Datteije sin nit doh. Se wääde ävver jebruch, wi wann se doh wööre.\nDatteije uß frembde Sammlonge künne heh opjeleß sin, och wann et se jitt.\nDi sin dann <del>dorschjeschtresche</del>. \nSigge, woh Datteije jebruch wääde sulle, di mer jaa nit han, fengk mer och en dä [[:$1]].",
        "wantedfiletext-cat-noforeign": "Heh di Datteije sulle jebruch wääde, et jitt se ävver jaa nit.\nSigge, di Datteije oprohfe, di et nit jitt, fengk mer op dä Sigg [[:$1]] opjeleß.",
        "wantedfiletext-nocat": "Heh di Datteije sin nit doh. Se wääde ävver jebruch, wi wann se doh wööre.\nDatteije uß frembde Sammlonge künne heh opjeleß sin, och wann et se jitt.\nDi sin dann <del>dorschjeschtresche</del>.",
        "wantedfiletext-nocat-noforeign": "Heh di Datteije sulle jebruch wääde, et jitt se ävver jaa nit.",
        "mostimages": "Dateije met de mihste Lenks drop",
        "mostinterwikis": "Atikkele met de miehste Engerwikilengks",
        "mostrevisions": "Atikkele met de mihste Änderonge",
-       "prefixindex": "All Sigge, dänne ehr Name met enem bestemmte Wood oder Tex aanfängk",
+       "prefixindex": "Alle Sigge, dänne ehr Nahme med enem beschtemmpte Wood udder Täx aanfängk",
        "prefixindex-namespace": "All Sigge med enem beschtemmpte Aanfang (Appachtemang $1 )",
        "prefixindex-strip": "Donn der jemeinsamme Aanfang vun dä Tetelle en dä Leß fottlohße.",
        "shortpages": "Atikele zoteet vun koot noh lang",
        "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\">e-mail</i> aanjejovve hätt en singe Enstellunge, un die deit et och, dann kanns De met däm Fomular heh unge en einzel <i lang=\"en\">e-mail</i> aan {{GENDER:$1|inn|it|dä Metmaacher|heh di Metmaacherėn|et}} schecke.\n\nDing <i lang=\"en\">e-mail</i>-Adräß, di De en [[Special:Preferences|Ding eije Enstellunge]] aanjejovve häs,\ndi weed als em Afsender sing Adräß enjedrare.\nDomet kann, wä di <i lang=\"en\">e-mail</i> kritt, drop antwoote, un di Antwood jeiht tirek aan Desch.\nAlles klor?",
+       "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",
        "usermaildisabledtext": "Do kanns kein <i lang=\"en\">e-mail</i> aan ander Metmaacher heh en dämm Wiki schecke",
        "watchlist": "ming Oppaßleß",
        "mywatchlist": "Oppaßleß",
        "watchlistfor2": "För dä $1 $2",
-       "nowatchlist": "En Ding Oppassliss es nix dren.",
-       "watchlistanontext": "Do moß enlogge, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.",
+       "nowatchlist": "En Dinge Oppaßleß es nix dren.",
+       "watchlistanontext": "Do moß enlogge, domet de en Ding Oppaßleß erenluhre kanns, oder jät drahn änndere.",
        "watchnologin": "Nit enjelogg",
-       "addwatch": "En de Oppassliss don",
-       "addedwatchtext": "Die 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ß.",
+       "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-short": "De Sigg  „$1“ es en Ding Oppaßleß openumme.",
-       "removewatch": "Us de Oppassliss nämme",
-       "removedwatchtext": "Die Sigg „[[:$1]]“ es jetz us de [[Special:Watchlist|Oppassliss]] erusjenomme.",
+       "removewatch": "Us de Oppaßleß nämme",
+       "removedwatchtext": "Di Sigg „[[:$1]]“ es jäz us de [[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",
        "notvisiblerev": "Di Version es fottjeschmesse",
        "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 die Sigge <strong>extra markeet</strong>.",
+       "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>.",
        "wlnote": "{{PLURAL:$1|Hee es de läzde Änderong uß|Hee sin de läzde <strong>$1</strong> Änderonge uß|Mer han kein Änderonge en}} de läzde {{PLURAL:$2|Stund|<strong>$2</strong> Stunde|<strong>noll</strong> Stunde}} zigg em $3 öm $4 Uhr.",
        "wlshowlast": "Zeisch de läzde $1 Schtunde, $2 Dähsch aan.",
        "watchlist-options": "Eijeschaffte fun de Oppassless",
        "enotif_body_intro_moved": "{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE ömjenannt. Op $3 fengks De der aktoälle Schtand vun dä Sigg.",
        "enotif_body_intro_restored": "{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE zerökjehollt. Op $3 fengks De der aktoälle Schtand vun dä Sigg.",
        "enotif_body_intro_changed": "{{GENDER:$2|Dä Metmaacher|Et|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} $2 hät di Sigg $1 {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}} aam $PAGEEDITDATE verändert. Op $3 fengks De der aktoälle Schtand vun dä Sigg.",
-       "enotif_lastvisited": "Luur unger „$1“ - do fings de all die Änderunge zick Dingem letzte Besoch hee.",
+       "enotif_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“ aansprä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 die Merker för e-mail för die Sigge en Dinger\nOppaßleß op eimol ä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 luure:\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 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",
        "created": "neu aanjelaht",
        "changed": "jeändert",
-       "deletepage": "Schmieß die Sigg jetz fott",
-       "confirm": "Dä Schotz för die Sigg ändere",
+       "deletepage": "Schmiiß di Sigg jäz fott",
+       "confirm": "Dä Schoz för di Sigg änndere",
        "excontent": "drop stundt: „$1“",
        "excontentauthor": "drop stundt: „$1“ un dä einzije Schriever woh: „$2“",
        "exbeforeblank": "drop stundt vörher: „$1“",
        "delete-confirm": "„$1“ fottschmieße",
        "delete-legend": "Fottschmieße",
-       "historywarning": "<strong>Opjepass:</strong> Die Sigg, di De fott schmiiße wells, hät {{PLURAL:$1|ein ällder Väsjohn|ald $1 ällder Väsjohne|jaa kein ällder Väsjohne}}.",
+       "historywarning": "<strong>Opjepass:</strong> Di Sigg, di De fott schmiiße wells, hät {{PLURAL:$1|ein ällder Väsjohn|ald $1 ällder Väsjohne|jaa kein ällder Väsjohne}}.",
        "confirmdeletetext": "Do bes koot dovör, en Sigg för iiwich fottzeschmiiße. Dobei verschwind och de janze Verjangeheit vun dä Sigg us de Dahtebangk, met all ehr Änderonge un Metmaacher Nahme, un all dä Opwand, dä do dren stich. Do moß heh jäz beschtähteje, dat de verschteihs, wat dat bedügg, un dat De weiß, wat Do do mähs.\n<strong>Dun et blohß, wann dat met de [[{{MediaWiki:Policy-url}}|Rääjelle]] verhaftech zosamme jeiht!</strong>",
        "actioncomplete": "Jedonn!",
        "actionfailed": "Dat es donevve jejange",
        "deletedtext": "De Sigg „$1“ es jäz fottjeschmeße woode. Luhr Der „$2“ aan, doh häs De en Leß met de neuste fottjeschmeße Sigge.",
        "dellogpage": "Logbohch met de fottjeschmeße Sigge",
-       "dellogpagetext": "Hee sin de Sigge oppjeliss, die et neus fottjeschmesse woodte.",
+       "dellogpagetext": "Heh sin de Sigge oppjeleß, di köözlesch fottjeschmeße woodte.",
        "deletionlog": "Dat Logbohch fum Sigge_Fottschmiiße",
        "reverted": "Han de ählere Version vun dä Sigg zoröck jehollt",
        "deletecomment": "Aanlaß odder Jrund:",
        "deletereason-dropdown": "* Alljemein Jrönde för et Fottschmiiße\n** SPAM\n** et wohd jät kapott jemaat\n** wohr jäje et Urhävverrääsch\n** dä Schriever wolld et esu\n** kappodde Ömleidong",
        "delete-edit-reasonlist": "De Jrönde för et Fottschmieße beärbeide",
        "delete-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jaa kein Version}}. Dat sinn_er ärsch fill. Domet unsere ẞööver do nit draan en de Kneen jeit, dom_mer esu en Sigg nit fottschmieße.",
-       "delete-warning-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jakein Version}}. Dat sinn_er ärsch fill. Wann De die all fottschmieße wells, dat kann dem Wiki sing Datenbangk schwer ußbremse.",
+       "delete-warning-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jakein Version}}. Dat sinn_er ärsch fill. Wann De di all fottschmiiße wells, dat kann dem Wikki sing Dahtebangk schwer ußbremse.",
        "deleteprotected": "Di Sigg es jeschöz, un dröm kam_mer se nit fott schmiiße.",
        "deleting-backlinks-warning": "<strong>Opjepaß:</strong> Es jitt Sigge met Lengks noh heh, udder Sigge, di heh di Sigg enbenge!",
        "rollback": "Em Läzde sing Änderonge zeröcknämme",
        "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",
        "protectlogtext": "Heh kütt et Logbooch met de Veränderonge aam Schotz vun Sigge.\nEn Leß met de [[Special:ProtectedPages|em Momang jeschözde Sigge]] ham_mer och.",
        "protectedarticle": "hät de Sigg „[[$1]]“ jeschötz",
-       "modifiedarticleprotection": "hät dä Schoz för die Sigg „[[$1]]“ jeändert",
+       "modifiedarticleprotection": "hät dä Schoz för di Sigg „[[$1]]“ jeändert",
        "unprotectedarticle": "hät der Schotz för di Sigg „[[$1]]“ opjehovve udder verändert.",
        "movedarticleprotection": "hät de Ennschtällong för der Sigge-Schotz fun „[[$2]]“ noh „[[$1]]“ övvernomme",
        "protect-title": "Sigge Schotz för „$1“ ändere",
        "protect-legend": "Sigg schötze",
        "protectcomment": "Aanlaß odder Jrund:",
        "protectexpiry": "Duur, wi lang:",
-       "protect_expiry_invalid": "Die Duur för ze Schötz es Kappes, di künne mer nit verstonn.",
-       "protect_expiry_old": "Do häs De Desch verdonn. Die Zick för ze Schötze es doch ald eröm!",
+       "protect_expiry_invalid": "De Duur för ze Schötz es Kappes, di künne mer nit verstonn.",
+       "protect_expiry_old": "Do häs De Desch verdonn. Di Zick för ze Schötze es doch ald eröm!",
        "protect-unchain-permissions": "Donn de andere Ußwahle freij schallde",
        "protect-text": "Heh kanns De dä Schotz jäje Veränderunge för de Sigg „'''$1'''“ aanluure un ändere.",
        "protect-locked-blocked": "Do kanns nit der Siggeschotz ändere, esu lang wi Dinge Zojang zom Wiki jesperrt es. Hee es der aktuelle Stand fum Siggeschotz för di Sigg '''„$1“:'''",
        "protect-locked-dblock": "De Datebank es jesperrt. Dröm künne mer der Siggeschotz nit ändere.\nHee es der aktuelle Stand fum Siggeschotz för di Sigg '''„$1“:'''",
        "protect-locked-access": "Do häs nit dat Rääsch, heh em Wiki Sigge ze schötze udder dä Schotz widder opzehevve.\nDi Sigg '''„$1“:''' es jetz jrad:",
-       "protect-cascadeon": "Die Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|einSigg|$1 Sigge|kein Sigg}}, die per Kaskade-Schotz jeschötz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schotz för die Sigg heh ändere, ävver di Kaskad blief bestonn.",
+       "protect-cascadeon": "Di Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|einSigg|$1 Sigge|kein Sigg}}, di per Kaskahde_Schoz jeschöz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schoz för di Sigg heh ändere, ävver di Kaskahd blief bestonn.",
        "protect-default": "Jeede Metmaacher eraan lohße",
        "protect-fallback": "Do weet dat Rääsch „$1“ jebruch.",
        "protect-level-autoconfirmed": "Bloß de automattesch beschtääteschte Metmaacher dranlooße",
        "protect-expiring": "bes öm $3 Uhr (UTC) aam $2",
        "protect-expiring-local": "löüf uß: $1",
        "protect-expiry-indefinite": "för iewich",
-       "protect-cascade": "Maach en Schoz_Kaskahd — all de Schablohne en dä Sigg krijje dersällve Schoz, wi die Sigg sällver en kritt.",
+       "protect-cascade": "Maach en Schoz_Kaskahd — all de Schablohne en dä Sigg krijje dersällve Schoz, wi di Sigg sällver en kritt.",
        "protect-cantedit": "Do kanns dä Siggeschotz heh nit ändere, esu lang wie De di Sigg nit ändere darfs.",
        "protect-othertime": "En ander Door:",
        "protect-othertime-op": "en ander Door",
        "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.",
        "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 „<b style=\"padding:2px; background-color:#ddd; color:black\">{{int:Undeletebtn}}</b>“.<br />\nÖm bloß einzel Versione zeröckzeholle, maach Hökche aan die Versione, die De widder han wells, un dann dun „<b style=\"padding:2px; background-color:#ddd; color:black\">{{int:Undeletebtn}}</b>“ klicke.<br />\nOp „<b style=\"padding:2px; background-color:#ddd; color:black\">{{int:Undeletereset}}</b>“\nklicks De, wann De all Ding Hökche un Ding „{{int:Undeletecomment}}“ widder fott han wells.",
+       "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 die Sigg widder zeröckhölls,\ndann kriss De all de fottjeschmesse Versione widder.\nWann enzwesche en neu Sigg unger däm ahle Name enjerich woode es,\ndann wääde de zeröckjehollte Versione einfach als zosätzlije äldere\nVersione för die neu Sigg enjerich. Die neu Sigg weed nit ersetz.",
+       "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.",
        "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": "Die Sigg es fottjeschmesse 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)",
-       "undelete-revision": "Fottjeschmeße Version fun dä Sigg „$1“ fum $4 öm $5 Uhr, et letz jändert fum $3:",
+       "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)",
+       "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.",
        "undelete-nodiff": "Mer han kei ällder Version jefonge.",
        "undeletebtn": "Zeröckholle!",
        "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-filename-mismatch": "Dä Dattei ier Version fun dä Zick $1 kunnte mer nit zeröck holle: Di Datteiname paßße nit zersamme.",
-       "undelete-bad-store-key": "Dä Dattei ier Version fun dä Zick $1 kunnte mer nit zeröck holle: Di Datei wohr ald beim Fottschmieße ja nimmieh do.",
-       "undelete-cleanup-error": "Fähler beim Fottschmieße vun de Archiv-Version „$1“, die nit jebruch wood.",
+       "undelete-bad-store-key": "Dä Dattei ier Väsjohn fun dä Zigg $1 kunnte mer nit zerök holle: Di Dattei wohr ald beim Fottschmihße ja nimmih do.",
+       "undelete-cleanup-error": "Fähler beim Fottschmieße vun de Archiv-Version „$1“, di nit jebruch wohd.",
        "undelete-missing-filearchive": "De Datei met dä Archiv-Nommer $1 künne mer nit zerök holle. Di ham_mer nit in de Datebangk. Künnt sinn, di es ald zeröckjehollt.",
        "undelete-error": "Ene Fähler es opjetrodde beim Zerökholle",
        "undelete-error-short": "Fähler beim Zerökholle fun dä Dattei $1",
        "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äch",
-       "contributions-title": "Beidräsch fum  $1",
+       "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",
        "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, die do passe däte.",
+       "nocontribs": "Mer han kein Änderunge jefonge, en de Logböcher, di do paße dähte.",
        "uctop": "(Neuste)",
        "month": "un Moohnt:",
        "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äsch",
+       "sp-contributions-newbies-title": "Neu Metmaacher ier Beidrähsch",
        "sp-contributions-blocklog": "Logbohch met de Metmaacher ier Schpärre",
        "sp-contributions-suppresslog": "verschtoche Beidrääch",
        "sp-contributions-deleted": "Fottjeschmesse Beidrääsch",
        "whatlinkshere": "Wat noh heh link",
        "whatlinkshere-title": "Sigge, woh Lengks op „$1“ dren sen",
        "whatlinkshere-page": "Sigg:",
-       "linkshere": "Dat sin de Sigge, die op <strong>„[[:$1]]“</strong> linke dun:",
+       "linkshere": "Dat sin de Sigge, di op <strong>„[[:$1]]“</strong> lengke donn:",
        "nolinkshere": "Kein Sigg link noh <strong>„[[:$1]]“</strong>.",
        "nolinkshere-ns": "Nix link op <strong>„[[:$1]]“</strong> en dämm Appachtemang.",
        "isredirect": "Ömleidongssigg",
        "unblock": "Don en Sperr för ene Metmaacher udder en <i lang=\"en\">IP</i>-Addräß ophävve",
        "blockip": "{{GENDER:$1|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} schpärre",
        "blockip-legend": "Metmaacher Schpärre",
-       "blockiptext": "Hee kanns De bestemmte Metmaacher oder IP-Adresse sperre, su dat se hee em Wiki nit mieh schrieve und Sigge ändere künne.\nDat sollt nor jedon wääde om sujenannte Vandaale ze bremse. Un mer müsse uns dobei natörlich aan uns [[{{MediaWiki:Policy-url}}|Rejelle]] för esu en Fäll halde.\nDrag bei „Aanlass“ ene möchlichs jenaue Jrund en, wöröm dat Sperre passeet. Nenn un Link op de Sigge wo Einer kapott jemaat hät, zem Beispill.",
+       "blockiptext": "Heh kanns De beschtemmpte Metmaacher udder <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß schpärre, su dat se heh em Wikki nit mih schrihve un Sigge änndere künne.\nDat sollt nor jedon wääde om sujenannte Vandahle ze brämse. Un mer möße ons dobei natörlich aan uns [[{{MediaWiki:Policy-url}}|Rejelle]] för esu en Fäll halde.\nDrahch bei „Aanlass“ ene müjjeleschs jenaue Jronnd enn, woröm dat Schpärre passehrt. Nänn se un Lengk op de Sigge wo Einer kapott jemaat hät, zem Beispill.",
        "ipaddressorusername": "<i lang=\"en\">IP</i>-Adress oder Metmaacher Name:",
        "ipbexpiry": "Duur, för wie lang",
        "ipbreason": "Aanlass:",
        "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",
-       "ipbenableautoblock": "Dun automatisch de letzte IP-Adress sperre, die dä Metmaacher jehatt hät, un och all die IP-Adresse, vun wo dä versök, jet ze ändere.",
+       "ipbenableautoblock": "Donn automattesch de läzede <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß, vun wo dä versöhk, jät ze änndere.",
        "ipbsubmit": "Dun dä Metmaacher schpärre",
        "ipbother": "För en ander Duur:",
        "ipboptions": "2 Stund:2 hours,1 Dach:1 day,3 Däch:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Mond:1 month,3 Mond:3 months,6 Mond:6 months,1 Johr:1 year,Unbejrenz:infinite",
        "ipb-edit-dropdown": "De Jründ för et Sperre beärrbejde",
        "ipb-unblock-addr": "„$1“ widder zohlohße",
        "ipb-unblock": "En IP-Addräß ov ene Metmaacher widder zohlohße",
-       "ipb-blocklist": "All de Sperre för Metmaacher un IP-Adresse aanzeije, die jrad bestonn",
+       "ipb-blocklist": "All de Sperre för Metmaacher un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräße aanzeije, di jrad beschtonn",
        "ipb-blocklist-contribs": "{{GENDER:$1|Däm|Däm|Däm Metmaacher|Dä|Däm}} $1 {{GENDER:$1|sing|singe|sing|iere|sing}} Bäjdrähsch",
        "unblockip": "Dä Medmacher widder maache looße",
        "unblockiptext": "Heh kanns De vörher jesperrte IP_Adresse oder Metmaacher widder freijevve, un dänne esu dat Rääch för ze Schrieve heh em Wiki widder jevve.",
        "blocklink": "schpärre",
        "unblocklink": "widder freijevve",
        "change-blocklink": "Sperr ändere",
-       "contribslink": "Beidräch",
+       "contribslink": "Beidrä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",
        "ipb-otherblocks-header": "Ander {{PLURAL:$1|Sperr|Sperre|-nix-}}",
        "unblock-hideuser": "Däm Metmaacher sing Schpärr kam_mer nit ophävve, sulang dä Name verschtoche es.",
        "ipb_cant_unblock": "<strong>Ene Fähler:</strong> En Sperr met dä Nummer $1 es nit ze finge. Se künnt ald widder freijejovve woode sin.",
-       "ipb_blocked_as_range": "Dat jeit nit. De IP-Adress „$1“ es nit tirek jesperrt. Se es ävver en däm jesperrte Bereich „$2“ dren. Die Sperr kam_mer ophevve. Donoh kam_mer och kleiner Aandeile fun däm Bereich widder neu sperre. Di Adress alleins kam_mer ävver nit freijevve.",
+       "ipb_blocked_as_range": "Dat jeit nit. De <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß „$1“ es nit tirek jeschpächt. Se es ävver en däm jeschpächte Berätt „$2“ dren. Di Schpär kam_mer ophävve. Donoh kam_mer och kleiner Aandeijle fun däm Berätt widder neu schpärre. Di Adräß alleins kam_mer ävver nit freijävve.",
        "ip_range_invalid": "Dä Bereich vun IP_Adresse es nit en Oodnung.",
        "ip_range_toolarge": "Berette övver /$1 ze sperre is nit zohjelohße, bloß kleiner.",
        "proxyblocker": "Open_Proxy_Blocker",
        "move-page": "De Sigg „$1“ ömnenne",
        "move-page-legend": "Sigg Ömnenne",
        "movepagetext": "Heh kanns De en Sigg ömnenne.\nDomet kritt di Sigg ene neue Name, un all vörherije Versione vun dä Sigg och.\nUnger däm ahle Tittel weed automatisch en Ömleidong op dä neue Tittel enjedrare.\n\nDo kannß dat Höksche säze domet Ömleidonge automattesch aanjepaß wääde, di op dä ahle Tittel zeije — dat weet ävver nur allmählesch pö a pö hengerher jemaat.\nLinks op dä ahle Tittel blieve ävver wi se wore, wann De dat Höksche nit säz.\nDat heiß, dann moß De selver nohluure, of do jäz [[Special:DoubleRedirects|dubbelde Ömleidonge]] udder [[Special:BrokenRedirects|kapodde Ömleiduoge]] bei eruskumme.\nWann De en Sigg ömnenne deis, häs Do och doför ze sorje, dat de betroffene Links do henjonn, wo se hen jonn solle.\nAlsu holl Der de Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorsch!\n\nDe Sigg weed '''nit''' ömjenannt, wann et met däm neue Name ald en Sigg jitt, '''ußer''' et es en Ömleidong un se es noch nie jeändert woode.\nEsu kam_mer en Sigg jlich widder zeröck ömbenänne, wam_mer sich bem Ömbenänne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop schteiht.\n\n'''Oppjepass!'''\nWat beim Ömnenne erus kütt, künnt en opfällije un villeisch stüürende Änderong aam Wiki sin, besönders bei öff jebruchte Sigge.\nAlsu bes secher, dat De verschteihs, wat De heh am maache bes, ih dat De et mähs!",
-       "movepagetext-noredirectfixer": "Heh kanns De en Sigg ömnenne.\nDomet kritt die Sigg ene neue Name, un all vörherije Versione vun dä Sigg och.\nOnger däm ahle Tittel weed automatisch en Ömleidong op dä neue Tittel enjedrare.\n\nLenks op dä ahle Tittel bliive ävver, wie se wohre.\nDat heiß, Do moß selver nohloore, ov doh jetz [[Special:DoubleRedirects|dubbelde]] oder [[Special:BrokenRedirects|kapodde Ömleidonge]] bei eruskumme.\nWann De en Sigg ömnenne deiß, häs Do och doför ze sorje, dat de betroffe Links doh henjonn, wo se hen jonn solle.\nAlsu holl Der di Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorsch!\n\nDi Sigg weed '''nit''' ömjenannt, wann et met däm neue Tittel ald en Sigg jitt, '''ußer''' doh es nix drop, oder et es en Ömleijdong un se es noch nie jeändert woode.\nEsu kam_mer en Sigg jlich widder retuur ömnänne, wam_mer sich mem Ömnänne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop schteiht.\n\n'''Oppjepaß!'''\nWat beim Ömnänne erus kütt, künnt en opfällije un velleijsch stührende Änderong aam Wikki sin, besönders bei öff jebruchte Sigge.\nAlsu bes secher, dat De verschteihs, wat De heh am maache bes, ih dat De et mähs!",
+       "movepagetext-noredirectfixer": "Heh kanns De en Sigg ömnenne.\nDomet kritt di Sigg ene neue Nahme, un all vörherije Väsjohne vun dä Sigg och.\nOnger däm ahle Tittel weed automattesch en Ömleidong op dä neue Tittel enjedrare.\n\nLenks op dä ahle Tittel bliive ävver, wie se wohre.\nDat heiß, Do moß selver nohloore, ov doh jetz [[Special:DoubleRedirects|dubbelde]] oder [[Special:BrokenRedirects|kapodde Ömleidonge]] bei eruskumme.\nWann De en Sigg ömnenne deiß, häs Do och doför ze sorje, dat de betroffe Links doh henjonn, wo se hen jonn solle.\nAlsu holl Der di Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorsch!\n\nDi Sigg weed '''nit''' ömjenannt, wann et met däm neue Tittel ald en Sigg jitt, '''ußer''' doh es nix drop, oder et es en Ömleijdong un se es noch nie jeändert woode.\nEsu kam_mer en Sigg jlich widder retuur ömnänne, wam_mer sich mem Ömnänne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop schteiht.\n\n<strong>Oppjepaß!</strong>\nWat beim Ömnänne erus kütt, künnt en opfällije un velleijsch stührende Änderong aam Wikki sin, besönders bei öff jebruchte Sigge.\nAlsu bes secher, dat De verschteihs, wat De heh am maache bes, ih dat De et mähs!",
        "movepagetalktext": "Dä Sigg ehr Klaafsigg, wann se ein hät, weed automatisch met  ömjenannt, '''usser''' wann:\n* de Sigg en en ander Appachtemeng kütt,\n* en Klaafsigg met däm neue Name ald do es, un et steiht och jet drop,\n* De unge en däm Kääsje '''kei''' Hökche aan häs.\nEn dänne Fäll, muss De Der dä Enhald vun dä Klaafsigge selvs vörnemme, un eröm kopeere watte bruchs.",
        "movearticle": "Sigg zem Ömnenne:",
        "moveuserpage-warning": "'''Opjepaß:''' Do wells en Metmaachersigg ömnänne, domet weed ävver dä Metmaacher sellver ''nit'' met ömjenannt.",
        "movepage-moved-redirect": "En Ömleidong es aanjelaat woode.",
        "movepage-moved-noredirect": "Kein Ömleidong woodt aanjelaat.",
        "articleexists": "De Sigg met däm Name jitt et ald, oder dä Name ka'mer oder darf mer nit bruche.<br />Do muss Der ene andere Name ussöke.",
-       "cantmove-titleprotected": "Die Sigg ömzenänne es esu nit möjjelesch, dänn dä neu Name vun dä Sigg es jäje et Neu-Aanlääje jeschötz.",
+       "cantmove-titleprotected": "Di Sigg ömzenänne es esu nit möjjelesch, dänn dä neu Name vun dä Sigg es jäje et Neu-Aanlääje jeschötz.",
        "movetalk": "dä ehr Klaafsigg met ömnenne, wat et jeiht",
        "move-subpages": "Don de Ongersigge met_ömnënne, wann_er do sin.\n{{PLURAL:$1|Bloß ein Sigg weed|Beß $1 Sigge weede|Kei einzel Sigg weed}} ömjenannt.",
        "move-talk-subpages": "Don de Ongersigge vun de Klaafsigge met_ömnënne, wann_er do sin.\n{{PLURAL:$1|Bloß ein Sigg weed|Beß $1 Sigge weede|Kei einzel Sigg weed}} ömjenannt.",
        "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}}",
-       "movesubpagetext": "Die Sigge hät {{PLURAL:$1|ein Ungersigg|$1 Ungersigge|kei Ungersigge}}.",
-       "movenosubpage": "Die Sigg hät kei Ungersigge.",
+       "movesubpagetext": "Di Sigg hät {{PLURAL:$1|ein Ongersigg|$1 Ongersigge|kei Ongersigge}}.",
+       "movenosubpage": "Di Sigg hät kei Ongersigge.",
        "movereason": "Aanlass:",
        "revertmove": "Et Ömnänne zerök_nämme",
        "delete_and_move": "Fottschmieße un Ömnenne",
        "immobile-target-namespace": "Sigge künne nit en dat Appachtemang „$1“ erenn ömjenannt wääde",
        "immobile-target-namespace-iw": "Ene Ingerwikilink es nix, woh mer en Sigg hen ömnenne künnt!",
        "immobile-source-page": "Di Sigg kann nit ömjenannt wääde.",
-       "immobile-target-page": "Op dä Tittel kann kei Sigg ömjenannt wääde.",
+       "immobile-target-page": "Op de Övverschreff kann kein Sigg ömjenannt wääde.",
        "bad-target-model": "De Zielsigg moß uß en ander Zoot Daate beschtonn, un vun „$1“ noh „$2“ künne mer nit ömwandele.",
        "imagenocrossnamespace": "Dateije kam_mer nor in et Appachtemang „{{ns:file}}“ donn, noh woanders hen kam_mer se och nit ömnemme!",
        "nonfile-cannot-move-to-file": "Mer kann nix uußer Datteije esu ömnänne, dat et em Appachtemang „{{ns:file}}“ landt",
        "imagetypemismatch": "De neuje Dattei_Endong moß met däm Dattei_Tüp zesamme paße",
        "imageinvalidfilename": "Dä Zihl_Nahme för di Dattei es verkeht",
-       "fix-double-redirects": "Don noh em Ömnenne de Ömleidonge automattesch ändere, di noch op dä ahle Tittel zeije, also de neu entshtande dubbelte Ömleidonge oplöse.",
+       "fix-double-redirects": "Don noh em Ömnenne de Ömleidonge automattesch ändere, di noch op dä ahle Övverschreff zeije, also de neu entshtande dubbelte Ömleidonge oplöhse.",
        "move-leave-redirect": "Donn en Ömleidong doför ennreschte",
        "protectedpagemovewarning": "'''Opjepaß:''' Heh di Sigg es jespert su dat blooß de Wiki-Kööbeße se ömnänne künne.\nHeh kütt der neuste Enndrach em Logbooch doh drövver:",
        "semiprotectedpagemovewarning": "'''Opjepaß:''' Heh di Sigg es jespert su dat blooß aanjemeldte Metmaacher se ömnänne künne.\nHeh kütt der neuste Enndrach em Logbooch doh drövver:",
        "move-over-sharedrepo": "==Di Dattei jidd_et ald==\nEn Dattei [[:$1]] jidd_et ald en enem jemeinsame Beschtand. En annder Dattei op dä Name ömzenänne sorresch doför, dat mer aan di Dattei em jemeinsame Beschtand vun heh uß donoh nit mieh draan kütt.",
-       "file-exists-sharedrepo": "Dinge Name för die Dattei weed ald jebruch, un zwa en enem jemeinsame Bestand vun Dateije.\nDröm söhk ene andere Name uß.",
+       "file-exists-sharedrepo": "Dinge Nahme för di Dattei weed ald jebruch, un zwa en enem jemeinsame Beschtand vun Dateije.\nDröm söhk ene andere Nahme uß.",
        "export": "Sigge Exporteere",
        "exporttext": "Heh exportees De dä Tex un de Eijeschaffte vun ener Sigg, oder vun enem Knubbel Sigge, de aktuelle Version, met oder ohne ehr ählere Versione.\nDat Janze es enjepack en XML.\nDat kam_mer en en ander Wiki — wann et och met dä MediaWiki-Soffwär läuf — övver de Sigg „[[Special:Import|Import]]“ do widder empotehre.\n\nSchriev de Titele vun dä Sigge en dat Feld för Tex enzejevve, unge, eine Titel en jede Reih.\nDann dun onoch ussöke, ov De all de vörherije Versione vun dä Sigge han wells, oder nor de aktuelle met dä Informazjuhne vun de läzde Änderong.\n\nEn däm Fall künns De, för en einzelne Sigg, och ene tirekte Link bruche, zom Beispill „[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]“ för de Sigg „[[{{MediaWiki:Mainpage}}]]“ ze exporteere.",
        "exportall": "Alle Sigge Äxpotteere",
        "export-addcat": "Dobei donn",
        "export-addnstext": "Sigge dobei donn uß dämm Appachtemang:",
        "export-addns": "Dobei Donn!",
-       "export-download": "Als en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Dattei afspeichere",
+       "export-download": "Als en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Dattei affschpeischere",
        "export-templates": "De Schablohne met expochtehre, di de Sigge bruche",
        "export-pagelinks": "Donn de Sigge metnämme, wo vun heh Lengks drop jon, un vun do wigger, bes esu vill Schrette:",
        "allmessages": "Aanzeije-Baustein, Täxte, un Nohreeschte vum Wiki-System",
        "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",
-       "importunknownsource": "Die Zoot Quell för et Emporteere kenne mer nit",
+       "importunknownsource": "Di Zoot Quell för et Emporteere känne mer nit",
        "importcantopen": "Kunnt op de Dattei för dä Empoot nit zojrihfe",
        "importbadinterwiki": "Verkihrte Interwiki Link",
        "importsuccess": "Dat Emporteere hät jeflupp!",
        "import-error-unserialize": "De Väsjohn $2 vun dä Sigg „$1“ kunnt nit von serijäll ußjepack wääde. De Väsjohn sull Daate vun dä Zoot „$3“ änthallde un ußjepack „$4“ jävve.",
        "import-error-bad-location": "De Väsjohn $2 mem Enhalldsmodäll $3 künne mer nit als Sigg „$1“ heh em Wikki faßjehallde wähde, weil dat Modäll vum Enhallt för di Sigg nit ongerschtöz weed.",
        "import-options-wrong": "{{PLURAL:$2|En verkiehrte Aanjab|Verkiehrte Aanjabe|Kein verkiehrte Aanjabe}}: <nowiki>$1</nowiki>",
-       "import-rootpage-invalid": "Di aanjejovve Aanfangssigg hät keine jölteje Tittel.",
+       "import-rootpage-invalid": "Di aanjejovve Aanfangs_Sigg hät kein jölteje Övverschreff.",
        "import-rootpage-nosubpage": "Em Appachtemang „$1“ vun dä Aanfangssig sin kein Ongersigge zohjelohße.",
        "importlogpage": "Logbohch met emportehrte Sigge",
        "importlogpagetext": "Sigge met ehre Versione vun ander Wikis emporteere.",
        "javascripttest-pagetext-skins": "Sööke en Bovverfläsch udder et Ußsinn uß, öm di Prööfonge domet ze maache:",
        "javascripttest-qunit-intro": "Loor noh dä [$1 Dokemäntation övver et Prööfe] op mediawiki.org.",
        "tooltip-pt-userpage": "Don Ding eije Metmaachersigg aanzeije",
-       "tooltip-pt-anonuserpage": "Metmaachersigg för die IP-Adress, vun wo uß De jraad Ding Änderunge un Äjänzunge aam Wiki am maache bes",
+       "tooltip-pt-anonuserpage": "Metmaachersigg för di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß, vun wo uß De jraad Ding Ännderonge un Äjännzonge aam Wiki am maache bes",
        "tooltip-pt-mytalk": "Dun Ding eije Klaafsigg aanzeije",
        "tooltip-pt-anontalk": "Klaaf övver Änderunge, di vun dä IP-Adress uß jemaat wodte",
        "tooltip-pt-preferences": "De eije Ennschtällonge",
        "tooltip-pt-login": "Do moß Desch nit Enlogge, kannz_E ävver jähn maache!",
        "tooltip-pt-logout": "Ußlogge",
        "tooltip-pt-createaccount": "mer schlonn vör, dat De Desch aanmällde deihs un ennloggs, ävver müüdesch es et nit.",
-       "tooltip-ca-talk": "Dun die Sigg met däm Klaaf övver heh de Sigg aanzeije",
-       "tooltip-ca-edit": "De kanns die Sigg heh ändere — für em Avspeichere, donn eetß ens enen Bleck op de Vör-Aansich",
+       "tooltip-ca-talk": "Donn di Sigg met däm Klaaf övver heh de Sigg aanzeije",
+       "tooltip-ca-edit": "Donn di Sigg heh ändere",
        "tooltip-ca-addsection": "Donn heh enne neue Afschnett opmaache.",
-       "tooltip-ca-viewsource": "Die Sigg es jeschötz. Dä Wikitex kam'mer ävver beloore.",
+       "tooltip-ca-viewsource": "Di Sigg es jeschöz. Dä Wikkitäx kam_mer ävver belohre.",
        "tooltip-ca-history": "Ällder Versione vun dä Sigg",
-       "tooltip-ca-protect": "Dun die Sigg schötze",
+       "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": "Dun die Sigg fottschmieße",
+       "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-move": "Dun die Sigg ömbenenne",
+       "tooltip-ca-move": "Donn di Sigg ömbenänne",
        "tooltip-ca-watch": "Don di Sigg en Ding Oppaßleß opnämme",
-       "tooltip-ca-unwatch": "Schmieß die Sigg us Dinge eije Oppassliss erus",
+       "tooltip-ca-unwatch": "Schmihß di Sigg us Dinge eije Oppaßleß eruß",
        "tooltip-search": "{{ucfirst:{{GRAMMAR:en|{{SITENAME}}}}}} söke",
        "tooltip-search-go": "Jank noh dä Sigg med jenou dämm Name",
        "tooltip-search-fulltext": "Sök noh Sigge, wo dä Tex dren enthallde es",
        "tooltip-t-info": "Mih Aanjahbe övver heh di Sigg",
        "tooltip-t-upload": "Dateie huhlade",
        "tooltip-t-specialpages": "Leß met de {{int:nstab-special}}e",
-       "tooltip-t-print": "De Drock-Aansich för heh die Sigg",
-       "tooltip-t-permalink": "Ene iewich haltbare Lenk (Permalink) op jenou die Version vun heh dä Sigg, die de jrad süühß un am beloore bes",
+       "tooltip-t-print": "De Drock-Aansich för heh di Sigg",
+       "tooltip-t-permalink": "Ene iewich haltbare Lenk (Permalengk) op jenou di Väsjohn vun heh dä Sigg, di de jrad süühß un aam belohre bes.",
        "tooltip-ca-nstab-main": "Don dä Enhallt vun dä Sigg aanzeije",
-       "tooltip-ca-nstab-user": "Dun die Metmaachersig 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-project": "Dun die Projeksigg aanzeije",
+       "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-ca-nstab-template": "Dun die Schablohn aanzeije",
+       "tooltip-ca-nstab-template": "Donn di Schablohn aanzeije",
        "tooltip-ca-nstab-help": "Donn en Sigg met Hölp aanzeije",
        "tooltip-ca-nstab-category": "Dun de Saachjropp aanzeije",
        "tooltip-minoredit": "Deit Ding Änderonge als klein Mini-Änderonge markkehre.",
        "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-raw-submit": "Oppassliss neu fasshallde",
+       "tooltip-watchlistedit-raw-submit": "Oppaßleß neu fasshallde",
        "tooltip-recreate": "En fottjeschmesse Sigg widder zeröckholle",
        "tooltip-upload": "Mem Dattei-Huhlaade loßlääje",
-       "tooltip-rollback": "Nemmp alle Änderonge zeröck, di dä Läzde jemaat hät, dä aan dä heh Sigg övverhoup jet jedonn hät. Deiht nimmieh frohre, un mähd automattesch ene Endraach onger „{{int:Summary}}“ en et Logbohch eren.",
-       "tooltip-undo": "„{{UCfirst:{{int:editundo}}}}“ määt der förije Zostand\nfun dä Sigg op, zom Beärbeide un widder Afspeichere.\nEsu kam_mer noch en Aanmärkong en „{{int:summary}}“ maache.",
+       "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.",
        "tooltip-preferences-save": "Ennschtällonge faßhallde",
        "tooltip-summary": "Jif en koote Zesammefassung en",
        "interlanguage-link-title": "$1 ($2)",
        "anonymous": "Namelose {{PLURAL:$1|Metmaacher|Metmaacher|Metmaacher}} vun {{GRAMMAR:Dat|{{SITENAME}}}}",
        "siteuser": "{{SITENAME}}-Metmaacher $1",
        "anonuser": "dä nameloose Metmaacher $1 {{GRAMMAR:Genitive vum|{{SITENAME}}}}",
-       "lastmodifiedatby": "Die Sigg heh wood et letz am $1 öm $2 Uhr vum $3 jeändert.",
+       "lastmodifiedatby": "Di Sigg heh wohd et läz aam $1 öm $2 Uhr vum $3 jeändert.",
        "othercontribs": "Bout op et Werk vun $1 op.",
        "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äsch för heh di Sigg",
-       "nocredits": "För die Sigg ham_mer nix en de Leß.",
+       "creditspage": "Övver de Metmaacher un dänne ehr Beidrähsch för heh di Sigg",
+       "nocredits": "För di Sigg ham_mer nix en de Leß.",
        "spamprotectiontitle": "SPAM_Schotz",
-       "spamprotectiontext": "De Sigg, die de avspeichere wells, die weed vun unsem SPAM_Schotz nit durchjelooße. Dat kütt miehts vun enem Link op en fremde Sigg, di op de Schwazze Leß shteiht.",
+       "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.",
        "spamprotectionmatch": "Heh dä Tex hät dä SPAM_Schotz op der Plan jerofe: „<code>$1</code>“",
        "spambot_username": "SPAM fottschmieße",
        "spam_reverting": "De läzde Väsjohn ohne de Lengks op „$1“ widder zerröckjehollt.",
-       "spam_blanking": "All die Väsjohne hatte Lengks op „$1“, di sin jäz erus jemaht.",
+       "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!",
        "pageinfo-title": "Övver di Sigg: „$1“",
-       "pageinfo-not-current": "Esu en Aanjaabe künne mer övver ällder Versione vun Sigge nit maache.",
+       "pageinfo-not-current": "Esu en Aanjahbe künne mer övver ällder Väsjohne vun Sigge nit maache.",
        "pageinfo-header-basic": "Jrundlääje Aanjabe",
        "pageinfo-header-edits": "De Änderonge",
        "pageinfo-header-restrictions": "Siggeschoz",
        "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-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",
        "pageinfo-subpages-name": "Ongersigge vun heh dä Sigg",
        "pageinfo-subpages-value": "$1 (dovun {{PLURAL:$2|ein Ömleidong|$2 Ömleidonge|kein Ömleidong}} un {{PLURAL:$3|ein nomahle Sigg|$3 nomahle Sigge|kein nomahle Sigg}})",
        "pageinfo-transclusions": "En {{PLURAL:$1|ein Sigk|$1 Sigge|kein Sigk}} enjeföösch",
        "pageinfo-toolboxlink": "Övver heh di Sigg",
        "pageinfo-redirectsto": "Leidt öm op",
-       "pageinfo-redirectsto-info": "Aanjaabe övver di Sigg",
+       "pageinfo-redirectsto-info": "Aanjahbe övver di Sigg",
        "pageinfo-contentpage": "Zällt als en Sigg vom Enhalld vum Wiki",
        "pageinfo-contentpage-yes": "Joh",
        "pageinfo-protect-cascading": "Ene Siggeschoz weed vun heh verärf",
        "pageinfo-protect-cascading-yes": "Joh",
        "pageinfo-protect-cascading-from": "Ene Siggeschoz weed jeärf vun",
-       "pageinfo-category-info": "Aanjaabe övver Saachjroppe",
+       "pageinfo-category-info": "Aanjahbe övver Saachjroppe",
        "pageinfo-category-total": "Metjleeder ensjesammp",
        "pageinfo-category-pages": "De Aanzahl Sigge",
        "pageinfo-category-subcats": "De Aanzahl Ongerjroppe",
        "rcpatroldisabled": "Et Nohluure vun de letzte Änderunge es avjeschalt",
        "rcpatroldisabledtext": "Et Nohluure fun de letzte Änderunge es em Momang nit müjjelich.",
        "markedaspatrollederror": "Dat Kennzeiche „Nohjeluurt“ kunnt ich nit avspeichere.",
-       "markedaspatrollederrortext": "Do muss en bestemmte Version ussöke.",
+       "markedaspatrollederrortext": "Do moss en beschtemmpte Väsjohn ußsöhke.",
        "markedaspatrollederror-noautopatrol": "Do darrefs Ding eije Änderunge nit op „Nohjeloort“ setze!",
        "markedaspatrollednotify": "Di Änderong an $1 es jäz nohjekik.",
        "markedaspatrollederrornotify": "Dat di Sigg nohjekik es, kunnte mer nit faßhalde.",
        "file-info-png-repeat": "weed {{PLURAL:$1|eijmohl|$1 Mohl|keimohl}} affjespellt",
        "file-info-png-frames": "{{PLURAL:$1|ei einzel Beld|$1 einzel Belder|kei einzel Beld}}",
        "file-no-thumb-animation": "'''Opjepaß: Mer han täschnesche Jränze, dröm sind Minibeldscher vun dä Dattei ohne Bewääjong.'''",
-       "file-no-thumb-animation-gif": "'''Opjepaß: Mer han täschnesche Jränze, dröm sind Minibeldscher vun GIF-Datteije met enhuhe Oplöösung, wie die heh, ohne Bewääjong.'''",
+       "file-no-thumb-animation-gif": "<strong>Opjepaß: Mer han täschnesche Jränze, dröm sin Minibeldscher vun <i xml:lang=\"en\" lang=\"en\" dir=\"ltr\" title=\"Graphics Interchange Format\">GIF</i>-Datteije met en huhe Oplöhsung, wi di heh, ohne Bewähjong.</strong>",
        "newimages": "Neu Dateie als Jaleri",
        "imagelisttext": "Heh küdd en Leß vun <strong>$1</strong> Datei{{PLURAL:$1||je}}, zoteet $2.",
-       "newimages-summary": "Heh die Sigg zeig die zoletz huhjeladene Belder un Dateie aan.",
+       "newimages-summary": "Heh di Sigg zeijsch de zoläz huhjeladene Belder un Dateije aan.",
        "newimages-legend": "Ußwähle",
        "newimages-label": "Dä Dattei ier Name udder e Stöck dofun:",
        "newimages-showbots": "Zeisch, wat de Bots huhjelaade han.",
        "saturday-at": "Läzde Samsdaach öm $1 Uhr",
        "sunday-at": "Läzde Sundaach öm $1 Uhr",
        "yesterday-at": "Jästere öm $1 Uhr",
-       "bad_image_list": "<strong>Fomat:</strong>\nNur Reije met ennem * am Aanfang don jet.\nTirek noh däm * moß ene Link op en Datei sin, die mer nit han welle.\nDonoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm eß.",
+       "bad_image_list": "Dat Fommahd es:\n\nNur Reije met ennem * am Aanfang don jet.\nTirek noh däm * moß ene Lengk obb en Dattei sin, di mer nit han welle.\nDonoh kumme, en däsellve Reih, Lengks op Sigge woh di Datei trotz dämm jenehm eß.",
        "metadata": "Metadaate",
-       "metadata-help": "En dä Datei stich noh mieh an Daate dren. Dat sin Metadaate, die normal vum Opnahmejerät kumme. Wat en Kamera, ne Scanner, un esu, do fassjehallde han, dat kann ävver späder met enem Projramm bearbeidt un usjetuusch woode sin.",
+       "metadata-help": "En dä Datei stich noh mieh an Daate dren. Dat sin Metadaate, di normal vum Opnahmejerät kumme. Wat en Kamera, ne Scanner, un esu, do fassjehallde han, dat kann ävver späder met enem Projramm bearbeidt un usjetuusch woode sin.",
        "metadata-expand": "Mih zeije",
        "metadata-collapse": "Daate Versteche",
        "metadata-fields": "Felder us de EXIF Metadate, di heh opjeföhrt sen, zeich et Wiki op Beldersigge aan, wan de Metadate kleinjeklick sin. Di andere weede esu lang verstoche. Dat Versteiche is och der Standat.\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-ycbcrcoefficients": "YCbCr-Geweeschte",
        "exif-referenceblackwhite": "Schwazz-Wiiß-Bezochs-Punk-Paare",
        "exif-datetime": "Zickpunk fum Affshpeischere",
-       "exif-imagedescription": "Dem Beld singe Tittel",
+       "exif-imagedescription": "Dem Beld sing Övverschreff",
        "exif-make": "Dä Kammera ier Heershtäller",
        "exif-model": "Dat Kammerra-Modäll",
        "exif-software": "De enjesatz ẞoffwär",
        "exif-provinceorstatedest": "De jezeishte Provins, et jezeishte Bundesland, der jezeishte Bundesstaat, un esu wigger",
        "exif-citydest": "De jezeishte Shtadt",
        "exif-sublocationdest": "Et jezeishte Veedel, udder de jezeishte Shtrooß, udder esu",
-       "exif-objectname": "Der Tittel en koot",
+       "exif-objectname": "De Övverschreff en koot",
        "exif-specialinstructions": "Extra Aanweisonge",
        "exif-headline": "Övverschreff",
        "exif-credit": "Wigger jejovve vum",
        "exif-copyrighted": "Zohshtand vum Urhävver singe Rääschde",
        "exif-copyrightowner": "Besezer vum Urhävver singe Rääschde",
        "exif-usageterms": "Räjelle för et Benöze",
-       "exif-webstatement": "Aanjaabe em Internet övver em  Urhävver sing Rääschde",
+       "exif-webstatement": "Aanjahbe em Internet övver em Urhävver sing Rääschde",
        "exif-originaldocumentid": "En eijmohleje Kännong för et Ojinaal",
        "exif-licenseurl": "En <i lang=\"en\">URL</i> för de Lizänz",
        "exif-morepermissionsurl": "Övver zohsäzlejje Lizänze",
        "exif-photometricinterpretation-2": "RJB",
        "exif-photometricinterpretation-6": "<i lang=\"en\">YCbCr</i>",
        "exif-unknowndate": "Dattum onbikannt",
-       "exif-orientation-1": "Nommaal",
+       "exif-orientation-1": "Nommahl",
        "exif-orientation-2": "Op der Kopp jespeejelt",
        "exif-orientation-3": "Op der Kopp jedrieht",
        "exif-orientation-4": "Links-Räähß jespehjelt",
        "exif-exposuremode-2": "Beleeshtungsreih",
        "exif-whitebalance-0": "Automattesche Wiiß-Affjleich",
        "exif-whitebalance-1": "Wieß-Affjleisch fun Hand jemaat",
-       "exif-scenecapturetype-0": "Nomaal",
+       "exif-scenecapturetype-0": "Nommahl",
        "exif-scenecapturetype-1": "Queerfommaat",
        "exif-scenecapturetype-2": "Huhkant",
        "exif-scenecapturetype-3": "Et Naakß",
        "exif-gaincontrol-2": "Vill heller",
        "exif-gaincontrol-3": "E beßje dungkeler",
        "exif-gaincontrol-4": "Vill dungkeler",
-       "exif-contrast-0": "Nomal",
+       "exif-contrast-0": "Nommahl",
        "exif-contrast-1": "Weijsch",
        "exif-contrast-2": "Hatt",
-       "exif-saturation-0": "Nomal",
+       "exif-saturation-0": "Nommahl",
        "exif-saturation-1": "Winnisch Sättejung",
        "exif-saturation-2": "En hue Sättejung",
-       "exif-sharpness-0": "Nomal",
+       "exif-sharpness-0": "Nommahl",
        "exif-sharpness-1": "Nit esu scharf",
        "exif-sharpness-2": "Scharf",
        "exif-subjectdistancerange-0": "Onbikannt",
        "exif-iimcategory-spo": "Shpocht",
        "exif-iimcategory-war": "Kreesch, Zängk, Opshtänd",
        "exif-iimcategory-wea": "Wädder",
-       "exif-urgency-normal": "Nommaal ($1)",
+       "exif-urgency-normal": "Nommahl ($1)",
        "exif-urgency-low": "Klein ($1)",
        "exif-urgency-high": "Huh ($1)",
        "exif-urgency-other": "Selfs faßjelaat ($1)",
        "monthsall": "all",
        "confirmemail": "E-Mail Adress bestätije",
        "confirmemail_noemail": "En [[Special:Preferences|Ding Ennschtällonge]] es kein öhntlije Adräß för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>.",
-       "confirmemail_text": "Ih datte en däm Wiki heh de E-Mail bruche kanns, muss De Ding E-Mail Adress bestätich han, dat se en Oodnung es un dat se och Ding eijene es. Klick op dä Knopp un Do kriss en E-Mail jescheck. Do steiht ene Link met enem Code dren. Wann De met Dingem Brauser op dä Link jeihs, dann deis De domet bestätije, dat et wirklich Ding E-Mail Adress es. Dat es nit allzo secher, alsu wör nix för Die Bankkonto oder bei de Sparkass, ävver et sorg doför, dat nit jede Peijaß met Dinger E-Mail oder Dingem Metmaachername eröm maache kann.",
+       "confirmemail_text": "Ih dat De en däm Wikki heh de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> bruche kanns, muss De Ding <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß beschtähtesch han, dat se en Oodnung es un dat se och Ding eijene es. Klek op dä Knopp un Do kreß en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> jescheck. Do schteihd ene Lengk met enem Kohd dren. Wann De met Dingem Brauser op dä Lengk jeihs, dann deihß De domet beschtähteje, dat et wirklich Ding <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß es. Dat es nit allzo secher, alsu wör nix för Di Bankkonto udder bei de Schpaakaß, ävver et sorsch doför, dat nit jehde Peijaß met Dinger <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> oder Dingem Metmaachername eröm maache kann.",
        "confirmemail_pending": "Do häs ald ene Kood för de Bestätijung med ene E-Mail zojeschek bekumme. Wann De Ding Aanmeldung eez jraad jemaat häs, dann donn noch ene Moment waade, ih dat De Der ene neue Kood hölls.",
        "confirmemail_send": "Scheck en E-Mail zem Bestätije",
        "confirmemail_sent": "En E-Mail, för Ding E-Mail Adress ze bestätije, es ungerwähs.",
        "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 die E-Mail Adress 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 Adress aanjejovve hät, do bruchs de\njar nix ze don. De E-Mail Adress kann nit jebruch wääde, ih dat se nit\nbestätich es. Do kanns ävver och op he dä Link jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adress nit bestätije wells.",
-       "confirmemail_body_changed": "Künnt jod sin, Do wors et selver. Vun de IP_Adress $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 die neu Adress 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ä 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 Adress aanjejovve hät, bruchs\nDe jar nix ze don. Di Adress 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": "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_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_invalidated": "Et Bestätijje för die E-Mail-Adress es afjebroche woode, un die Adress is '''nit''' bestätich.",
+       "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]",
        "scarytranscludefailed": "[De Schablohn „$1“ enzebenge hät nit jeflupp]",
        "scarytranscludefailed-httpstatus": "[De Schablohn „$1“ enzebenge hät nit jeflupp. Dä HTTP-Fähler es: $2]",
        "scarytranscludetoolong": "[Schad, de URL es ze lang]",
        "deletedwhileediting": "<strong>Opjepaß:</strong> De Sigg wood fottjeschmeße, nohdäm Do ald aanjefange häs, draan ze Ändere.\nEm <span class=\"plainlinks\">[{{fullurl:Special:Log|type=delete&page=}}{{FULLPAGENAMEE}} Logbohch vum Sigge-Fottschmiiße]</span> künnt der Jrond schtonn.\nWann De de Sigg avschpeischere deis, weed se widder aanjelaat.",
-       "confirmrecreate": "Dä Metmaacher [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät die Sigg fottjeschmesse, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrund:\n: „<i>$2</i>“\nWells Do jetz met en neu Version die Sigg widder neu aanläje?",
+       "confirmrecreate": "Dä Metmaacher [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät di Sigg fottjeschmeße, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrond:\n: „<i>$2</i>“\nWells Do jetz met en neu Väsjohn di Sigg widder neu aanläje?",
        "confirmrecreate-noreason": "Dä [[User:$1|$1]] ([[User talk:$1|Klaaf]]) hät heh di Sigg fottjeschmeße, nohdämm Do aanjefange häs, draan ze ändere. Bes esu jood un donn beshtääteje, dat De di Sigg widder neu aanjelaat han wells.",
        "recreate": "Widder neu aanlääje",
        "unit-pixel": "px",
        "confirm_purge_button": "Jo — loss jonn!",
-       "confirm-purge-top": "Dä Zweschespeicher för die Sigg fottschmieße?",
+       "confirm-purge-top": "Dä Zweschespeijscher för di Sigg fottschmiiße?",
        "confirm-purge-bottom": "Dä Zweschespeicher för de Sigg fottzeschmieße sorresch doför, dat af dann de neuste Version vun dä Sigg (de Version vun jetz) aanjezeich weet.",
        "confirm-watch-button": "Lohß Jonn!",
        "confirm-watch-top": "Sulle mer di Sigg en Ding Oppaßleß opnämme?",
        "bitrate-yottabits": "$1&nbsp;Ybps",
        "lag-warn-normal": "Änderonge uß de läzde {{PLURAL:$1|Sekond|$1 Sekuode|knappe Sekond}} sin en dä Leß wall noch nit opjenomme.",
        "lag-warn-high": "Dä Datebankßööver hät jrad vill ze donn.\nÄnderonge uß de läzde {{PLURAL:$1|Sekond|$1 Sekonde|knappe Sekond}} sin dröm en dä Leß heh wall noch nit opjenomme.",
-       "watchlistedit-normal-title": "Oppassliss beärbeijde",
-       "watchlistedit-normal-legend": "Titell uß de Oppassliss eruß lohße",
+       "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-done": "{{PLURAL:$1|Eine Sigge-Tittel es|<strong>$1</strong> Sigge-Tittele sin|Keine Sigge-Tittel es}} us Dinge Opassliss erus jefloore:",
-       "watchlistedit-raw-title": "Rüh Oppassliss beärbeide",
-       "watchlistedit-raw-legend": "Rüh Oppassliss beärbeide",
-       "watchlistedit-raw-explain": "Dat sin de Endrähsch in Dinge Oppaßles en rüh.\nÖm einzel Titelle loßß ze wääde, 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 Oppassliss ävver och [[Special:EditWatchlist|övver e Fomulaa met Kässjer un Hökscher beärbeide]].",
+       "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-titles": "Endrähsch:",
-       "watchlistedit-raw-submit": "Oppassliss neu fasshallde",
-       "watchlistedit-raw-done": "Ding Oppassliss es fassjehallde.",
-       "watchlistedit-raw-added": "{{PLURAL:$1|Eine Sigge-Tittel wood|<strong>$1</strong> Sigge-Tittele woodte|Keine Sigge-Tittel}} dobeijedonn:",
+       "watchlistedit-raw-submit": "Oppaßleß neu faßhallde",
+       "watchlistedit-raw-done": "Ding Oppaßßleß es fassjehallde.",
+       "watchlistedit-raw-added": "{{PLURAL:$1|Ein Övverschreffför en Sigge wood|<strong>$1</strong> Övverschreffte för Sigge woodte|Kein Övverschreffte för Sigge}} dobeijedonn:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Eine Endrach es eruß jefloore:|<strong>$1</strong> Endräsh es eruß jefloore:|Keine Endrach es eruß jefloore.}}",
        "watchlistedit-clear-title": "Oppaßleß läddesch jemaad",
        "watchlistedit-clear-legend": "Oppaßleß läddesch maache",
        "timezone-utc": "<i lang=\"en\">UTC</i>",
        "duplicate-defaultsort": "'''Opjepaß:'''\nDä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlößel „$2“.",
        "duplicate-displaytitle": "<strong>opjepaß:</strong> Dä Nahme „$2“ övverschriev dä fröjere Nahme „$1“ för zem Aanzeije.",
-       "invalid-indicator-name": "<strong>Fähler:</strong> De Eijeschaff <code xml:lang=\"en\" lang=\"en\">name</code> vun däm Kännzeijsche för der Zohschtand för die Sigg darf nit läddesch sin.",
+       "invalid-indicator-name": "<strong>Fähler:</strong> De Eijeschaff <code xml:lang=\"en\" lang=\"en\">name</code> vun däm Kännzeijsche för der Zohschtand för di Sigg darf nit läddesch sin.",
        "version": "Väsjohn vun de Wiki Soffwär zeije",
        "version-extensions": "Installeete Erjänzunge un Zohsätz",
        "version-skins": "De enschtallehrte Bedeenbovverflääsche",
        "version-license-title": "‎Lėzänz för $1",
        "version-license-not-found": "Mer han kein Lezänzenfommazjuhne för heh dat Zohsazprojramm jefonge.",
        "version-credits-title": "Dank för dat Projramm „$1“",
-       "version-credits-not-found": "Schahd, mer han kein Aanjaabe drövver, wämm mer heh för ze danke hätte.",
+       "version-credits-not-found": "Schahd, mer han kein Aanjahbe drövver, wämm mer heh för ze danke hätte.",
        "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-libraries": "Enschtallehrte Projrammsammlonge",
        "version-libraries-library": "Projrammsammlong",
        "version-libraries-version": "Väsjohn",
+       "version-libraries-license": "Lėzänz",
+       "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",
        "redirect-summary": "Heh di {{int:specialpage}} leidt öm ob_en Dattei — doh mößd_Er ene Nahme aanjävve, för e Beischpell:[[{{#Special:Redirect}}/file/Example.jpg]] — udder en Sigg — doh mößd_Er en Kännong för, udder en Väsjuhn aanjävve, för e Beischpell esu: [[{{#Special:Redirect}}/page/64308]] udder [[{{#Special:Redirect}}/revision/328429]] — udder en Metmaachersigg — doh mößd_Er enem Metmaacher sing Kännong aanjävve, för e Beischpell: [[{{#Special:Redirect}}/user/101]].",
        "specialpages-group-pages": "Siggeliste",
        "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, die ömleide, söhke, un fenge",
+       "specialpages-group-redirects": "{{int:nstab-special}}e, di ömleide, söhke, un fenge",
        "specialpages-group-spam": "Werrekzüch jäje SPÄM",
        "specialpages-group-developer": "Werkzüch fö Entwecklere",
        "blankpage": "Vakat-Sigg",
        "tag-filter-submit": "Beschränke!",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ein|$1|Kein}} Kännzeijsche]]: $2)",
        "tags-title": "Makeeronge",
-       "tags-intro": "Heh sin alle de Makeerunge opjeliß, die et Wiki för Änderunge verjevve kann, un wat se bedügge.",
+       "tags-intro": "Heh sin alle de Makeerunge opjeliß, di et Wikki för Änderunge verjävve kann, un wat se bedügge.",
        "tags-tag": "Dä Makkehrong iere Nahme",
        "tags-display-header": "Kennzeische en de Leßte met Änderonge",
        "tags-description-header": "Bedüggtening",
        "tags-deactivate-submit": "Ußschallde",
        "tags-apply-no-permission": "Do häs nit et Rääsch, zersamme met Dinge Änderonge noch Makehronge ze verjävve.",
        "tags-apply-not-allowed-one": "De Makkehrong „$1“ kam_mer nit vun Hand verjävve.",
-       "tags-apply-not-allowed-multi": "Heh {{PLURAL:$2|de Makkehrong|di Makkehronge|die kein Makkehronge}} kam_mer nit vun Hand verjävve: $1",
+       "tags-apply-not-allowed-multi": "Heh {{PLURAL:$2|de Makkehrong|di Makkehronge|di kein Makkehronge}} kam_mer nit vun Hand verjävve: $1",
        "tags-update-no-permission": "Do häs nit et Rääsch, Makehronge vun einzel Väsjohne udder Enndrähsch en Logbohch fottzenämme udder zohzeföhje.",
        "tags-update-add-not-allowed-one": "De Makkehrong „$1“ kam_mer nit vun Hand verjävve.",
-       "tags-update-add-not-allowed-multi": "Heh {{PLURAL:$2|de Makkehrong|di Makkehronge|die kein Makkehronge}} kam_mer nit vun Hand verjävve: $1",
+       "tags-update-add-not-allowed-multi": "Heh {{PLURAL:$2|de Makkehrong|di Makkehronge|di kein Makkehronge}} kam_mer nit vun Hand verjävve: $1",
        "tags-update-remove-not-allowed-one": "De Makkehronge „$1“ kam_mer nit fott nämme.",
-       "tags-update-remove-not-allowed-multi": "Heh {{PLURAL:$2|de Makkehrong|di Makkehronge|die kein Makkehronge}} kam_mer nit vun Hand fott nämme: $1",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Heh de Makkehrong|Heh di Makkehronge|Kein Makkehronge}} kam_mer nit vun Hand fott nämme: $1",
        "tags-edit-title": "Makkehronge ändere",
        "tags-edit-manage-link": "Makkehronge verwallde",
        "tags-edit-revision-selected": "Ußjesöhk {{PLURAL:$1|Väsjohn|Väsjohne|Nix}} vun [[:$2]]:",
        "compare-rev1": "de ein Version",
        "compare-rev2": "de ander Väsjohn",
        "compare-submit": "Verjlieshe!",
-       "compare-invalid-title": "Dä aanjejovve Tettel es nit jöltesch",
+       "compare-invalid-title": "De aanjejovve Övverschreff es nit jöltesch",
        "compare-title-not-exists": "De aanjejovve Sigg jidd_et nit.",
        "compare-revision-not-exists": "Dä aanjejovve Version jidd_et jaa nit.",
-       "dberr-problems": "Deit uns leid, die Sigg heh häd för der Momang e teschnisch Problem.",
-       "dberr-again": "Versök eijfach en e paa Menutte, norr_ens die Sigg afzeroofe.",
+       "dberr-problems": "Deijt ons leijd, di ẞait heh häd för der Momang e täschnesch Problehm.",
+       "dberr-again": "Versöhk eijfach en e paa Menotte, norr_ens di Sigg afzerohfe.",
        "dberr-info": "(Mer han kein Verbendong noh_m Dahtebangk-ẞööver krijje künne för: $1)",
        "dberr-info-hidden": "(Mer han kein Verbendong noh_m Dahtebangk-ẞööver krijje künne)",
        "dberr-usegoogle": "De künnß zweschedorsch ad met <i lang=\"en\">Google</i> söke.",
        "dberr-outofdate": "Müjjelesch, dat dat Verzeichnes vun uns Sigge do nit janß om neuste Shtannd es.",
-       "dberr-cachederror": "Wat heh noh kütt es en Kopi vum Zwescheshpeisher vun dä Sigg,\ndie De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.",
+       "dberr-cachederror": "Wat heh noh kütt es en Kopih vum Zwescheschpeischer vun dä Sigg,\ndi De häs han welle. Se künnt jädd ällder un nit mih aktoäll sin.",
        "htmlform-invalid-input": "Mer han e Problem met jet wat De enjejovve häß",
        "htmlform-select-badoption": "Dinge aanjejovve Wäät es kein müjjelesche Ußwahl.",
        "htmlform-int-invalid": "Dinge aanjejovve Wäät eß kein janze Zahl.",
        "feedback-back": "Retuur",
        "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äschesch Probleem 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 enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg „[$3 $2]“ drop.",
+       "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.",
        "feedback-cancel": "Stopp! Avbreche!",
        "feedback-close": "Jedonn.",
        "feedback-external-bug-report-button": "Donne ene Fähler mällde, ene Wonsch för en Verbäßerong ennreische, udder anndere täschneche Idee opbränge.",
        "feedback-submit": "Lohß jonn!",
        "feedback-terms": "Minge Brauser un sing Enschtällong un mi Bedriefssüßtehm und dänne iehr Väsohne wääde met minge Röckmäldong zersamme öffentlesch jemaat.",
        "feedback-termsofuse": "Esch donn ming Röckmäldong onger de Bedengonge för der Jebruch maache.",
-       "feedback-thanks": "Joot. Dinge Beidraach kütt op die Sigg \"[$2 $1]\".",
+       "feedback-thanks": "Joht. Dinge Beidraach küdd op di Sigg \"[$2 $1]\".",
        "feedback-thanks-title": "Ene schöne Dangk och!",
        "feedback-useragent": "Dä Brauser:",
        "searchsuggest-search": "Söhke",
        "special-characters-group-khmer": "Khmer-Kambodschaanesch",
        "special-characters-title-endash": "Ene Halfjeviertschtresch",
        "special-characters-title-emdash": "Ene Jeviertschtresch",
-       "special-characters-title-minus": "Et Winnijer-Zeische"
+       "special-characters-title-minus": "Et Winnijer-Zeische",
+       "mw-widgets-titleinput-description-new-page": "di Sigg jidd_et noch nit",
+       "mw-widgets-titleinput-description-redirect": "ömleijde op „$1“"
 }
index 8270157..3683d61 100644 (file)
        "resetpass-validity-soft": "Şîfreya te derbasdar nîne: $1\n\nJi kerema xwe re şîfreyek nû çêke an jî ji bo paşî çêkî li \"{{int:resetpass-submit-cancel}}\" bitikîne.",
        "passwordreset": "Şîfreyê nû bike",
        "passwordreset-text-one": "Ji bo ji nû ve sazkirina şîfreyê vê formê dagire.",
-       "passwordreset-legend": "Şîfreyê nû bike",
        "passwordreset-username": "Navê bikarhêner:",
        "passwordreset-domain": "Domain:",
        "passwordreset-email": "Navnîşana e-nameyê:",
        "changeemail-none": "(nîne)",
        "changeemail-submit": "Enameyê biguherîne",
        "resettokens": "Mifteya jê bibe",
-       "resettokens-legend": "Mifteya jê bibe",
        "bold_sample": "Nivîsa stûr",
        "bold_tip": "Nivîsa stûr",
        "italic_sample": "Nivîsa xwehr (îtalîk)",
        "search-file-match": "(bi naveroka dosye re lê te)",
        "search-suggest": "Gelo mebesta te ev bû: $1",
        "search-interwiki-caption": "Projeyên hevçeng",
-       "search-interwiki-default": "$1 encam:",
+       "search-interwiki-default": "Encamên ji $1:",
        "search-interwiki-more": "(bêhtir)",
        "search-relatedarticle": "Pêwendîdar",
        "searchrelated": "pêwendîdar",
        "recentchanges-label-newpage": "Rûpeleke nû hate çêkirin",
        "recentchanges-label-minor": "Ev guherîneke biçûk e",
        "recentchanges-label-bot": "Ev guherîn ji aliyê botekê ve hate çêkirin",
-       "recentchanges-label-unpatrolled": "Ev gotar hêj nehatiye sererastkirin",
+       "recentchanges-label-unpatrolled": "Ev gotar hêjî nehatiye sererastkirin",
        "recentchanges-label-plusminus": "Qebareya vê rûpelê bi ev qas biteyan hate guherandin",
        "recentchanges-legend-heading": "'''Ravekirina kurtenavan:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (here [[Special:NewPages|lîsteya rûpelên nû]])",
        "watchthisupload": "Vê rûpelê bişopîne",
        "filewasdeleted": "Data'yek bi vê navê hatibû barkirin û jêbirin. Xêra xwe li $1 seke ku barkirina te hêja ye ya na.",
        "filename-bad-prefix": "Nava wê data'yê, yê tu niha bardikê, bi '''\"$1\"''' destpêdike. Kamêrayên dîjîtal wan navan didin wêneyên xwe. Ji kerema xwe navekî baştir binivisîne ji bo mirov zûtir zanibin ku şayeşê vê wêneyê çî ye.",
-       "upload-success-subj": "Barkirin serkeftî",
+       "upload-success-subj": "Barkirina serkeftî",
        "upload-failure-subj": "Pirsgirêka barkirinê",
        "upload-warning-subj": "Hişyariya barkirinê",
        "upload-file-error": "Çewtiya navxweyî",
        "filedelete-submit": "Jê bibe",
        "filedelete-success": "<strong>$1</strong> hate jêbirin.",
        "filedelete-success-old": "<span class=\"plainlinks\">Verzyona $2 ji data'ya '''[[Media:$1|$1]]''' di saet $3 da hate jêbirin.</span>",
-       "filedelete-nofile": "'''$1''' nîne.",
+       "filedelete-nofile": "<strong>$1</strong> tune ye.",
        "filedelete-otherreason": "Sedemên din:",
        "filedelete-reason-otherlist": "Sedemên din",
        "filedelete-reason-dropdown": "*Sedemên jêbirina wêneyan\n** wêneyekî nebaş e\n** kopiyek e",
        "nmembers": "$1 {{PLURAL:$1|endam|endam}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|endam}}",
        "nrevisions": "$1 {{PLURAL:$1|guherandin|guherandin}}",
-       "nviews": "$1 {{PLURAL:$1|dîtin|dîtin}}",
        "lonelypages": "Rûpelên sêwî",
        "uncategorizedpages": "Rûpelên bêkategorî",
        "uncategorizedcategories": "Kategoriyên bê kategorî",
        "contributions": "Beşdariyên {{GENDER:$1|bikarhêner}}",
        "contributions-title": "Beşdariyên ji bo $1",
        "mycontris": "Beşdariyên min",
-       "contribsub2": "Ji bo $1 ($2)",
+       "contribsub2": "Bo {{GENDER:$3|$1}} ($2)",
        "uctop": "(rojane)",
        "month": "Ji meha (û zûtir):",
        "year": "Ji sala (û zûtir):",
        "sp-contributions-uploads": "yên barkirî",
        "sp-contributions-logs": "têketin",
        "sp-contributions-talk": "gotûbêj",
-       "sp-contributions-userrights": "îdarekirina mafên bikarhêneran",
+       "sp-contributions-userrights": "birêvebirina mafên bikarhêneran",
        "sp-contributions-search": "Li beşdariyan bigere",
        "sp-contributions-username": "Navnîşana IP'yê an jî navê bikarhêner:",
        "sp-contributions-submit": "Lêgerîn",
        "whatlinkshere-filters": "Parzûn",
        "block": "Bikarhêner asteng bike",
        "unblock": "Astengkirinê rake",
-       "blockip": "Bikarhêner asteng bike",
+       "blockip": "{{GENDER:$1|Bikarhêner}} asteng bike",
        "blockip-legend": "Bikarhêner asteng bike",
        "blockiptext": "Ji bo astengkirina nivîsandinê ya ji navnîşaneke IP'yê an jî ji bikarhênerekî/ê, vê formê bikarbîne.\nDivê ev tenê ji bo sekinandina vandalîzmê were bikaranîn, ku divê li gorî [[{{MediaWiki:Policy-url}}|rêgezê]] be.\n\nSedemekê binivîse!",
        "ipaddressorusername": "adresê IP'yekê ya navekî bikarhênerekî",
        "ipb-unblock-addr": "Astengkirinê $1 rake",
        "ipb-unblock": "Astengkirina bikarhênerekî ya adrêsa IP'yekê rake",
        "ipb-blocklist": "Astengkirinên niha bibîne",
-       "ipb-blocklist-contribs": "Beşdariyên ji bo $1",
+       "ipb-blocklist-contribs": "Beşdariyên ji bo {{GENDER:$1|}}",
        "unblockip": "Astengkirina bikarhêner rake",
        "unblockiptext": "Nivîsara jêr bikarwîne ji bo qebûlkirina nivîsandinê bikarhênerekî ya IP'yeka berê astengkirî.",
        "ipusubmit": "Vê astengkirinê rake",
        "unblocked-range": "$1 hat astengkirin.",
        "unblocked-id": "$1 dîsa vê astengkirinê ye",
        "blocklist": "Bikarhênerên astengkirî",
-       "ipblocklist": "Listek ji adresên IP'yan û bikarhêneran yê hatine astengkirin",
+       "ipblocklist": "Bikarhênerên astengkirî",
        "ipblocklist-legend": "Bikarhênerên astengkirî bibîne",
        "blocklist-userblocks": "Astengkirina hesaban veşêre",
        "blocklist-tempblocks": "Astengkirinên demkî veşêre",
        "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-ca-protect": "Vê rûpelê biparêze",
-       "tooltip-ca-unprotect": "Parastina vê rûpelê rake",
+       "tooltip-ca-unprotect": "Parastina vê rûpelê biguherîne",
        "tooltip-ca-delete": "Vê rûpelê jê bibe",
        "tooltip-ca-move": "Navekî nû bide vê rûpelê",
        "tooltip-ca-watch": "Vê rûpelê têke nav lîsteya te ya şopandinê",
        "tooltip-watchlistedit-normal-submit": "Sernavan jê bibe",
        "tooltip-watchlistedit-raw-submit": "Lîsteya şopandinê rojane bike",
        "tooltip-upload": "Barkirinê destpêke",
+       "tooltip-summary": "Kurteyek kurt binivîse",
        "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
        "anonymous": "Bikarhênera/ê nediyarkirî ya/yê {{SITENAME}}",
        "siteuser": "Bikarhênera $1 ê {{SITENAME}}",
        "version-software-product": "Berhem",
        "version-software-version": "Guherto",
        "version-entrypoints-header-url": "URL",
+       "version-libraries-description": "Danasîn",
        "fileduplicatesearch-filename": "Navê dosyeyê:",
        "fileduplicatesearch-submit": "Lê bigere",
        "specialpages": "Rûpelên taybet",
        "logentry-delete-delete": "$1 rûpela $3 {{GENDER:$2|jê bir}}",
        "revdelete-content-hid": "naverok veşartî ye",
        "revdelete-uname-hid": "navê bikarhêneriyê yê veşartî",
-       "logentry-move-move": "$1 rûpela $3 ji $4e re {{GENDER:$2|barkir}}",
+       "logentry-move-move": "$1 navê $3 weke $4 guherand",
        "logentry-move-move-noredirect": "$1 navê $3 guherand û kir $4",
        "logentry-move-move_redir": "$1 navê $3 guherand û kir $4",
-       "logentry-newusers-newusers": "$1 hesabekî bikarhêneriyê çêkir",
+       "logentry-newusers-newusers": "$1 wek hesabê bikarhêneriyê hate {{GENDER:$2|çêkirin}}",
        "logentry-newusers-create": "Hesabe bikarhêneriyê $1 {{GENDER:$2|hate çêkirin}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|hate barkirin}} $3",
        "rightsnone": "(tune)",
        "special-characters-group-gujarati": "Gucaratî",
        "special-characters-group-thai": "Tay",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-titleinput-description-new-page": "rûpel hê tune ye",
+       "mw-widgets-titleinput-description-redirect": "beralî bike ber bi $1 ve"
 }
index 17cccc2..a40a73e 100644 (file)
@@ -50,7 +50,7 @@
        "sunday": "Dy'Sul",
        "monday": "Dy'Lun",
        "tuesday": "Dy'Meurth",
-       "wednesday": "Dy'Merher",
+       "wednesday": "Dy'Mergher",
        "thursday": "Dy'Yow",
        "friday": "Dy'Gwener",
        "saturday": "Dy'Sadorn",
        "category-empty": "''Nyns eus na folennow na media y'n class-ma.''",
        "hidden-categories": "{{PLURAL:$1|Klass kudhys|Klassys kudhys}}",
        "hidden-category-category": "Klassys kudhys",
-       "category-subcat-count": "{{PLURAL:$2|Ny'n jeves an klass-ma marnas an isglass a syw.|An klass-ma a'n jeves an {{PLURAL:$1|isglass|$1 isglass}} a syw, dhyworth somm a $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Nyns eus dhe'n klass ma marnas an isglass a syw.|Yma dhe'n klass ma an {{PLURAL:$1|isglass|$1 isglass}} a syw, dhyworth somm a $2.}}",
        "category-subcat-count-limited": "An klass-ma a'n jeves an {{PLURAL:$1|isglass|$1 isglass}} a syw.",
-       "category-article-count": "{{PLURAL:$2|Ny'n jeves an klass-ma marnas an folen a syw.|Yma an {{PLURAL:$1|folen|$1 folennow}} a syw y'n klass-ma, dhyworth somm a $2.}}",
+       "category-article-count": "{{PLURAL:$2|Nyns eus dhe'n klass ma marnas an folen a syw.|Yma an {{PLURAL:$1|folen|$1 folennow}} a syw y'n klass ma, dhyworth somm a $2.}}",
        "category-article-count-limited": "Yma an {{PLURAL:$1|folen|$1 folen}} a syw y'n klass-ma.",
-       "category-file-count": "{{PLURAL:$2|Ny'n jeves an klass-ma marnas an restren a syw.|Yma an {{PLURAL:$1|restren|$1 restren}} a syw y'n klass-ma, dhyworth somm a $2.}}",
+       "category-file-count": "{{PLURAL:$2|Nyns eus dhe'n klass ma marnas an restren a syw.|Yma an {{PLURAL:$1|restren|$1 restren}} a syw y'n klass ma, dhyworth somm a $2.}}",
        "category-file-count-limited": "Yma an {{PLURAL:$1|folen|$1 folen}} a syw y'n klass-ma.",
        "listingcontinuesabbrev": "pes.",
        "about": "A-dro dhe",
        "article": "Folen dhalgh",
-       "newwindow": "(ygeri yn fenester nowyth)",
+       "newwindow": "(ygeri yn fenester nowydh)",
        "cancel": "Hedhi",
        "moredotdotdot": "Moy...",
        "mypage": "Folen",
        "permalink": "Kevren fast",
        "print": "Pryntya",
        "view": "Gweles",
+       "view-foreign": "Gweles war $1",
        "edit": "Chanjya",
        "create": "Gwruthyl",
        "editthispage": "Chanjya an folen-ma",
        "protectthispage": "Difres an folen-ma",
        "unprotect": "Chanjya difresans",
        "unprotectthispage": "Chanjya difresans an folen-ma",
-       "newpage": "Folen nowyth",
+       "newpage": "Folen nowydh",
        "talkpage": "Dadhlow a'n folen-ma",
        "talkpagelinktext": "keskows",
        "specialpage": "Folen arbennek",
        "articlepage": "Gweles an folen",
        "talk": "Keskows",
        "views": "Gwelyansow",
-       "toolbox": "Toulgist",
+       "toolbox": "Toulys",
        "userpage": "Gweles an folen dhevnydhyer",
        "projectpage": "Gweles folen an ragdres",
        "imagepage": "Gweles folen an restren",
        "otherlanguages": "Yn yethow erel",
        "redirectedfrom": "(Daskedyes dhyworth $1)",
        "redirectpagesub": "Folen dhaskedya",
-       "lastmodifiedat": "Diwettha chanj an folen-ma o an $1, dhe $2.",
+       "lastmodifiedat": "Gwrys veu diwettha chanj an folen ma an $1, dhe $2.",
        "protectedpage": "Folen dhifresys",
        "jumpto": "Lamma dhe:",
        "jumptonavigation": "kevrennow lewya",
        "currentevents-url": "Project:Hwarvosow a-lemmyn",
        "disclaimers": "Avisyansow",
        "disclaimerpage": "Project:Avisyans ollgemmyn",
-       "edithelp": "Gweres gans chanjya",
+       "edithelp": "Gweres ow chanjya",
        "mainpage": "Dynnargh",
        "mainpage-description": "Dynnargh",
        "policy-url": "Project:Polici",
        "privacypage": "Project:Polici privetter",
        "badaccess": "Gwall kummyes",
        "ok": "Sur",
-       "retrievedfrom": "Daskevys dhyworth \"$1\"",
+       "retrievedfrom": "Dhyworth \"$1\"",
        "youhavenewmessages": "$1 a'gas beus ($2).",
        "youhavenewmessagesfromusers": "Hwi a'gas beus $1 dhyworth {{PLURAL:$3|devnydhyer aral|$3 devnydhyer}} ($2).",
        "youhavenewmessagesmanyusers": "Hwi a'gas beus $1 dhyworth lies devnydhyer ($2).",
        "exception-nologin-text": "An folen-ma po an gwrians-ma a wovyn mayth omgelmowgh war an wiki-ma.",
        "logouttext": "'''Digelmys owgh lemmyn.'''\n\nHwi a yll pesya devnydhya {{SITENAME}} yn tihanow, po hwi a yll <span class='plainlinks'>[$1 omgelmi arta]</span> avel an keth devnydhyer po avel devnydhyer aral.\nNotyewgh: Neb folennow a alsa bos diskwedhys kepar del owgh hwath omgelmys, erna glerhahowgh cache agas peurel.",
        "welcomeuser": "Dynnargh, $1!",
-       "welcomecreation-msg": "Gwruthys re beu agas akont.\nNa ankevewgh dhe janjya agas [[Special:Preferences|dewisyansow {{SITENAME}}]].",
+       "welcomecreation-msg": "Gwruthys re beu agas akont.\nNa ankevewgh dhe janjya agas [[Special:Preferences|dewisyow {{SITENAME}}]].",
        "yourname": "Hanow devnydhyer:",
        "userlogin-yourname": "Hanow devnydhyer",
        "userlogin-yourname-ph": "Entrewgh agas hanow devnydhyer",
        "logout": "Digelmi",
        "userlogout": "Digelmi",
        "notloggedin": "Digelmys",
-       "userlogin-noaccount": "A ny'gas beus akont?",
+       "userlogin-noaccount": "A nyns eus akont dhywgh?",
        "userlogin-joinproject": "Junya {{SITENAME}}",
        "nologin": "A ny'gas beus akont? '''$1'''.",
        "nologinlink": "Gwruthyl akont",
-       "createaccount": "Gwruthyl akont nowyth",
+       "createaccount": "Gwruthyl akont nowydh",
        "gotaccount": "Eus akont dhywgh seulabrys? '''$1'''.",
        "gotaccountlink": "Omgelmi",
        "userlogin-resetlink": "A ankevsowgh hwi agas manylyon omgelmi?",
-       "userlogin-resetpassword-link": "Dassettya agas ger tremena",
+       "userlogin-resetpassword-link": "Ankevys agas ger tremena genowgh?",
+       "userlogin-helplink2": "Gweres owth omgelmi",
        "createacct-emailrequired": "Trigva ebost",
        "createacct-emailoptional": "Trigva ebost (a-dhewis)",
        "createacct-email-ph": "Entrewgh agas trigva ebost",
        "createaccount-title": "Gwruthyl akont rag {{SITENAME}}",
        "createaccount-text": "Nebonan a wrug akont rag agas trigva ebost war {{SITENAME}} ($4) henwys \"$2\", \"$3\" y er tremena.\nY talvia dhywgh omgelmi ha chanjya agas ger tremena lemmyn.\n\nHwi a yll skonya aswon an messach-ma mar peu an akont-ma gwruthys yn gwall.",
        "loginlanguagelabel": "Yeth: $1",
+       "pt-login": "Omgelmi",
+       "pt-login-button": "Omgelmi",
+       "pt-createaccount": "Gwruthyl akont",
+       "pt-userlogout": "Digelmi",
        "changepassword": "Chanjya an ger-tremena",
        "resetpass_announce": "Hwi a omgelmis dre goden ebostyes anbarthus.\nRag gorfenna omgelmi, res yw dhywgh settya ger tremena nowyth omma:",
        "resetpass_header": "Chanjya ger tremena an akont",
        "passwordreset": "Dassettya an ger tremena",
        "passwordreset-text-one": "Lenwewgh an furvlen-ma rag dassettya agas ger tremena.",
        "passwordreset-text-many": "{{PLURAL:$1|Entrewgh onan a'n tymmyn a dhata a-woles rag dassettya agas ger tremena.}}",
-       "passwordreset-legend": "Dassettya an ger tremena",
        "passwordreset-disabled": "Dialosegys yw dassettya geryow tremena war an wiki-ma.",
        "passwordreset-username": "Hanow devnydhyer:",
        "passwordreset-domain": "Tiredh:",
        "nowiki_tip": "Skonya aswon furvyans wiki",
        "image_tip": "Restren neythys",
        "media_tip": "Kevren restren",
-       "sig_tip": "Agas sinans gans stampa-termyn",
+       "sig_tip": "Agas sinans ha stampa-termyn",
        "summary": "Berrskrif:",
        "subject": "Testen/Pennlinen:",
-       "minoredit": "Chanj byhan yw hemma",
-       "watchthis": "Golya an folen-ma",
+       "minoredit": "Chanj byghan yw hemma",
+       "watchthis": "Golya an folen ma",
        "savearticle": "Gwitha an folen",
        "preview": "Ragwel",
        "showpreview": "Diskwedhes ragwel",
        "showdiff": "Diskwedhes an chanjyow",
-       "anoneditwarning": "'''Gwarnyans:''' Nyns owgh omgelmys.\nRekordys vydh agas trigva IP yn istori an folen-ma.",
+       "anoneditwarning": "<strong>Gwarnyans:</strong> Nyns owgh hwi omgelmys. Gweladow yn foblek vydh agas trigva IP mar kwrewgh chanjyow. Mars <strong>[$1 omgelmowgh]</strong> po <strong>[$2 gwruthyl akont]</strong>, agas chanjyow a vydh askrifys dhe'gas hanow devnydher, keffrys ha lesow erel.",
        "anonpreviewwarning": "''Nyns owgh omgelmys. Dre witha, agas trigva IP a vydh rekordyes istori chanjya an folen-ma.''",
        "summary-preview": "Ragwel a'n berrskrif:",
        "loginreqtitle": "Res yw omgelmi",
        "loginreqlink": "omgelmi",
        "accmailtitle": "Ger-tremena danvenys.",
        "newarticle": "(Nowyth)",
-       "newarticletext": "Hwi re holyas kevren dhe folen nag yw gwruthys hwath.\nRag gwruthyl an folen, dalethewgh jynnskrifa y'n gist a-woles (gwelewgh an [$1 folen weres] rag moy kedhlow).\nMar teuthowgh omma yn kamm, klyckyewgh boton '''war-dhelergh''' agas peurel.",
-       "noarticletext": "Nyns eus tekst y'n folen-ma a-lemmyn.\nHwi a yll [[Special:Search/{{PAGENAME}}|hwilas titel an folen-ma]] yn folennow erel,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hwilas y'n kovnotennow kelmys],\npo [{{fullurl:{{FULLPAGENAME}}|action=edit}} chanjya an folen-ma]</span>.",
-       "noarticletext-nopermission": "Nyns eus tekst y'n folen-ma a-lemmyn.\nHwi a yll [[Special:Search/{{PAGENAME}}|hwilas titel an folen-ma]] yn folennow erel, po <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hwilas y'n kovnotennow kelmys]</span>, mes ny'gas beus kummyes dhe wruthyl an folen-ma.",
+       "newarticletext": "Hwi re holyas kevren dhe folen nag yw gwruthys hwath.\nRag gwruthyl an folen, dallethewgh jynnskrifa y'n gist a-woles (gwelewgh an [$1 folen weres] rag moy kedhlow).\nMar teuthowgh omma yn kamm, klyckyewgh boton '''war-dhelergh''' agas peurell.",
+       "noarticletext": "Nyns eus tekst y'n folen ma a-lemmyn.\nHwi a yll [[Special:Search/{{PAGENAME}}|hwilas titel an folen ma]] yn folennow erel,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hwilas y'n kovnotennow kelmys],\npo [{{fullurl:{{FULLPAGENAME}}|action=edit}} chanjya an folen ma]</span>.",
+       "noarticletext-nopermission": "Nyns eus tekst y'n folen ma a-lemmyn.\nHwi a yll [[Special:Search/{{PAGENAME}}|hwilas titel an folen ma]] yn folennow erel, po <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hwilas y'n kovnotennow kelmys]</span>, mes ny'gas beus kummyas dhe wruthyl an folen ma.",
        "userpage-userdoesnotexist": "Nyns yw kovskrifys an akont devnydhyer \"$1\".\nCheckyewgh mar pleg mara'gas beus hwans dhe wruthyl/dhe janjya an folen-ma.",
        "userpage-userdoesnotexist-view": "Nyns yw kovskrifys an akont devnydhyer \"$1\".",
        "updated": "(Nowedhys)",
        "yourtext": "Agas tekst",
        "yourdiff": "Dyffransow",
        "protectedpagewarning": "'''Gwarnyans: An folen-ma re beu difresys rag ma nag allo marnas devnydhyoryon gans gwiryow menystrer hy chanjya.'''\nRes yw an diwettha kovnoten a-woles rag godhvos:",
-       "templatesused": "{{PLURAL:$1|An skantlyn|Skantlyns}} devnydhys war an folen-ma:",
+       "templatesused": "{{PLURAL:$1|An skantlyn|Skantlyns}} devnydhys war an folen ma:",
        "templatesusedpreview": "{{PLURAL:$1|An skantlyn|Skantlyns}} devnydhys y'n ragwel-ma:",
        "template-protected": "(difresys)",
        "template-semiprotected": "(hanter-difresys)",
-       "hiddencategories": "Esel a {{PLURAL:$1|1 glass kudhys|$1 klass kudhys}} yw an folen-ma:",
-       "permissionserrorstext-withaction": "Ny'gas beus kummyes dhe $2, rag an {{PLURAL:$1|acheson|achesonys}} a syw:",
-       "moveddeleted-notice": "An folen-ma re beu diles.\nYma kovnoten dhilea ha gwaya an folen res a-woles.",
+       "hiddencategories": "Esel a {{PLURAL:$1|1 glass kudhys|$1 klass kudhys}} yw an folen ma:",
+       "permissionserrorstext-withaction": "Nyns eus kummyas dhywgh dhe $2, rag an {{PLURAL:$1|acheson|achesonys}} a syw:",
+       "moveddeleted-notice": "Diles veu an folen ma.\nA-woles yma kovnotennow dhilea ha gwaya an folen.",
        "log-fulllog": "Gweles an govnoten dhien",
-       "editwarning-warning": "Mar kasowgh an folen-ma, y halser kelli chanjyow gwrys genowgh.\nMars owgh omgelmys, hwi a yll dialosegi an gwarnyans-ma yn tregh \"Chanjya\" agas dewisyansow.",
+       "editwarning-warning": "Mar kesowgh an folen ma, hwi a allsa kelli chanjyow gwrys genowgh.\nMars owgh hwi omgelmys, hwi a yll diallosegi an gwarnyans ma yn tregh \"{{int:prefs-editing}}\" agas dewisyow.",
        "undo-success": "Y hyllir diswul an chanj-ma.\nCheckyewgh mar pleg an kehevelyans a-woles rag gwirya bos hemma an pyth a vynnowgh, hag ena gwithewgh an chanjyow a-woles rag gorfenna diswul an chanj.",
        "undo-summary": "Amendyans $1 gans [[Special:Contributions/$2|$2]] ([[User talk:$2|keskows]]) diswrys",
        "cantcreateaccounttitle": "Ny yllir gwruthyl an akont",
-       "viewpagelogs": "Gweles kovnotennow an folen-ma",
+       "viewpagelogs": "Gweles kovnotennow an folen ma",
        "currentrev": "Amendyans diwettha",
        "currentrev-asof": "An amendyans diwettha a-dhia $1",
        "revisionasof": "Versyon an folen a-dhia $1",
-       "revision-info": "Amendyans a-dhia $1 gans $2",
+       "revision-info": "Amendyans a-dhia $1 gans {{GENDER:$6|$2}}$7",
        "previousrevision": "← Amendyans kottha",
        "nextrevision": "Amendyans nowyttha →",
        "currentrevisionlink": "An amendyans diwettha",
        "shown-title": "Diskwedhes $1 {{PLURAL:$1|sewyans}} yn folen",
        "viewprevnext": "Gweles ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "''Yma folen henwys \"[[:$1]]\" war an wiki-ma'''",
-       "searchmenu-new": "'''Gwruthyl an folen \"[[:$1]]\" war an wiki-ma!'''",
+       "searchmenu-new": "<strong>Gwrewgh an folen \"[[:$1]]\" war an wiki ma!</strong> {{PLURAL:$2|0=|Gweler ynwegh an folen a veu kevys yn unn hwilas.|Gweler ynwedh an sewyans hwilas kevys.}}",
        "searchprofile-articles": "Folennow dalgh",
        "searchprofile-images": "Liesmedia",
        "searchprofile-everything": "Puptra",
        "search-result-category-size": "{{PLURAL:$1|1 esel|$1 esel}} ({{PLURAL:$2|1 isglass|$2 isglass}}, {{PLURAL:$3|1 restren|$3 restren}})",
        "search-redirect": "(daskedyans $1)",
        "search-section": "(tregh $1)",
-       "search-suggest": "A styrsowgh hwi: $1",
+       "search-suggest": "Esewgh hwi ow menya: $1",
        "search-interwiki-caption": "Ragdresow hwor",
        "search-interwiki-default": "$1 sewyansow:",
        "search-interwiki-more": "(moy)",
        "search-relatedarticle": "Kelmys",
        "searchrelated": "kelmys",
        "searchall": "oll",
+       "search-showingresults": "{{PLURAL:$4|Sewyans <strong>$1</strong> a <strong>$3</strong>|Sewyansow <strong>$1 - $2</strong> a <strong>$3</strong>}}",
        "search-nonefound": "Nyns esa sewyans vyth owth omdhesedha orth an govyn.",
        "powersearch-legend": "Hwilans avonsys",
        "powersearch-ns": "Hwilas yn spasys-hanow:",
        "powersearch-toggleall": "Oll",
        "powersearch-togglenone": "Nagonan",
        "search-external": "Hwilans a-ves",
-       "preferences": "Dewisyansow",
-       "mypreferences": "Dewisyansow",
+       "preferences": "Dewisyow",
+       "mypreferences": "Dewisyow",
        "prefs-edits": "Niver a janjyow:",
        "prefs-skin": "Krohen",
        "skin-preview": "Ragweles",
        "action-upload": "ughkarga an restren-ma",
        "action-delete": "dilea an folen-ma",
        "nchanges": "$1 {{PLURAL:$1|chanj|chanj}}",
+       "enhancedrc-history": "istori",
        "recentchanges": "Chanjyow a-dhiwedhes",
        "recentchanges-legend": "Etholyow an chanjyow a-dhiwedhes",
-       "recentchanges-summary": "Y hyllir helerhi an chanjyow diwettha gwrys dhe'n wiki war an folen-ma.",
+       "recentchanges-summary": "War an folen-ma y hyllir helerghi an chanjyow diwettha eus gwrys dhe'n wiki.",
        "recentchanges-noresult": "Nyns eus chanj vyth dres an termyn res a omdhesedh orth an etholyow-ma.",
        "recentchanges-feed-description": "Y hyllir helerhi an chanjyow diwettha gwrys dhe'n wiki y'n feed-ma.",
-       "recentchanges-label-newpage": "Y feu gwruthys folen nowyth gans an chanj-ma",
-       "recentchanges-label-minor": "Chanj byhan yw hemma",
-       "recentchanges-label-bot": "Gwrys veu an chanj-ma gans bott",
-       "recentchanges-label-unpatrolled": "Ny veu an chanj-ma patrolyes hwath",
-       "recentchanges-legend-newpage": "$1 - folen nowyth",
-       "rclistfrom": "Diskwedhes chanjyow nowyth yn unn dhalleth dhyworth $3 $2",
-       "rcshowhideminor": "$1 chanjyow byhan",
+       "recentchanges-label-newpage": "Gans an chanj ma y feu gwruthys folen nowydh",
+       "recentchanges-label-minor": "Chanj byghan yw hemma",
+       "recentchanges-label-bot": "Gwrys veu an chanj ma gans bott",
+       "recentchanges-label-unpatrolled": "Ny veu an chanj ma patrolyes hwath",
+       "recentchanges-legend-heading": "'''Alhwedh:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler ynwedh an [[Special:NewPages|rol a folennow nowydh]])",
+       "rclistfrom": "Diskwedhes chanjyow nowydh yn unn dhalleth dhyworth $3 $2",
+       "rcshowhideminor": "$1 chanjyow byghan",
+       "rcshowhideminor-hide": "Kudha",
        "rcshowhidebots": "$1 bottow",
-       "rcshowhideliu": "$1 devnydhoryon omgelmys",
+       "rcshowhidebots-show": "Diskwedhes",
+       "rcshowhideliu": "$1 devnydhoryon govskrifys",
+       "rcshowhideliu-hide": "Kudha",
        "rcshowhideanons": "$1 devnydhyoryon dhihanow",
+       "rcshowhideanons-show": "Diskwedhes",
+       "rcshowhideanons-hide": "Kudha",
        "rcshowhidemine": "$1 ow chanjyow",
+       "rcshowhidemine-hide": "Kudha",
        "rclinks": "Diskwedhes an $1 chanj diwettha gwrys y'n $2 dydh diwettha<br />$3",
        "diff": "dyffrans",
        "hist": "istori",
        "minoreditletter": "B",
        "newpageletter": "N",
        "boteditletter": "bott",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} wosa an chanj",
        "newsectionsummary": "/* $1 */ tregh nowyth",
        "rc-enhanced-expand": "Diskwedhes an manylyon (res yw JavaScript)",
        "rc-enhanced-hide": "Kudha an manylyon",
        "listfiles_count": "Versyons",
        "file-anchor-link": "Restren",
        "filehist": "Istori an restren",
-       "filehist-help": "Klyckyewgh war dhedhyans/eur rag gweles an folen del omdhiskwedhas nena.",
+       "filehist-help": "Klyckyewgh war dhedhyans/eur rag gweles an folen dell omdhiskwedhas nena.",
        "filehist-deleteall": "dilea oll",
        "filehist-deleteone": "dilea",
        "filehist-revert": "gorthtreylya",
        "filehist-user": "Devnydhyer",
        "filehist-dimensions": "Mynsow",
        "filehist-filesize": "Mens an restren",
-       "filehist-comment": "Kampol",
+       "filehist-comment": "Kampoll",
        "imagelinks": "Devnydh an restren",
-       "linkstoimage": "Yma an {{PLURAL:$1|folen|$1 folen}} a syw ow kevrenna dhe'n restren-ma:",
+       "linkstoimage": "Yma an {{PLURAL:$1|folen|$1 folen}} a syw ow kevrenna dhe'n restren ma:",
        "linkstoimage-more": "Yma moy es $1 {{PLURAL:$1|folen}} ow kevrenna dhe'n restren-ma.\nNy dhiskwa an rol a syw marnas an {{PLURAL:$1|kynsa kevren folen|kynsa $1 kevren folen}} dhe'n restren-ma.\nYma [[Special:WhatLinksHere/$2|rol leun]] kavadow.",
        "nolinkstoimage": "Nyns eus folen vyth ow kevrenna dhe'n restren-ma.",
        "morelinkstoimage": "Gweles [[Special:WhatLinksHere/$1|moy kevrennow]] dhe'n restren-ma.",
        "sharedupload": "Yma an folen-ma ow tos dhyworth $1 ha hy a alsa bos yn-dann devnydh gans ragdresow erel.",
-       "sharedupload-desc-here": "Yma an restren-ma dhe $1 ha ragdresow erel a alsa bos orth hy devnydhya.\nDiskwedhys a-woles yw an deskrifans war hy [$2 folen dheskrifans] ena.",
+       "sharedupload-desc-here": "Yma an restren ma dhe $1 ha ragdresow erel a allsa bos orth hy devnydhya.\nDiskwedhys a-woles yw an deskrifans war hy [$2 folen dheskrifans] ena.",
        "uploadnewversion-linktext": "Ughkarga versyon nowyth a'n restren-ma",
        "filedelete": "Dilea $1",
        "filedelete-legend": "Dilea an restren",
        "listredirects": "Rol an daswedyansow",
        "unusedtemplates": "Skantlyns heb devnydh",
        "unusedtemplateswlh": "kevrennow erel",
-       "randompage": "Folen jonsus",
+       "randompage": "Folen dre happ",
        "statistics": "Statystygyon",
        "statistics-pages": "Folennow",
        "brokenredirects-edit": "chanjya",
        "protectedpages": "Folennow difresys",
        "protectedtitles": "Titlys difresys",
        "usercreated": "{{GENDER:$3|Gwruthys}} an $1 dhe $2",
-       "newpages": "Folennow nowyth",
+       "newpages": "Folennow nowydh",
        "newpages-username": "Hanow-usyer:",
        "ancientpages": "An kottha folennow",
        "move": "Gwaya",
        "allpagesfrom": "Diskwedhes folennow yn unn dhalleth orth:",
        "allpagesto": "Diskwedhes folennow yn unn dhiwedha orth:",
        "allarticles": "Keniver folen",
-       "allpagessubmit": "Mos",
+       "allpagessubmit": "Gweytha",
        "allpages-hide-redirects": "Kudha daskedyansow",
        "categories": "Klassys",
        "sp-deletedcontributions-contribs": "kevrohow",
        "import-noarticle": "Nyns eus folen vyth dhe ymperthi!",
        "tooltip-pt-userpage": "Agas folen dhevnydhyer",
        "tooltip-pt-mytalk": "Agas folen gows",
-       "tooltip-pt-preferences": "Agas dewisyansow",
+       "tooltip-pt-preferences": "Agas dewisyow",
        "tooltip-pt-watchlist": "Rol a folennow esowgh ow kolya rag chanjyow",
        "tooltip-pt-mycontris": "Rol a'gas kevrohow",
-       "tooltip-pt-login": "Ni a gomend mayth omgelmowgh, mes nyns yw besi",
+       "tooltip-pt-login": "Ni a gomend hwi dhe omgelmi, mes nyns yw besi",
        "tooltip-pt-logout": "Digelmi",
+       "tooltip-pt-createaccount": "Ni a gomend hwi dhe wruthyl akont hag omgelmi; byttegyns nyns yw besi",
        "tooltip-ca-talk": "Dadhlow a-dro dhe'n folen",
-       "tooltip-ca-edit": "Hwi a yll chanjya an folen-ma. Devnydhyewgh an boton 'ragweles' kyns gwitha mar pleg.",
-       "tooltip-ca-addsection": "Dalleth tregh nowyth",
-       "tooltip-ca-viewsource": "Difresys yw an folen-ma.\nHwi a yll gweles hy fennfenten.",
-       "tooltip-ca-history": "Amendyansow koth a'n folen-ma",
+       "tooltip-ca-edit": "Chanjya an folen ma",
+       "tooltip-ca-addsection": "Dalleth tregh nowydh",
+       "tooltip-ca-viewsource": "Difresys yw an folen ma.\nHwi a yll gweles hy fennfenten.",
+       "tooltip-ca-history": "Amendyansow koth a'n folen ma",
        "tooltip-ca-protect": "Difres an folen-ma",
        "tooltip-ca-delete": "Dilea an folen-ma",
-       "tooltip-ca-move": "Gwaya an folen-ma",
-       "tooltip-ca-watch": "Keworra an folen-ma dhe'gas rol wolya",
+       "tooltip-ca-move": "Gwaya an folen ma",
+       "tooltip-ca-watch": "Keworra an folen ma dhe'gas rol wolya",
        "tooltip-ca-unwatch": "Dilea an folen-ma dhyworth agas rol wolya",
        "tooltip-search": "Hwilas yn {{SITENAME}}",
-       "tooltip-search-go": "Mos dhe folen gans an keth hanow-ma, mars eus",
-       "tooltip-search-fulltext": "Hwilas an tekst-ma y'n folennow",
+       "tooltip-search-go": "Mos dhe folen dhedhi an keth hanow ma, mars eus",
+       "tooltip-search-fulltext": "Hwilas an tekst ma y'n folennow",
        "tooltip-p-logo": "Mos dhe'n folen dynnargh",
        "tooltip-n-mainpage": "Mos dhe'n folen dynnargh",
        "tooltip-n-mainpage-description": "Mos dhe'n folen dynnargh",
        "tooltip-n-portal": "A-dro dhe'n ragdres, an pyth a yllowgh gul, ple hyllir kavos taklow",
        "tooltip-n-currentevents": "Kavos kedhlow a-dro dhe hwarvosow a-lemmyn",
        "tooltip-n-recentchanges": "Rol a janjyow a-dhiwedhes y'n wiki",
-       "tooltip-n-randompage": "Karga folen jonsus",
+       "tooltip-n-randompage": "Karga folen dre happ",
        "tooltip-n-help": "Gweres",
        "tooltip-t-whatlinkshere": "Rol a bub folen wiki a gevren dhe omma",
-       "tooltip-t-recentchangeslinked": "Chanjyow a-dhiwedhes yn folennow a gevrennir dhyworth an folen-ma",
+       "tooltip-t-recentchangeslinked": "Chanjyow a-dhiwedhes yn folennow a gevren an folen ma dhedha",
        "tooltip-feed-rss": "Feed RSS rag an folen-ma",
-       "tooltip-feed-atom": "Feed Atom rag an folen-ma",
-       "tooltip-t-contributions": "Gweles rol a gevrohow an devnydhyer-ma",
+       "tooltip-feed-atom": "Feed Atom rag an folen ma",
+       "tooltip-t-contributions": "Gweles rol a gevrohow an devnydhyer ma",
        "tooltip-t-emailuser": "Danvon ebost dhe'n devnydhyer-ma",
        "tooltip-t-upload": "Ughkarga restrennow",
        "tooltip-t-specialpages": "Rol a geniver folen arbennek",
-       "tooltip-t-print": "Versyon pryntyadow a'n folen-ma",
-       "tooltip-t-permalink": "Kevren fast dhe'n amendyans-ma a'n folen",
+       "tooltip-t-print": "Versyon pryntyadow a'n folen ma",
+       "tooltip-t-permalink": "Kevren fast dhe'n amendyans ma a'n folen",
        "tooltip-ca-nstab-main": "Gweles an folen",
        "tooltip-ca-nstab-user": "Gweles an folen dhevnydhyer",
-       "tooltip-ca-nstab-special": "Folen arbennek yw homma; ny yllowgh chanjya an folen hy honen.",
+       "tooltip-ca-nstab-special": "Folen arbennek yw homma; ny yllowgh chanjya an folen hy honan.",
        "tooltip-ca-nstab-project": "Gweles folen an wiki",
        "tooltip-ca-nstab-image": "Gweles folen an restren",
        "tooltip-ca-nstab-template": "Gweles an skantlyn",
        "tooltip-ca-nstab-category": "Gweles folen an klass",
        "tooltip-minoredit": "Merkya hemma avel chanj byhan",
        "tooltip-save": "Gwitha agas chanjyow",
-       "tooltip-preview": "Ragweles agas chanjyow; devnydhyewgh hemma kyns gwitha mar pleg!",
+       "tooltip-preview": "Ragweles agas chanjyow; devnydhyewgh hemma kyns gwitha!",
        "tooltip-diff": "Diskwedhes an chanjyow a wrussowgh dhe'n tekst",
        "tooltip-compareselectedversions": "Gweles an dyffransow ynter dew amendyansow dewisyes an folen-ma",
        "tooltip-watch": "Keworra an folen-ma dhe'gas rol wolya",
-       "tooltip-rollback": "\"Revya war-dhelergh\" a worthtreyl chanjyow an diwettha devnydhyer yn unn glyck",
-       "tooltip-undo": "\"Diswul\" a worthtreyl an chanj-ma hag ygeri an furvlen janjya y'n modh ragweles. Y hyllir keworra acheson y'n berrskrif.",
+       "tooltip-rollback": "\"Revya war-dhelergh\" a worthtreyl chanjyow an diwettha devnydhyer der unn glyck",
+       "tooltip-undo": "\"Diswul\" a worthtreyl an chanj ma hag ygeri an furvlen janjya y'n modh ragweles. Y hyllir keworra acheson y'n berrskrif.",
        "tooltip-summary": "Entrewgh berrskrif",
        "siteuser": "devnydhyer {{SITENAME}} $1",
        "lastmodifiedatby": "Chanj diwettha an folen-ma o dhe $2, $1 gans $3.",
        "pageinfo-toolboxlink": "Kedhlow an folen",
        "previousdiff": "← Chanj kottha",
        "nextdiff": "Chanj nowyttha →",
-       "file-info-size": "$1 × $2 piksel, myns an restren: $3, ehen MIME: $4",
-       "file-nohires": "Nyns eus klerder uhella kavadow.",
+       "file-info-size": "$1 × $2 piksel, myns an restren: $3, eghen MIME: $4",
+       "file-nohires": "Nyns eus klerder ughella kavadow.",
        "svg-long-desc": "Restren SVG, $1 × $2 piksel yn hanow, myns an restren: $3",
-       "show-big-image": "Klerder leun",
+       "show-big-image": "Restren wreydhek",
+       "show-big-image-preview": "Myns an ragwel ma: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Klerder aral|Klerderyow erel}}: $1.",
+       "show-big-image-size": "$1 × $2 piksel",
        "ilsubmit": "Hwilas",
        "metadata": "Metadata",
-       "metadata-help": "An restren-ma a's teves kedhlow keworansel, dres lycklod keworrys dhyworth an kamera bysyel po an skanyer devnydhys rag hy gwruthyl po hy bysya. Mars yw chanjys an restren dhyworth hy studh gwredhek, possybyl yw na veu nebes manylyon nowedhys.",
+       "metadata-help": "An restren ma a's teves kedhlow keworransel, dres lycklod keworrys dhyworth an kamera bysyel po an skanyer devnydhys rag hy gwruthyl po hy bysya. Mars yw chanjys an restren dhyworth hy studh gwredhek, possybyl yw na veu nebes manylyon nowedhys.",
        "metadata-expand": "Diskwedhes manylyon ystynnys",
        "metadata-collapse": "Kudha manylyon ystynnys",
        "exif-imagewidth": "Les",
        "namespacesall": "oll",
        "monthsall": "oll",
        "confirmemail": "Afydhya an drigva ebost",
-       "confirmemail_noemail": "Nyns eus trigva ebost da settyes y'gas [[Special:Preferences|dewisyansow devnydhyer]].",
+       "confirmemail_noemail": "Nyns eus trigva ebost da settyes y'gas [[Special:Preferences|dewisyow devnydhyer]].",
        "imgmultipageprev": "← folen gyns",
        "imgmultipagenext": "folen nessa →",
        "imgmultigo": "Mos",
        "specialpages-group-login": "Omgelmi / gwruthyl akont",
        "blankpage": "Folen wag",
        "tag-filter": "Sidhel [[Special:Tags|tagyow]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tagg|Taggys}}]]: $2)",
        "tags-edit": "chanjya",
        "dberr-problems": "Drog yw genen! An wiasva-ma a's teves kaletter teknogel.",
        "dberr-again": "Assayewgh gortos pols ha daskarga.",
        "logentry-move-move": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 heb gasa daskedyans",
        "logentry-move-move_redir": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 dres daskedyans",
+       "logentry-newusers-create": "{{GENDER:$2|Gwruthys}} veu an akont devnydhyer $1",
        "searchsuggest-search": "Hwilas",
        "searchsuggest-containing": "ynni...",
        "special-characters-group-latin": "Latin",
index 1c48612..aac336c 100644 (file)
@@ -22,7 +22,8 @@
                        "Žekřil71pl",
                        "לערי ריינהארט",
                        "아라",
-                       "Lesgles"
+                       "Lesgles",
+                       "StevenJ81"
                ]
        },
        "tog-underline": "Versores linea denotandi:",
        "nlinks": "$1 {{PLURAL:$1|nexus|nexus}}",
        "nmembers": "$1 {{PLURAL:$1|inest|insunt}}",
        "nrevisions": "$1 {{PLURAL:$1|emendatio|emendationes}}",
-       "nviews": "$1 {{PLURAL:$1|visa|visae}}",
        "lonelypages": "Paginae non annexae",
        "uncategorizedpages": "Paginae sine categoriis",
        "uncategorizedcategories": "Categoriae sine categoriis",
        "watchlisttools-view": "Mutationes paginarum observatarum inspicere",
        "watchlisttools-edit": "Indicem paginarum observatarum inspicere vel recensere",
        "watchlisttools-raw": "Indicem paginarum observatarum quasi textum recensere",
+       "hebrew-calendar-m1": "Tisri",
+       "hebrew-calendar-m2": "Hesuan",
+       "hebrew-calendar-m3": "Casleu",
+       "hebrew-calendar-m4": "Tebeth",
+       "hebrew-calendar-m5": "Sabat",
+       "hebrew-calendar-m8": "Iar",
+       "hebrew-calendar-m10": "Thammuz",
+       "hebrew-calendar-m11": "Ab",
+       "hebrew-calendar-m1-gen": "Tisri",
+       "hebrew-calendar-m2-gen": "Hesuan",
+       "hebrew-calendar-m3-gen": "Casleu",
+       "hebrew-calendar-m4-gen": "Tebeth",
+       "hebrew-calendar-m5-gen": "Sabat",
+       "hebrew-calendar-m8-gen": "Iar",
+       "hebrew-calendar-m10-gen": "Thammuz",
+       "hebrew-calendar-m11-gen": "Ab",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|disputatio]])",
        "version": "Versio",
        "version-specialpages": "Paginae speciales",
index 15210db..a5e8183 100644 (file)
@@ -10,7 +10,8 @@
                        "Taichi",
                        "Universal Life",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "StevenJ81"
                ]
        },
        "tog-underline": "Suliñar los atamientos:",
        "resetpass-submit-loggedin": "Kambiar kontrasenya",
        "resetpass-submit-cancel": "Anular",
        "passwordreset": "Restableser kontrasenya",
-       "passwordreset-legend": "Restableser kontrasenya",
        "passwordreset-username": "Nombre de usador:",
        "passwordreset-domain": "Dominio:",
        "passwordreset-email": "Adresso de letral:",
        "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-gen": "Tishre",
+       "hebrew-calendar-m2-gen": "Ḥeshvan",
        "duplicate-defaultsort": "'''Aviso:''' la klave primaria para ordenamiento \"$2\" anula la primera \"$1\"",
        "version": "Versión",
        "version-specialpages": "Pajinas espesiales",
index 27e745d..dd301a3 100644 (file)
        "passwordreset": "Passwuert zrécksetzen",
        "passwordreset-text-one": "Fëllt dëse Formulaire aus fir Äert Passwuert zréckzesetzen.",
        "passwordreset-text-many": "{{PLURAL:$1|Fëllt eent vun de Felder aus fir en temporäert Passwuert per E-Mail ze kréien.}}",
-       "passwordreset-legend": "Passwuert zrécksetzen",
        "passwordreset-disabled": "D'Zerécksetze vum Passwuert ass op dëser Wiki ausgeschalt.",
        "passwordreset-emaildisabled": "D'E-Mail-Funktioune goufen op dëser Wiki ausgeschalt.",
        "passwordreset-username": "Benotzernumm:",
        "changeemail-throttled": "Dir hutt zevill dacks versicht Iech anzeloggen.\nWaart w.e.g. $1 ier Dir et nach eng Kéier probéiert.",
        "resettokens": "Token zrécksetzen",
        "resettokens-no-tokens": "Et gëtt keng Tokens fir zréck ze setzen.",
-       "resettokens-legend": "Token zrécksetzen",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (aktuelle Wäert: $2)",
        "resettokens-watchlist-token": "Token fir de Webfeed (Atom/RSS) vun den [[Special:Watchlist|Ännerungen op Säite vun Ärer Iwwerwaachungslëscht]]",
        "yourdiff": "Ënnerscheeder",
        "copyrightwarning": "W.e.g. notéiert datt all Kontributiounen op {{SITENAME}} automatesch ënner der $2 (kuckt $1 fir méi Informatiounen) verëffentlecht sinn.\nWann Dir net wëllt datt är Texter vun anere Mataarbechter verännert, geläscht a weiderverdeelt kënne ginn, da setzt näischt heihinner.<br />\nDir verspriecht ausserdeem datt Dir dësen Text selwer verfaasst hutt, oder aus dem Domaine public oder ähnleche Ressource kopéiert hutt.\n'''DROT KEE COPYRECHTLECH GESCHÜTZTE CONTENU OUNI ERLAABNES AN!'''",
        "copyrightwarning2": "W.e.g. notéiert datt all Kontributiounen op {{SITENAME}} vun anere Benotzer verännert oder geläscht kënne ginn. Wann Dir dat net wëllt, da setzt näischt heihinner.<br />\nDir verspriecht ausserdeem datt Dir dësen Text selwer verfaasst hutt, oder aus dem Domaine public oder anere fräie Quelle kopéiert hutt. (cf. $1 fir méi Detailer). '''DROT KEE COPYRECHTLECH GESCHÜTZTE CONTENU AN!'''",
+       "editpage-cannot-use-custom-model": "De Modell vum Inhalt vun dëser Säit kann net geännert ginn.",
        "longpageerror": "'''FEELER: Den Text, den Dir Versicht ze späicheren, huet {{PLURAL:$1|1 Kilobyte|$1 Kilobytes}}. Dëst ass méi wéi den erlaabte Maximum vun  {{PLURAL:$2|1 Kilobyte|$2 Kilobytes}}''' Dofir kann den Text net gespäichert ginn.",
        "readonlywarning": "'''OPGEPASST: D'Datebank gouf wéinst Maintenanceaarbechte 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.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Eidelen Objet",
        "content-json-empty-array": "Eidel Tabell",
+       "duplicate-args-warning": "<strong>Opgepasst:</strong> [[:$1]] rifft [[:$2]] mat méi wéi engem Wäert fir de Parameter \"$3\" op. Nëmmen de leschte Wäert gëtt benotzt.",
        "duplicate-args-category": "Säiten, déi duebel Argumenter a Schablounenopriff gebrauchen",
        "expensive-parserfunction-warning": "'''Opgepasst:'' Dës Säit huet ze vill Ufroe vu komplexe Parserfunktiounen.\n\nEt däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|ass et $1 Ufro|sinn et $1 Ufroe}}.",
        "expensive-parserfunction-category": "Säiten, déi komplex Parserfunktiounen ze dacks opruffen",
        "badsig": "D'Syntax vun Ärer Ënnerschrëft ass net korrekt; iwwerpréift w.e.g. den HTML Code.",
        "badsiglength": "Är Ënnerschrëft ass ze laang.\nSi muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.",
        "yourgender": "Wéi wëllt Dir beschriwwe ginn?",
-       "gender-unknown": "Ech wëll dat net preziséieren",
+       "gender-unknown": "Wann Dir ernimmt gëtt da benotzt D'Software do wou et méiglech ass geschlechtsneutral Wierder",
        "gender-male": "Hien ännert Wikisäiten",
        "gender-female": "Si ännert Wikisäiten",
        "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.",
        "randomincategory-nopages": "Et gëtt keng Säiten an der [[:Category:$1]].",
        "randomincategory-category": "Kategorie:",
        "randomincategory-legend": "Zoufälleg Säit an der Kategorie",
+       "randomincategory-submit": "Lass",
        "randomredirect": "Zoufälleg Viruleedung",
        "randomredirect-nopages": "Am Nummraum $1 gëtt et keng Viruleedungen.",
        "statistics": "Statistik",
        "nmembers": "$1 {{PLURAL:$1|Member|Memberen}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|Member|Memberen}}",
        "nrevisions": "$1 {{PLURAL:$1|Versioun|Versiounen}}",
-       "nviews": "$1 {{PLURAL:$1|Offro|Offroen}}",
        "nimagelinks": "Benotzt op {{PLURAL:$1|enger Säit|$1 Säiten}}",
        "ntransclusions": "benotzt op {{PLURAL:$1|enger Säit|$1 Säiten}}",
        "specialpage-empty": "Dës Säit ass eidel.",
        "noindex-category-desc": "D'Säit gëtt net vu Botten indexéiert, well dat magescht Wuert <code><nowiki>__NOINDEX__</nowiki></code> dran ass a well se an engem Nummraum ass, an deem déi Markéierung erlaabt ass.",
        "index-category-desc": "D'Säit huet <code><nowiki>__INDEX__</nowiki></code> an ass an engem Nummraum, wou déi Markéierung erlaabt ass an dofir gëtt d'Säit vu Sichroboter indexéiert wou dat normalerweis net de Fall wier.",
        "post-expand-template-inclusion-category-desc": "D'Säit ass méi grouss wéi <code>$wgMaxArticleSize</code> nom expandéiere vun alle Schablounen, dofir goufen e puer Schablounen net expandéiert.",
+       "post-expand-template-argument-category-desc": "D'Säit ass méi grouss wéi <code>$wgMaxArticleSize</code> nom Expandéiere vun engem Argument vun enger Schabloun (eppes an dräifachen Akkoladen, wéi <code>{{{Foo}}}</code>).",
        "broken-file-category-desc": "D'Säit huet e futtise Link op e Fichier (e Link op en agebonnene Fichier wann et de Fichier net gëtt).",
        "hidden-category-category-desc": "D'Kategorie huet <code><nowiki>__HIDDENCAT__</nowiki></code> an hirer Säit drastoen, dat verhënnert datt se standardméisseg an der Këscht mat de Kategorielinken op der Säit gewise gëtt.",
        "trackingcategories-nodesc": "Keng Beschreiwung disponibel.",
        "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-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-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.",
        "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",
        "import-interwiki-history": "Importéier all d'Versioune vun dëser Säit",
        "import-interwiki-templates": "Mat alle Schablounen",
        "import-interwiki-submit": "Import",
+       "import-mapping-default": "Op déi Plazen importéieren déi als Standard definéiert sinn",
        "import-mapping-namespace": "Import an een Nummraum:",
        "import-mapping-subpage": "Als Ënnersäiten op dës Säit importéieren:",
        "import-upload-filename": "Numm vum Fichier:",
        "tooltip-pt-logout": "Ofmellen",
        "tooltip-pt-createaccount": "Et gëtt Iech geroden e Benotzerkont unzeleeën an Iech anzeloggen; dat ass awer net obligatoresch",
        "tooltip-ca-talk": "Diskussioun iwwer de Säiteninhalt",
-       "tooltip-ca-edit": "Dës Säit ka geännert ginn. Maacht vun der Méiglechkeet Gebrauch fir ze \"kucken ouni ofzespäicheren\" a kuckt ob alles an der Rei ass ier der ofspäichert.",
+       "tooltip-ca-edit": "Dës Säit änneren",
        "tooltip-ca-addsection": "En neien Abschnitt ufänken.",
        "tooltip-ca-viewsource": "Dës Säit ass gespaart. Nëmmen de Quelltext ka gewise ginn.",
        "tooltip-ca-history": "Vireg Versioune vun dëser Säit",
        "deletedwhileediting": "<strong>Opgepasst:</strong>Dës Säit gouf geläscht nodeem datt Dir ugefaang hutt se z'änneren!",
        "confirmrecreate": "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeem s datt där ugefaangen hutt drun ze schaffen. D'Begrënnung war: ''$2'' Bestätegt w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
        "confirmrecreate-noreason": "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit geläscht, nodeem s datt Dir ugefaangen hutt drun ze schaffen. Confirméiert w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
-       "recreate": "Erëm uleeën",
+       "recreate": "Nees uleeën",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Dës Säit aus dem Server-Cache läschen?",
        "confirm-purge-bottom": "Mécht de Cache vun enger Säit eidel a forcéiert d'Uweise vun der aktueller Versioun.",
        "version-libraries": "Installéiert Bibliothéiken",
        "version-libraries-library": "Bibliothéik",
        "version-libraries-version": "Versioun",
+       "version-libraries-license": "Lizenz",
+       "version-libraries-description": "Beschreiwung",
+       "version-libraries-authors": "Auteuren",
        "redirect": "Viruleedung duerch e Fichier, e Benotzer, eng Säit oder eng Versiouns-ID",
        "redirect-legend": "Viruleedung op ee Fichier oder eng Säit",
        "redirect-summary": "Dës Spezialsäit ass eng Viruleedung op e Fichier (Fichiersnumm uginn), eng Säit (Versiounsnummer uginn) oder eng Benotzersäit (numeresch Benotzeridentifikatioun uginn).\nGebrauch: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], oder [[{{#Special:Redirect}}/user/101]].",
        "tags-edit-revision-submit": "Ännerungen op {{PLURAL:$1|dës Versioun|$1 Versiounen}} uwennen",
        "tags-edit-success": "D'Ännerunge goufen applizéiert.",
        "tags-edit-failure": "D'Ännerunge konnten net applizéiert ginn: $1",
+       "tags-edit-none-selected": "Sicht mindestens eng Markéierung eraus déi dir dobäisetzen oder ewechhuele wëllt.",
        "comparepages": "Säite vergläichen",
        "compare-page1": "Säit 1",
        "compare-page2": "Säit 2",
        "revdelete-uname-unhid": "Benotzernumm net verstoppt",
        "revdelete-restricted": "Limitatioune fir Administrateuren ageschalt",
        "revdelete-unrestricted": "Limitatioune fir Administrateuren opgehuewen",
-       "logentry-block-block": "$1 {{GENDER:$2|huet}} {{GENDER:$4|$3}} fir eng Zäit vun $5 $6 gespaart",
+       "logentry-block-block": "$1 {{GENDER:$2|huet}} {{GENDER:$4|$3}} fir eng Zäit vu(n) $5 $6 gespaart",
        "logentry-block-unblock": "$1 {{GENDER:$2|huet}} d'Spär vum {{GENDER:$4|$3}} opgehuewen",
        "logentry-import-upload": "$1 {{GENDER:$2|huet}} $3 duerch Eropluede vun engem Fichier importéiert",
        "logentry-import-interwiki": "$1 huet $3 vun enger anerer Wiki {{GENDER:$2|importéiert}}",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
-       "special-characters-title-minus": "Minus-Zeechen"
+       "special-characters-title-minus": "Minus-Zeechen",
+       "mw-widgets-titleinput-description-new-page": "Säit gëtt et nach net",
+       "mw-widgets-titleinput-description-redirect": "viruleeden op $1"
 }
index d06846d..339c21d 100644 (file)
                        "Bonevarluri",
                        "Mogoeilor",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Mjbmr"
                ]
        },
-       "tog-underline": "هوم پیوند زیرخط دار:",
-       "tog-hideminor": "قام كردن ويرايشتيا كؤچك مئن آلشتيا تازه",
-       "tog-hidepatrolled": "قام كردن ويرايشتيا تیه دیار کرده مئن آلشتيا تازه",
-       "tog-newpageshidepatrolled": "بلگیا تیه دیار کرده نه مئن نوم گه بلگیا تازه قام کو",
-       "tog-extendwatchlist": "سیل برگه نه سی نشو دئن تمام آلشتیا واکو نه فقط سی بیشتر تازه باوا.",
-       "tog-usenewrc": "دسÙ\87 Ø¨Ù\86Û\8c Ø¢Ù\84شتÛ\8cا Ù\88ا Ø¨Ù\84Ú¯Ù\87 Ø¯ Ø¢Ù\84شتÛ\8cا ØªØ§Ø²Ù\87 Ù\88 Ø³Û\8cÙ\84 Ø¨رگ",
-       "tog-numberheadings": "سربÙ\84Ú¯Ù\87 Ø®Ù\88د Ø´Ù\85ارÙ\87 Ú¯Ø±",
-       "tog-showtoolbar": "نوار اوزار ويرايشت نشون بيه",
-       "tog-editondblclick": "بلگيا نه وا دوبار پورنين ويرايشت بكيد",
-       "tog-editsectiononrightclick": "بهرجا ویرایشت نه وا راس پورنین د بهرجا داسونیا کنشتگر کو",
-       "tog-watchcreations": "بلگیایی که مه راس کمه و جانیایایی که مه سوار کمه اضاف کو د سیل برگه مه",
-       "tog-watchdefault": "بلگیا و جانیایی که مه ویرایشت کمه اضاف کو د سیل برگم",
-       "tog-watchmoves": "بلگیاو جانیایی  که مه جاوه جا کمه د سیل برگم اضاف کو",
-       "tog-watchdeletion": "بلگیا و جانیایی که مه پاک کمه اضاف کو د سیل برگم",
-       "tog-watchrollback": "همه بلگه یا نه د جایی که مه د سیل برگم می کم اضاف کو.",
-       "tog-minordefault": "همه ویرایشتیا کؤچک نه وا پیش فرض بیئن نشو دار کو.",
-       "tog-previewontop": "پیش سیل نه دما جعوه ویرایشت نشو بیئه",
-       "tog-previewonfirst": "پیش سیل نه د اولی ویرایشت نشو بیئه",
-       "tog-enotifwatchlistpages": "اÙ\88سÙ\87 Ú©Ù\87 Û\8cÙ\87 Ú¯Ù\84 Ø¨Ù\84Ú¯Ù\87 Û\8cا Ø¬Ø§Ù\86Û\8cا Ø¯ Ø³Û\8cÙ\84 Ø¨Ø±Ú¯ Ù\85Ù\87 Ø¢Ù\84شت Ø¨Ù\88ئÙ\87 Ù\85Ù\86Ù\87 Ù\88ا Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø®Ù\88ر کو",
-       "tog-enotifusertalkpages": "د گاتی که بلگه گپسن کاریار آلشت پیدا کرد منه وا انجومانامه خور کو",
-       "tog-enotifminoredits": "همچنو اوسه که ویرایشتیا کؤچکی د بلگیا یا جانیایا انجوم بوئه منه خور کو",
-       "tog-enotifrevealaddr": "نشونی انجومانامه منه د انجومانامه اشگار نشو بیه",
-       "tog-shownumberswatching": "اÙ\86ازÙ\87 Ú©Ø§Ø±Û\8cارÛ\8cاÛ\8cÛ\8c Ú©Ù\87 Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ø¯Û\8cئÙ\86Ù\86 Ù\86Ø´Ù\88 Ø¨Û\8cÙ\87",
-       "tog-oldsig": "اÙ\85ضاÙ\8aÛ\8c Ù\87Ù\8aئش:",
-       "tog-fancysig": "وا امضا چی ویکی متن رفتار داشتو",
-       "tog-uselivepreview": "پیش سیل زنه وه کار بیئر",
-       "tog-forceeditsummary": "منه د گاتی که یه گل چکسه ویرایشت حالی وارد بوئه سریع خور کو",
-       "tog-watchlisthideown": "قام كو ويرايشت منه د",
-       "tog-watchlisthidebots": "ویرایشت یا بوت نه د سیل برگ قام کو",
-       "tog-watchlisthideminor": "قام كو ويرايشت کؤچک منه د",
-       "tog-watchlisthideliu": "ویرایشت یا کاریاریا وامئن سامونه نه د سیل برگ قام کو",
-       "tog-watchlisthideanons": "ویرایشت یا کاروریا نادیار نه د سیل برگ قام کو",
-       "tog-watchlisthidepatrolled": "ویرایش تیا د تی رس نه د سیل برگ قام کو",
-       "tog-ccmeonemails": "ورداشته انجومانامه یا منه که سی کاریاریا تر می فرسنم سیم کل کو",
-       "tog-diffonly": "بلگیایی که د ور گرته فرخیا هارن نشون نیه",
-       "tog-showhiddencats": "دسÙ\87 Ù\8aا Ù\82اÙ\85 Ø¨Ù\8aئÙ\86Ù\87 Ù\86Ø´Ù\88Ù\86 Ø¨Ù\8aÙ\87",
-       "tog-norollbackdiff": "Ù\81رخÛ\8cا Ù\86Ù\87 Ø¯ Ø¨Û\8cÙ\86 Ø¨Ù\88رÛ\8cت Ù\86Ù\87ا Û\8cÙ\87 Ú¯Ù\84 Ø¹Ù\82Ù\88 Ú¯Ø±Ø¯ Ú©Ø±Ø¯Ù\86",
-       "tog-useeditwarning": "د گاتی که آلشتیا اماییه نبیه د بلگه ویرایشت وه جا می نم خورم کو",
-       "tog-prefershttps": "همیشه د گاتی که مه وامئن هئم د ارتواط امن وه کار بیئر",
-       "underline-always": "هميشه",
-       "underline-never": "هيژوخت",
-       "underline-default": "پوسه یا دوارته نیئر پیش فرض",
-       "editfont-style": "راساگه فونت شلک نه ویرایشت کو",
-       "editfont-default": "دوارته نیئر پیش بینی بیه",
-       "editfont-monospace": "فونت تک بلگه ای",
-       "editfont-sansserif": "سان سریف فونت",
-       "editfont-serif": "فونت سريف",
-       "sunday": "يه شمه",
-       "monday": "دوشمه",
-       "tuesday": "سه شمه",
-       "wednesday": "چارشمه",
-       "thursday": "پن شمه",
-       "friday": "جÙ\85Ù\87",
-       "saturday": "شمه",
-       "sun": "يه شمه",
-       "mon": "دوشمه",
-       "tue": "سه شمه",
-       "wed": "چارشمه",
-       "thu": "پن شمه",
-       "fri": "جÙ\85Ù\87",
-       "sat": "شمه",
-       "january": "جانويه",
-       "february": "فوریه",
-       "march": "Ù\85ارش",
-       "april": "آبريل",
-       "may_long": "Ù\85ا",
-       "june": "جوئن",
-       "july": "جولای",
-       "august": "اگوست",
-       "september": "سپتامر",
-       "october": "اÙ\83تور",
-       "november": "نوامر",
-       "december": "دسامر",
-       "january-gen": "جانويه",
-       "february-gen": "فوريه",
-       "march-gen": "Ù\85ارش",
-       "april-gen": "آوريل",
-       "may-gen": "Ù\85ا",
-       "june-gen": "جوئن",
-       "july-gen": "جولای",
-       "august-gen": "اگوست",
-       "september-gen": "سپتامر",
-       "october-gen": "اÙ\83تÙ\88ر",
-       "november-gen": "نوامر",
-       "december-gen": "دسامر",
-       "jan": "جانویه",
-       "feb": "فوریه",
-       "mar": "Ù\85ارش",
-       "apr": "آبريل",
-       "may": "Ù\85ا",
-       "jun": "جوئن",
-       "jul": "جÙ\88Ù\84ا",
-       "aug": "اÙ\88گوست",
-       "sep": "سپتامر",
-       "oct": "اÙ\83تÙ\88ر",
-       "nov": "نوامر",
-       "dec": "دسامر",
-       "january-date": "جانويه $1",
-       "february-date": "فوريه  $1",
+       "tog-underline": "هوم پئیڤأند زیرخأط دار:",
+       "tog-hideminor": "قام کئردئن ڤیرایشتیا کوچئک مین آلئشتیا تازە",
+       "tog-hidepatrolled": "قام کئردئن ڤیرایشتیا تیە دیار کئردە مین آلئشتیا تازە",
+       "tog-newpageshidepatrolled": "بألگە یا تیە دیار کئردە نە مئن نومگە بألگە یا تازە قام کو",
+       "tog-extendwatchlist": "سئیل بأرگە نە سی نئشوٙ دأئن تأموٙم آلئشتیا ڤا کو نە فأقأط سی بیشتئر تازە باڤیا.",
+       "tog-usenewrc": "دأسÛ\95 Ø¨Ø£Ù\86Û\8c Ø¢Ù\84ئشتÛ\8cا Ú¤Ø§ Ø¨Ø£Ù\84Ú¯Û\95 Ø¯ Ø¢Ù\84ئشتÛ\8cا ØªØ§Ø²Û\95 Ù\88 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£رگ",
+       "tog-numberheadings": "سأربأÙ\84Ú¯Û\95 Ø®Ù\88د Ø´Ù\85ارئشت Ú©Ù\88",
+       "tog-showtoolbar": "نأڤار أڤزار ڤیرایئشت نە نئشو بیە",
+       "tog-editondblclick": "بألگە یا نە ڤا د نۊ پوٙرنیئن ڤیرایئشت بأکیت",
+       "tog-editsectiononrightclick": "بأرجا ڤیرایئشت نە ڤا راس پوٙرنییئن د بأرجا داسوٙنیا کونئشتگأر کو",
+       "tog-watchcreations": "بألگە یایی کئ مئ رأڤأندیاری کئمە و جانیایی کئ مئ سوڤار کئمە ئضاف کو د سئیل بأرگە مئ",
+       "tog-watchdefault": "بألگە یایی کئ مئ رأڤأندیاری کئمە و جانیایی کئ مئ سوڤار کئمە ئضاف کو د سئیل بأرگە مئ",
+       "tog-watchmoves": "بألگە یایی و جانیایی کئ مئ جا ڤئ جا کئمە ئضاف کو د سئیل بأرگە مئ",
+       "tog-watchdeletion": "بألگە یایی و جانیایی کئ مئ پاکسا کئمە ئضاف کو د سئیل بأرگە مئ",
+       "tog-watchrollback": "هأمە بألگە یا نە د جایی کئ مئ می رئم ڤأ دئماتأر د د سئیل بأرگئم ئضاف کو.",
+       "tog-minordefault": "هأمە ڤیرایئشتیا کوچئک نە ڤا حال و بار پیش فأرض بییئن نئشوٙ دار کو.",
+       "tog-previewontop": "پیش سئیل نە دئما جأڤە ڤیرایئشت نئشوٙ بییە",
+       "tog-previewonfirst": "پیش سئیل نە د أڤألی ڤیرایئشت نئشوٙ بییە",
+       "tog-enotifwatchlistpages": "ئÙ\88سئ Ú©Ø¦ Û\8cئ Ú¯Ø¦Ù\84 Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا Ø¬Ø§Ù\86Û\8cا Ø¯ Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ø±Ú¯Ø¦ Ù\85ئ Ø¢Ù\84ئشت Ø¨Ù\88Ù\99Ù\87 Ù\85ئÙ\86Û\95 Ú¤Ø§ Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ø®Ø£Ú¤Ø£ر کو",
+       "tog-enotifusertalkpages": "د گاتی کئ بألگە گأپئسن کاریار آلشت کاری بی مئنە ڤا أنجومانامە خأڤأر کو",
+       "tog-enotifminoredits": "هأمچئنی ئوسئ کئ ڤیرایئشتیا کوچئکی د بألگە یا یا جانیایا أنجوم بوە مئنە ڤارئسیاری بأک",
+       "tog-enotifrevealaddr": "تیر نئشوٙن أنجومانامە مئنە د أنجومانامە دیارکو دیاری بأک",
+       "tog-shownumberswatching": "Ø£Ù\86ازÛ\95 Ú©Ø§Ø±Û\8cارÛ\8cاÛ\8cÛ\8c Ú©Ø¦ Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ø¯Û\8cئÙ\86 Ù\87ئÙ\86 Ø¯Û\8cارÛ\8c Ø¨Ø£Ú©",
+       "tog-oldsig": "ئÙ\85ضاÛ\8cÛ\8c Ù\87Û\8c:",
+       "tog-fancysig": "ڤا ئمضا چی یئ گئل ڤیکی نیسئسە رأفتار بأک",
+       "tog-uselivepreview": "پیش سئیل زئنە ڤئ کار بئیر",
+       "tog-forceeditsummary": "مئنە د گاتی کئ یئ گئل چئکئسە ڤیرایئشت حالی میا ڤامین ڤئ یە توف کونوٙ ڤارسیاری بأک",
+       "tog-watchlisthideown": "ڤیرایئشتیا مئنە د سئیل بأرگ نئهوٙ بأک",
+       "tog-watchlisthidebots": "ڤیرایئشتیا بوت نە د سئیل بأرگ نئهوٙ بأک",
+       "tog-watchlisthideminor": "ڤیرایئشیا کوچئک نە د سئیل بأرگ نئهوٙ بأک",
+       "tog-watchlisthideliu": "ڤبرایشتیایی نە کئ ڤئ دأس کاریاریا ڤامین ئوٙماە أنجوم گئرئتە د سئیل بأرگ نئهوٙ بأک",
+       "tog-watchlisthideanons": "ڤیرایئشتیا کاریاریایی کئ نادیارئن د سئیل بأرگ نئهوٙ بأک",
+       "tog-watchlisthidepatrolled": "ڤیرایشتیایی که هان د تیە رأس د سئیل بأرگ قام کو",
+       "tog-ccmeonemails": "ڤورداشتە یا أنجومانامه یا مئنە کئ سی کاریاریا هأنی کئل می کئم سیم کئل بأک",
+       "tog-diffonly": "بألگە یایی کئ د ڤأر گئرتە فأرخیا هارئن دیاریشوٙ بأک",
+       "tog-showhiddencats": "دأسÛ\95 Û\8cا Ù\86ئÙ\87Ù\88Ù\99 Ø¨Û\8cÛ\8cØ£Ù\86ئ Ø¯Û\8cارÛ\8c Ø¨Ø£Ú©",
+       "tog-norollbackdiff": "Ù\81أرخÛ\8cا Ù\86Û\95 Ø¯ Û\8cئ Ú¯Ø¦Ù\84 Ú¤Ø§Ø¯Ø¦Ù\85ا Ø±Ø£ØªØ¦Ù\86 Ø¯ Ø¨Ø¦Û\8cÙ\86 Ø¨Ù\88رÛ\8cت",
+       "tog-useeditwarning": "د گاتی کئ آلئشتیا ئمایە نأبینە د بألگە ڤیرایئشت ڤئ جا مئ نئم مئنە ڤارئسیاری بأک",
+       "tog-prefershttps": "هأمیشە د گاتی کئ مئ هام د ساموٙنە پئیڤأند أمن نە ڤئ کار بئیر",
+       "underline-always": "هأمیشە",
+       "underline-never": "هیژڤأخت",
+       "underline-default": "پوٙسە یا دوڤارتە نییأر پیش فأرض",
+       "editfont-style": "راساگه فونت شیڤات نە ڤیرایئشت کو",
+       "editfont-default": "دوڤارتە نییأر نئها بینی بییە",
+       "editfont-monospace": "فونت تأک بألگە یی",
+       "editfont-sansserif": "فونت سان سئریف",
+       "editfont-serif": "Ù\81Ù\88Ù\86ت Ø³Ø¦Ø±Ù\8aÙ\81",
+       "sunday": "يئ شأمە",
+       "monday": "دۊشأمە",
+       "tuesday": "سئ شأمە",
+       "wednesday": "چارشأمە",
+       "thursday": "پأن شأمە",
+       "friday": "جÙ\88Ù\85Û\95",
+       "saturday": "شأمە",
+       "sun": "یئ شأمە",
+       "mon": "دۊشأمە",
+       "tue": "سئ شأمە",
+       "wed": "چارشأمە",
+       "thu": "پأن شأمە",
+       "fri": "جÙ\88Ù\85Û\95",
+       "sat": "شأمە",
+       "january": "جانڤیە",
+       "february": "فئڤریە",
+       "march": "Ù\85ارس",
+       "april": "آڤریل",
+       "may_long": "Ù\85ئÛ\8c",
+       "june": "جوٙأن",
+       "july": "جÙ\88Ù\99Ù\84اÛ\8c",
+       "august": "Ø¢گوست",
+       "september": "سئپتامر",
+       "october": "ئÙ\88Ú©تور",
+       "november": "نوڤامر",
+       "december": "دئساÙ\85ر",
+       "january-gen": "جانڤیە",
+       "february-gen": "فئڤریە",
+       "march-gen": "Ù\85ارس",
+       "april-gen": "آڤریل",
+       "may-gen": "Ù\85ئÛ\8c",
+       "june-gen": "جوٙأن",
+       "july-gen": "جÙ\88Ù\99Ù\84اÛ\8c",
+       "august-gen": "Ø¢گوست",
+       "september-gen": "سئپتامر",
+       "october-gen": "ئÙ\88کتÙ\88Ú¤ر",
+       "november-gen": "نوڤامر",
+       "december-gen": "دئساÙ\85ر",
+       "jan": "جانڤیە",
+       "feb": "فئڤریە",
+       "mar": "Ù\85ارس",
+       "apr": "آڤریل",
+       "may": "Ù\85ئÛ\8c",
+       "jun": "جوٙأن",
+       "jul": "جÙ\88Ù\99Ù\84اÛ\8c",
+       "aug": "Ø¢گوست",
+       "sep": "سئپتامر",
+       "oct": "ئÙ\88کتÙ\88Ú¤ر",
+       "nov": "نوڤامر",
+       "dec": "دئساÙ\85ر",
+       "january-date": "جانڤیە $1",
+       "february-date": "فئڤریە $1",
        "march-date": "مارس  $1",
-       "april-date": "آوريل $1",
-       "may-date": "Ù\85ا $1",
-       "june-date": "جوئن $1",
-       "july-date": "جÙ\88Ù\84اÙ\8a  $1",
-       "august-date": "اÙ\88ت  $1",
-       "september-date": "سپتامر $1",
-       "october-date": "اÙ\83تÙ\88ر  $1",
-       "november-date": "نوامر  $1",
-       "december-date": "دسامر $1",
-       "pagecategories": "{{PLURAL:$1|دسه|دسه يا}}",
-       "category_header": "بلگيا مئن دسه \"$1\"",
-       "subcategories": "زÙ\8aردسÙ\87 Ù\8aا",
-       "category-media-header": "وارسگر د دسه \"$1\"",
-       "category-empty": "اÛ\8c Ø¯Ø³Ù\87 Ù\88اÙ\82عÙ\86 Ø¯Ù\87 Ù\88ر Ú¯Ø±ØªÙ\87 Ù\87Û\8cÚ\98 Ø¨Ù\84Ú¯Ù\87 Ø§Û\8c Û\8cا Ù\88ارسگر Ø§ی نی",
-       "hidden-categories": "{{PLURAL:$1|دستÙ\87 Ù\82اÙ\85 Ø¨Ù\8aÙ\87|دستÙ\87 Ù\8aا Ù\82اÙ\85 Ø¨Ù\8aÙ\87}}",
-       "hidden-category-category": "دسÙ\87 Û\8cا Ù\82اÙ\85 Ø¨Û\8cÙ\87",
-       "category-subcat-count": "{{جمی:$2|ای دسه فقط زیر دسه دینداگر هان دش .|ای دسه {{جمی:$1| زیردسه|$1 زیردسه یا}}هئ , وه در د $2 کل.}}",
-       "category-subcat-count-limited": "اÛ\8c Ø¯Ø³Ù\87 Ù\88ا Ø¯Ù\85 {{جÙ\85Û\8c:$1|زÛ\8cردسÙ\87|$1زÛ\8cردسÙ\87 Û\8cا}} Ø¨Ù\88ئÙ\87",
-       "category-article-count": "{{جمی:$2|ای دسه ده ور گرته بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, وه در $2 کل.}}",
-       "category-article-count-limited": "نها {{جمی:$1|بلگه هئ|$1بلگیا هئن}} د دسه ایسنی .",
-       "category-file-count": "{{جمی:$2|ای دسه فقط د ور گرته جانیا نهایی هئ file.| نهایی {{جمی:$1|جانیا هئ|$1 جانیایا هئن}} د ای دسه, وه در د کل $2 .}}",
-       "category-file-count-limited": " {{جمی:$1|[جانیا هئ|1$جانیایا هئن}}نهایی هان د دسه ایسنی.",
-       "listingcontinuesabbrev": "دÙ\85اÙ\84Ù\87",
-       "index-category": "بلگيا سيائه دار",
-       "noindex-category": "بلگيا بی سيائه",
-       "broken-file-category": "بلگیایی که هوم پیوند جانیایا اشکسه دارن",
+       "april-date": "آڤریل $1",
+       "may-date": "Ù\85ئÛ\8c $1",
+       "june-date": "جوٙأن $1",
+       "july-date": "جÙ\88Ù\99Ù\84اÛ\8c $1",
+       "august-date": "Ø¢Ú¯Ù\88ست $1",
+       "september-date": "سئپتامر $1",
+       "october-date": "ئÙ\88کتÙ\88ڤر $1",
+       "november-date": "نوڤامر $1",
+       "december-date": "دئساÙ\85ر $1",
+       "pagecategories": "{{PLURAL:$1|}}{{PLURAL:$1|دأسە|دأسە يا}}",
+       "category_header": "بألگە یا مین دأسە \"$1\"",
+       "subcategories": "زÙ\8aردأسÛ\95 Û\8cا",
+       "category-media-header": "ڤارئسگأر د دأسە \"$1\"",
+       "category-empty": "ئÛ\8c Ø¯Ø£Ø³Û\95 Ø¯ Ø±Ø§Ø³ØªØ£Ú©Û\8c Ø¯ Ú¤Ø£Ø± Ú¯Ø¦Ø±Ø¦ØªÛ\95 Ù\87Û\8cÚ\86 Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا Ú¤Ø§Ø±Ø¦Ø³Ú¯Ø£Ø±ی نی",
+       "hidden-categories": "{{PLURAL:$1|دأسÛ\95 Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95|دأسÛ\95 Û\8cا Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95}}",
+       "hidden-category-category": "دأسÛ\95 Û\8cا Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95",
+       "category-subcat-count": "{{PLURAL:$2|ئی دأسە فأقأط زیردأسە یا دئماگئر هان دئش.|ئی دأسە {{PLURAL:$1|زیردأسە|$1 زیردأسە یا}}هئ , ڤئ دأر د $2 کول.}}",
+       "category-subcat-count-limited": "ئÛ\8c Ø¯Ø£Ø³Û\95 Ù\87ا Ø¯ {{PLURAL:$1|زÛ\8cردأسÛ\95|$1 Ø²Û\8cردأسÛ\95 Û\8cا}} Û\8cÛ\8c Ú©Ø¦ Ù\87ا Ú¤Ø¦ Ø¯Ù\88Ù\85ئشÙ\88Ù\99",
+       "category-article-count": "{{PLURAL:$2|ئی دأسە د ڤأرگئرئتە بألگە نئهاییە.| {{PLURAL:$1| بألگە هی|$1 بألگە یا هئن}} د ئی دأسە، ڤئ دأر د $2 کول.}}",
+       "category-article-count-limited": "نئها {{PLURAL:$1|بألگە هی|$1بألگە یا هئن}} د دأسە ئیسئنی.",
+       "category-file-count": "{{PLURAL:$2|ئی دأسە فأقأط د ڤأرگئرئتە جانیا نئهاییە.| نئهایی {{PLURAL:$1|جانیا هی|$1 جانیایا هین}} د ئی دأسە، ڤئ دأر د کول $2 .}}",
+       "category-file-count-limited": " {{PLURAL:$1|[جانیا هی|1$جانیایا هین}} نئهایی هان د دأسە ئیسئنی.",
+       "listingcontinuesabbrev": "دÙ\88Ù\85اÙ\84Û\95",
+       "index-category": "بألگە یا سیاە دار",
+       "noindex-category": "بألگە یا بی سیاە",
+       "broken-file-category": "بألگە یایی کئ هوم پئیڤأند جانیایا ئشگئسئ نە دارئن",
        "categoryviewer-pagedlinks": "($1) ($2)",
-       "about": "دبارÙ\87",
-       "article": "Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¨Ù\84Ú¯Ù\87",
-       "newwindow": "(نيمدری  تازه وا کو)",
-       "cancel": "اÙ\86جÙ\88Ù\85 Ø´Û\8cÙ\88سن",
-       "moredotdotdot": "بيشتر",
-       "morenotlisted": "اÛ\8c Ù\86Ù\88Ù\85جا Ù\83اÙ\85Ù\84 Ù\86بÙ\8aÙ\87",
-       "mypage": "بلگه",
-       "mytalk": "چك چنه",
-       "anontalk": "دبارÙ\87 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Û\8c Ø¢Û\8c Ù¾Û\8c Ù\82صÙ\87 Ø¨Ù\83Ù\8aد",
-       "navigation": "ناوجوری",
+       "about": "دئبارÛ\95",
+       "article": "Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Û\8cا Ø¨Ø£Ù\84Ú¯Û\95",
+       "newwindow": "(د یئ گئل نیمدأری تازە ڤاش کو)",
+       "cancel": "Ø£Ù\86جÙ\88Ù\85 Ø´Û\8cڤئسئن",
+       "moredotdotdot": "بیشتئر",
+       "morenotlisted": "ئÛ\8c Ù\86Ù\88Ù\85Ú¯Û\95 Ú©Ø§Ù\85ئÙ\84 Ø¨Û\8cÛ\8cÛ\95.",
+       "mypage": "بألگە",
+       "mytalk": "چأک چئنە",
+       "anontalk": "دئبارÛ\95 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø¦Û\8c Ø¢Û\8c Ù¾Û\8c Ù\82ئسÛ\95 Ø¨Ø£Ú©Û\8cت",
+       "navigation": "ناڤجوری",
        "and": "&#32;و",
-       "qbfind": "فهمسن،جسن",
-       "qbbrowse": "Ù\82رض Ú¯Ø±Øªن",
-       "qbedit": "ويرايشت",
-       "qbpageoptions": "اÛ\8c Ø¨Ù\84Ú¯Ù\87",
-       "qbmyoptions": "بلگيا مه",
-       "faq": "اÙ\81 Ø§Û\8c Ù\83Ù\8aÙ\88",
-       "faqpage": "پروجه:اف اي كيو",
-       "actions": "جمشت",
-       "namespaces": "نوم ورگه یا",
-       "variants": "Ø¢Ù\84شتگریا",
-       "navigation-heading": "Ù\85Ù\86Ù\88 Ù\86اÙ\88گشتÙ\86",
-       "errorpagetitle": "غلط",
-       "returnto": "ورگشت وه $1.",
+       "qbfind": "ڤارئسدار بییئن",
+       "qbbrowse": "Ù\82أرض Ú¯Ø¦Ø±Ø¦ØªØ¦ن",
+       "qbedit": "ڤیرایئشت",
+       "qbpageoptions": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95",
+       "qbmyoptions": "بألگە یا مئ",
+       "faq": "ئÙ\81 Ø¦Û\8c Ú©Û\8cÙ\88Ù\99",
+       "faqpage": "پوروٙجە: ئف ئی کیوٙ",
+       "actions": "کونئشتکاریا",
+       "namespaces": "نوم ڤأرگە یا",
+       "variants": "Ø¢Ù\84ئشگأریا",
+       "navigation-heading": "Ù\86Ù\88Ù\85 Ø¬Ø§Ú¯Û\95 Ù\86اڤگأردÛ\8c",
+       "errorpagetitle": "غألأط",
+       "returnto": "ڤورگأشتئن د $1.",
        "tagline": "د {{SITENAME}}",
        "help": "هومياری",
-       "search": "پی چوری",
-       "searchbutton": "پی جوری",
+       "search": "پئی جوٙری",
+       "searchbutton": "پئی جوٙری",
        "go": "رو",
        "searcharticle": "رو",
-       "history": "ويرگار بلگه",
-       "history_short": "ويرگار",
-       "updatedmarker": "د Ø¢Ø®Ø±Û\8cÙ\86 Ø¯Û\8cئÙ\86 Ù\85Ù\87 Ù\88Ù\87 Ù\87Ù\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c کو",
-       "printableversion": "نسقه پلا بيئنی",
-       "permalink": "هوم پیوند هميشئی",
-       "print": "پلا كردن",
+       "history": "ڤیرگار بألگە",
+       "history_short": "ڤیرگار",
+       "updatedmarker": "د Ø¢Ø®Ø¦Ø±Û\8c Ø¯Û\8cÛ\8cئÙ\86 Ù\85ئÙ\86Û\95 Ú¤Ø¦ Ù\87Ù\86Ú¯Ù\88Ù\85 کو",
+       "printableversion": "نوسقە پئلا بیئنی",
+       "permalink": "هوم پئیڤأند هأمیشئ یی",
+       "print": "چاپ گئرئتئن",
        "view": "ديئن",
        "view-foreign": "د $1 نه بوینیت",
-       "edit": "ويرايشت",
-       "edit-local": "توضیح ولات نشینی نه ویرایشت بکیت",
-       "create": "راس Ù\83ردن",
-       "create-local": "یه گل توضیح ولات نشینی اضاف بکیتو",
-       "editthispage": "ويرايشت ای بلگه",
-       "create-this-page": "راس Ù\83ردÙ\86 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87",
-       "delete": "پاکسا كردن",
-       "deletethispage": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ù¾Ø§Ú©Ø³Ø§ Ø¨Ù\83Ù\8aد",
-       "undeletethispage": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ù¾Ø§Ú©Ø³Ø§ Ù\86Ù\83Ù\8aد",
-       "undelete_short": "زنه کردن {{جمی:$1|یه گل ویرایشت|$1 ویرایشتیا}}",
-       "viewdeleted_short": "بوینیت {{[جمی:$1|یه گل ویرایشت پاکسا بیه|$1ویرایشتیا پاکسا بیه}}",
-       "protect": "پر Ù\88 Ù¾Û\8cÙ\85 Ø¨Ù\83Ù\8aد",
-       "protect_change": "Ø¢Ù\84شت Ø¨Ù\83Ù\8aد",
-       "protectthispage": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ù¾Ø± Ù\88 Ù¾Û\8cÙ\85 Ø¨Ù\83Ù\8aد",
-       "unprotect": "پر و پیم کردن نه آلشت بکیت",
-       "unprotectthispage": "پر Ù\88 Ù¾Û\8cÙ\85 Ú©Ø±Ø¯Ù\86 Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¢Ù\84شت Ø¨Ù\83Ù\8aد",
-       "newpage": "بلگه نو",
-       "talkpage": "دبارÙ\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\82صÙ\87 Ø¨Ù\83Ù\8aد",
-       "talkpagelinktext": "چک چنه",
-       "specialpage": "بلگه ويجه",
-       "personaltools": "اÙ\88زارÙ\8aا Ø´صقی",
-       "articlepage": "دÙ\8aئÙ\86 Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¨Ù\84Ú¯Ù\87",
-       "talk": "گپ",
+       "edit": "ڤیرایئشت",
+       "edit-local": "توضی ڤولات نئشینی نە ڤیرایئشت بأکیت",
+       "create": "راس Ù\83ئردئن",
+       "create-local": "بئ گئل توضی ڤولات نئشینی ئضاف بأکیت",
+       "editthispage": "ئی بألگە نە ڤیرایئشت بأکیت",
+       "create-this-page": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø±Ø§Ø³ Ø¨Ø£Ú©Û\8cت",
+       "delete": "پاکسا کئردئن",
+       "deletethispage": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ù¾Ø§Ú©Ø³Ø§ Ø¨Ø£Ú©Û\8cت",
+       "undeletethispage": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ù¾Ø§Ú©Ø³Ø§ Ù\86Ø£Ú©Û\8cت",
+       "undelete_short": "ناپاکسا کئردئن {{PLURAL:$1|یئ گئل ڤیرایئشت|$1 ڤیرایئشتیا}}",
+       "viewdeleted_short": "{{PLURAL:$1|}}سئیل بأکیت{{[PLURAL:$1|یئ گئل ڤیرایئشت پاکسا بییە|$1ڤیرایئشتیا پاکسا بیینە}}",
+       "protect": "پأر Ù\88 Ù¾Û\8cÙ\85 Ø¨Ø£Ú©Û\8cت",
+       "protect_change": "Ø¢Ù\84ئشت Ø¨Ø£Ú©Û\8cت",
+       "protectthispage": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ù¾Ø£Ø± Ù\88 Ù¾Û\8cÙ\85 Ø¨Ø£Ú©Û\8cت",
+       "unprotect": "آلئشت دأئن پأر و پیم کاری",
+       "unprotectthispage": "پأر Ù\88 Ù¾Û\8cÙ\85 Ú©Ø§Ø±Û\8c Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø¢Ù\84ئشتکارÛ\8c Ø¨Ø£Ú©Û\8cت",
+       "newpage": "بألگە نۊ",
+       "talkpage": "دئبارÛ\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\82ئسÛ\95 Ø¨Ø£Ú©Û\8cت",
+       "talkpagelinktext": "چأک چئنە",
+       "specialpage": "بألگە ڤیجە",
+       "personaltools": "أڤزارÛ\8cا Ø´Ø£صقی",
+       "articlepage": "دÙ\8aئÙ\86 Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¨Ø£Ù\84Ú¯Û\95",
+       "talk": "گأپ",
        "views": "ديئنيا",
-       "toolbox": "اÙ\88زارÙ\8aا",
-       "userpage": "ديئن بلگه کاریار",
-       "projectpage": "ديئن بلگه پروجه",
-       "imagepage": "ديئن بلگه جانیا",
-       "mediawikipage": "ديئن بلگه پيغوم",
-       "templatepage": "ديئن بلگه چوئه",
-       "viewhelppage": "ديئن بلگه هومياری",
-       "categorypage": "ديئن بلگه دسه بنی",
-       "viewtalkpage": "ديئن چك چنه يا",
-       "otherlanguages": "د Ø²Ù\88Ù\86ا Ù\87نی",
-       "redirectedfrom": "(ورگشتن د$1)",
-       "redirectpagesub": "بلگه واگردونی",
-       "redirectto": "واگردونی سی:",
-       "lastmodifiedat": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 ØªØ§Ø²Ù\87 Ø§Ù\8aا Ù\88ضع Ø¢Ù\84شت Ø¨Ù\8aÙ\87 Ø¯ $1, د $2.",
-       "viewcount": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ù\82اÙ\88Ù\84 Ø¯Ø³ØªØ±Ø³Û\8c Ø¨Ù\8aÙ\87 {{PLURAL:$1|once|$1 times}}.",
-       "protectedpage": "بلگه پر و پیم بيه",
-       "jumpto": "پئرستÙ\86 Ø¯",
-       "jumptonavigation": "ناوجوری",
-       "jumptosearch": "پی جوری",
-       "view-pool-error": "د Ø¨Ø¯Ø¨Ø®ØªÛ\8cØ\8cاÛ\8cسÙ\86Û\8c Ø³Ø±Ù\88رÛ\8cا Ù\81رÙ\87 Ø´Ù\84Ù\88غ.\nکارÛ\8cارÛ\8cا Ù\81رÙ\87 Ø²Û\8cادÛ\8c Ù\85Û\8cÙ\87اÙ\86 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86Ù\86.\nÛ\8cÙ\87 Ú¯Ø±Û\8c ØµØ¨ Ø¨Ú©Û\8cتÙ\88 Ø¯Ù\85ا Û\8cÙ\87 Ú©Ù\87 Ù\85Û\8cÙ\87ات Ø¯Ù\88Ù\88ارÙ\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86یت.",
-       "generic-pool-error": "د Ø¨Ø¯Ø¨Ø®ØªÛ\8cØ\8cاÛ\8cسÙ\86Û\8c Ø³Ø±Ù\88رÛ\8cا Ù\81رÙ\87 Ø´Ù\84Ù\88غ.\nکارÛ\8cارÛ\8cا Ù\81رÙ\87 Ø²Û\8cادÛ\8c Ù\85Û\8cÙ\87اÙ\86 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86Ù\86.\nÛ\8cÙ\87 Ú¯Ø±Û\8c ØµØ¨ Ø¨Ú©Û\8cتÙ\88 Ø¯Ù\85ا Û\8cÙ\87 Ú©Ù\87 Ù\85Û\8cÙ\87ات Ø¯Ù\88Ù\88ارÙ\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86یت.",
-       "pool-timeout": "گات Ø³Û\8c ØªÛ\8cÙ\87 Ù\88Ù\87 Ø±Ù\87 Ù\85Ù\86Ù\86 Ø³Û\8c Ù\82Ù\84Ù\81 Ø¨Û\8cئÙ\86 ØªÙ\85Ù\88Ù\85 Ø¨Û\8c",
-       "pool-queuefull": "اÙ\85اÛ\8cÛ\8cÙ\87 Ú©Ø§Ø±Û\8c Ú¯Û\8c Ú¯Ø±ØªÙ\86 Ù¾Ø± Ø¨Û\8cÙ\87",
-       "pool-errorunknown": "خطا نادیار",
-       "pool-servererror": "Ù¾Ù\88Ù\84 Ø³Ù\86تر Ø®Ø°Ù\85تگÙ\87 Ø¯ Ø¯Ø³Ø±Ø³ Ù\86ئ($1).",
-       "poolcounter-usage-error": "خطار Ù\88Ù\87 Ú©Ø§Ø± Ú¯Ø±Øªن:$1",
-       "aboutsite": "دبارÙ\87 {{SITENAME}}",
-       "aboutpage": "پروجه:دباره",
-       "copyright": "Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯ Ø¯Ø³Ø±Ø³ Ù\87ئ Ø³Û\8c $1 Ù\85ر Ù\88Ù\87 Ø´Ù\84Ú© Ù\87Ù\86Û\8c Ù\86Ù\88شتÙ\87 Ø¨Ù\88ئÙ\87",
-       "copyrightpage": "{{ان اس:پروجه}}:کپی رایت",
-       "currentevents": "پيشومدل تازه باو",
-       "currentevents-url": "پروجه:پيشومدل تازه باو",
-       "disclaimers": "تیه پوشکاریا",
-       "disclaimerpage": "پروجه:منكر بيئن کلی",
-       "edithelp": "هومياری سی ويرايشت",
+       "toolbox": "أڤزارÛ\8cا",
+       "userpage": "ديئن بألگە کاریار",
+       "projectpage": "ديئن بألگە پوروجە",
+       "imagepage": "ديئن بألگە جانیا",
+       "mediawikipage": "ديئن بألگە پئيغوم",
+       "templatepage": "ديئن بألگە چوٙأ",
+       "viewhelppage": "ديئن بألگە هومیاری",
+       "categorypage": "ديئن بألگە دأسە بأنی",
+       "viewtalkpage": "دیئن چأک چئنە یا",
+       "otherlanguages": "د Ø²Ù\88Ù\99Ù\86ا Ù\87Ø£نی",
+       "redirectedfrom": "(ڤاگأردوٙنی د$1)",
+       "redirectpagesub": "بألگە ڤاگأردوٙنی",
+       "redirectto": "ڤاگأردوٙنی سی:",
+       "lastmodifiedat": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¦Û\8cسئÙ\86Û\8cا Ú¤Ø£Ø¶ Ø¢Ù\84Û\8cشت Ø¨Û\8cÛ\8cÛ\95 Ø¯ $1Ø\8c د $2.",
+       "viewcount": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\87ا Ø¯ Ø¯Ø£Ø³Ø±Ø¦Ø³Û\8c {{PLURAL:$1|Û\8cئ Ú¯Ø¦Ù\84|$1 Ú\86Ø£Ù\86 Ú¯Ø¦Ù\84}}.",
+       "protectedpage": "بألگە پأر و پیم کاری بییە",
+       "jumpto": "پئرئستئÙ\86 Ø¯:",
+       "jumptonavigation": "ناڤجوٙری",
+       "jumptosearch": "پئی جوٙری",
+       "view-pool-error": "د Ø¨Ø£Ø¯Ø¨Ø£Ø®ØªÛ\8cØ\8cئÛ\8cسئ Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ø¬Ø§Û\8cا Ù\81ئرÛ\95 Ø´Ù\88Ù\84Ù\88Ù\99غÛ\95.\nکارÛ\8cارÛ\8cا Ù\81ئرÛ\95 Û\8cÛ\8c Ù\85Û\8cÙ\87اÙ\86 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ú©Ø£Ù\86.\nدئÙ\85ا Û\8cÛ\95 Ú©Ø¦ Ù\85Û\8cÙ\87اÛ\8cت Ø¯ Ù\86Û\8a Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ú©Û\8cت Û\8cئ Ú¯Ù\88رÛ\8c Ø¢Ù\87ئرÛ\95 Ø¯Ø§Ø±Û\8c Ø¨Ø£Ú©یت.",
+       "generic-pool-error": "د Ø¨Ø£Ø¯Ø¨Ø£Ø®ØªÛ\8cØ\8cئÛ\8cسئ Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ø¬Ø§Û\8cا Ù\81ئرÛ\95 Ø´Ù\88Ù\84Ù\88Ù\99غÛ\95.\nکارÛ\8cارÛ\8cا Ù\81ئرÛ\95 Û\8cÛ\8c Ù\85Û\8cÙ\87اÙ\86 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ú©Ø£Ù\86.\nدئÙ\85ا Û\8cÛ\95 Ú©Ø¦ Ù\85Û\8cÙ\87اÛ\8cت Ø¯ Ù\86Û\8a Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ú©Û\8cت Û\8cئ Ú¯Ù\88رÛ\8c Ø¢Ù\87ئرÛ\95 Ø¯Ø§Ø±Û\8c Ø¨Ø£Ú©یت.",
+       "pool-timeout": "گات Ø¢Ù\87ئرÛ\95 Ø¯Ø§Ø±Û\8c Ø³Û\8c Ù\82Ù\88Ù\84Ù\81 Ú©Ø¦Ø±Ø¯Ø¦Ù\86 ØªØ£Ù\85Ù\88Ù\85 Ø¨Û\8cÛ\8cÛ\95",
+       "pool-queuefull": "ئÙ\85اÛ\8cÛ\95 Ú©Ø§Ø±Û\8c Ú¯Ø¦Û\8c Ú¯Ø¦Ø±Ø¦ØªØ¦Ù\86 Ù¾Ù\88ر Ø¨Û\8cÛ\8cÛ\95",
+       "pool-errorunknown": "خأطا Ù\86ادÛ\8cار",
+       "pool-servererror": "Ù¾Ù\88Ù\99Ù\84 Ø¦Ø´Ù\85ار Ø®Ø¦Ø°Ù\85أتگÛ\95 Ø¯ Ø¯Ø£Ø³Ø±Ø¦Ø³ Ù\86Û\8c($1).",
+       "poolcounter-usage-error": "خأطا Ú¤Ø¦ Ú©Ø§Ø± Ú¯Ø¦Ø±Ø¦ØªØ¦ن:$1",
+       "aboutsite": "دئبارÛ\95 {{SITENAME}}",
+       "aboutpage": "پوروجە:دئبارە",
+       "copyright": "Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Û\8cا Ù\87اÙ\86 Ø¯ Ø¯Ø£Ø³Ø±Ø¦Ø³ $1 Ù\85أر Û\8cÛ\95 Ú©Ø¦ Ú¤Ø¦ Û\8cئ Ú¯Ø¦Ù\84 Ø´Û\8cÚ¤Û\95 Ù\87Ø£Ù\86Û\8c Ù\86Û\8cسأÙ\86Û\95 Ø¨Ù\88Ù\99Û\95.",
+       "copyrightpage": "{{ns:project}}:کوپی رایت",
+       "currentevents": "روخ ڤأنیا ئیسئنی",
+       "currentevents-url": "پوروجە یا:روخ ڤأنیا ئیسئنی",
+       "disclaimers": "تیە پوٙشکاریا",
+       "disclaimerpage": "پوروجە: تیە پوٙشی کئردئن هأمە گئر",
+       "edithelp": "هومياری سی ڤیرایئشت",
        "helppage-top-gethelp": "هومياری",
-       "mainpage": "سرآسÙ\88Ù\86Ù\87",
-       "mainpage-description": "سرآسÙ\88Ù\86Ù\87",
-       "policy-url": "پروجه:خط و مش",
-       "portal": "درآسÙ\88Ù\86Ù\87 Ú©Ù\88Ù\85Ù\84Ù\87 Û\8cکی",
-       "portal-url": "پروجه:سرآسونه کومله یکی",
-       "privacy": "Ù¾Ù\88Ù\84تÛ\8cÚ© Ø±Ø§Ø²Û\8cÙ\86Ù\87 داری",
-       "privacypage": "پروجه: خط مشی رازینه کاری کردن",
-       "badaccess": "خطا :صÙ\84ادارÛ\8c Ú©Ù\88",
-       "badaccess-group0": "Ø´Ù\85ا ØµÙ\84ا Ø§Ù\86جÙ\88Ù\85 Ú©Ø§Ø±Û\8c Ú©Ù\87 Ø­Ø§Ø³ØªÛ\8cت Ù\86ارÛ\8cÙ\86",
-       "badaccess-groups": "اÛ\8c Ú©Ø§Ø±Û\8c Ú©Ù\87 Ø´Ù\85ا Ù\87استÛ\8cتÙ\87 Ø³Û\8c Ú©Ø§Ø±Û\8cارÛ\8cا Ø¯  {{جÙ\85Û\8c:$2|گرÙ\88\8cÚ©Û\8c Ø¯ Ú¯Ø±Ù\88Û\8cا}}: $1 Ú©Ù\85 Ø¨Û\8cÙ\87",
-       "versionrequired": "یه نسقه د حاستنیا ویکی وارسگر\n$1",
-       "versionrequiredtext": "نسقه $1 ویکی وارسگر سی وه کار گرتن د ای بلگه لازمه.\nوه نه بوینیت [[ویجه:نسقه|نسقه بلگه]].",
-       "ok": "خوئه",
+       "mainpage": "سأرآسÙ\88Ù\99Ù\86Û\95",
+       "mainpage-description": "سأرآسÙ\88Ù\99Ù\86Û\95",
+       "policy-url": "پوروجە:رأدیارجوٙری",
+       "portal": "دأرآسÙ\88Ù\99Ù\86Û\95 Ú©Ù\88Ù\85Ù\88Ù\84Û\95 Û\8cØ£کی",
+       "portal-url": "پوروجە:دأرآسوٙنە کومولە یأکی",
+       "privacy": "Ù¾Ù\88Ù\99Ù\84تÛ\8cÚ© Ø±Ø§Ø²Û\8cÙ\86Û\95 داری",
+       "privacypage": "پوروجە: رأگڤاری رازینە کاری کئردئن",
+       "badaccess": "خأطا ØµØ¦Ù\84ا Ø¯Ø£Ø¦Ù\86",
+       "badaccess-group0": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ø£Ù\86جÙ\88Ù\85 Ø¯Ø£Ø¦Ù\86 Ú©Ø§Ø±Û\8c Ù\86Û\95 Ú©Ø¦ Ù\85Û\8cÙ\87اÛ\8cت Ù\86ارÛ\8cت.",
+       "badaccess-groups": "ئÛ\8c Ú©Ø§Ø±Û\8c Ú©Ø¦ Ø´Ù\88Ù\85ا Ù\87استÛ\8cتÛ\95 Ø³Û\8c Ú©Ø§Ø±Û\8cارÛ\8cاÛ\8cÛ\8c Ú©Ø¦ Ù\87اÙ\86 Ø¯ {{PLURAL:$2|جأرغÛ\95\8cئ Ú¯Ø¦Ù\84 Ø¯ Ø¬Ø£Ø±ØºÛ\95 Û\8cا}}: $1 Ú©Ø£Ù\85 Ø¨Û\8cÛ\8cÛ\95.",
+       "versionrequired": "نوسقە $1 د مئدیاڤیکی هاستئنیە",
+       "versionrequiredtext": "نوسقە$1 مئدیاڤیکی سی ڤئ کار گئرئتئن د ئی بألگە هاستئنیە.\nسیئل ڤئ بأکیت[[Special:نوسقە|نوسقە بألگە]].",
+       "ok": "خوٙە",
        "pagetitle": "$1 - {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
-       "retrievedfrom": "د نو زنه بیه د\"$1\"",
-       "youhavenewmessages": "شما داريت $1($2)",
-       "youhavenewmessagesfromusers": "{{جمی:$4|شما }} $1 د {{جمی:$3|کاریار هنی|$3 کاریاریا}}داریتو($2).",
-       "youhavenewmessagesmanyusers": "Ø´Ù\85ا $1 Ø¯  Ù\81رÙ\87 Ú©Ø§Ø±Û\8cار Ø¯Ø§Ø±Ù\8aت ($2).",
-       "newmessageslinkplural": "{{جمی:$1|یه گل پیغوم تازه|999=پیغومیا تازه}}",
-       "newmessagesdifflinkplural": "آخر {{جÙ\85Û\8c:$1|Ø¢Ù\84شت|Ø¢Ù\84شتیا}}",
-       "youhavenewmessagesmulti": "Ø´Ù\85ا Û\8cÙ\87 Ú¯Ù\84 Ù¾Û\8cغÙ\88Ù\85 ØªØ§Ø²Ù\87 Ø¯ $1 Ø¯Ø§Ø±Û\8cتÙ\88",
-       "editsection": "ويرايشت",
-       "editold": "ويرايشت",
-       "viewsourceold": "سرÚ\86Ø´Ù\85Ù\87 Ù\86Ù\87 Ø¨Ù\88Ù\8aÙ\86Ù\8aت",
-       "editlink": "ويرايشت",
-       "viewsourcelink": "سرÚ\86Ø´Ù\85Ù\87 Ù\86Ù\87 Ø¨Ù\88Ù\8aÙ\86Ù\8aت",
-       "editsectionhint": "ويرايشت يه گل بهرجا:$1",
-       "toc": "Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 یا",
-       "showtoc": "Ù\86Ø´Ù\88 Ø¯ئن",
-       "hidetoc": "قام كردن",
-       "collapsible-collapse": "جم كردن",
-       "collapsible-expand": "وا كردن",
-       "confirmable-confirm": "{{GENDER:$1|Ø´Ù\85ا}} Ù\85طئÙ\85Ù\86یت?",
-       "confirmable-yes": "هری",
-       "confirmable-no": "نه",
-       "thisisdeleted": "دیئن یا ورگنين $1?",
+       "retrievedfrom": "د نۊ زئنە بیە د\"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|شوما داریت}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|شوما}} $1 د {{PLURAL:$3|کاریار هأنی|$3 کاریاریا}}داریت($2).",
+       "youhavenewmessagesmanyusers": "Ø´Ù\88Ù\85ا Ø¯ $1 Ù\81ئرÛ\95 Ú©Ø§Ø±Û\8cار Ø¯Ø§Ø±Û\8cت($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|یئ گئل پئیغوم تازە|999=پئیغومیا تازە}}",
+       "newmessagesdifflinkplural": "آخئر {{PLURAL:$1|Ø¢Ù\84ئشت|Ø¢Ù\84ئشتیا}}",
+       "youhavenewmessagesmulti": "Ø´Ù\88Ù\85ا Û\8cئ Ú¯Ø¦Ù\84 Ù¾Ø¦Û\8cغÙ\88Ù\85 ØªØ§Ø²Û\95 Ø¯ $1 Ø¯Ø§Ø±Û\8cت",
+       "editsection": "ڤیرایئشت",
+       "editold": "ڤیرایئشت",
+       "viewsourceold": "سئÛ\8cÙ\84 Ø¯ Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 Ø¨Ø£Ú©Û\8cت",
+       "editlink": "ڤیرایئشت",
+       "viewsourcelink": "سئÛ\8cÙ\84 Ø¯ Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 Ø¨Ø£Ú©Û\8cت",
+       "editsectionhint": "ڤیرایئشت یئ گئل بأرجا:$1",
+       "toc": "Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 یا",
+       "showtoc": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
+       "hidetoc": "قام کئردئن",
+       "collapsible-collapse": "جأم کئردئن",
+       "collapsible-expand": "گأپ کئلوٙن کئردئن",
+       "confirmable-confirm": "{{GENDER:$1|Ø´Ù\88Ù\85ا}} Ø¦Ø·Ù\85ئÙ\86Ù\88Ù\99Ù\86 Ø¯Ø§Ø±یت?",
+       "confirmable-yes": "Ù\87أرÛ\8c",
+       "confirmable-no": "نە",
+       "thisisdeleted": "دیئن یا ڤئرگأنییئن $1?",
        "viewdeleted": "دیئن$1?",
-       "restorelink": "{{جمی:$1|یه گل ویرایشت پاک بیه|$1 ویرایشتیا پاک بیه}}",
-       "feedlinks": "هوال حون:",
-       "feed-invalid": "نوع مشترک بین هوال حون نامعتور",
-       "feed-unavailable": "هوال حونیا د دسرس نئین",
-       "site-rss-feed": "هوال حون RSS سی $1",
-       "site-atom-feed": "هوال حون Atom سی $1",
-       "page-rss-feed": "هوال حون RSS سی «$1»",
-       "page-atom-feed": "هوال حون Atom سی $1",
+       "restorelink": "{{PLURAL:$1|یئ گئل ڤیرایئشت پاکسا بییە|$1 ڤیرایئشتیا پاکسا بییە}}",
+       "feedlinks": "هأڤال حوٙن:",
+       "feed-invalid": "جوٙر هومبأر بییە مینجا هأڤال حوٙن نادیار",
+       "feed-unavailable": "هأڤال حوٙنیا د دأسرئس نییئن",
+       "site-rss-feed": "هأڤال حوٙن RSS سی $1",
+       "site-atom-feed": "هأڤال حوٙن Atom سی $1",
+       "page-rss-feed": "هأڤال حوٙن RSS سی «$1»",
+       "page-atom-feed": "هأڤال حوٙن Atom سی $1",
        "feed-atom": "اتم",
        "feed-rss": "آر اس اس",
-       "red-link-title": "$1(بلگه وجود ناره)",
-       "sort-descending": "كم بيئن سرجاخود",
-       "sort-ascending": "زياد بيئن سرجاخود",
-       "nstab-main": "بلگه",
-       "nstab-user": "بلگه کاریار",
-       "nstab-media": "بلگه وارسگر",
-       "nstab-special": "بلگيا ويجه",
-       "nstab-project": "بلگه پروجه",
+       "red-link-title": "$1(بألگە ڤوجوٙد نارە)",
+       "sort-descending": "کأم بییئن سأرجاخود",
+       "sort-ascending": "زياد بيیئن سأرجادخود",
+       "nstab-main": "بألگە",
+       "nstab-user": "بألگە کاریار",
+       "nstab-media": "بألگە ڤارئسگأر",
+       "nstab-special": "بألگە ڤیجە",
+       "nstab-project": "بألگە پوروجە",
        "nstab-image": "جانیا",
-       "nstab-mediawiki": "پيغوم",
-       "nstab-template": "چوئه",
-       "nstab-help": "بلگه هومياری",
-       "nstab-category": "دسÙ\87",
-       "nosuchaction": "چنی کنشتگری وجود ناره",
-       "nosuchactiontext": "کاری که وا یو آر ال مشقص بیه معتور نئ.\nشایت شما یو آر ال نه دروس ننشتیته، یا یه گل هوم پیوند نادرست وارد بیه.\nوه شاید وه یه گل سیسریک د نرم افزار وه کار گرته بیه وا {{نوم مالگه}} هشاره داشتوه.",
-       "nosuchspecialpage": "چنی بلگه خاصی وجود ناره",
-       "nospecialpagetext": "<strong>Ø´Ù\85ا Ø³Û\8c Û\8cÙ\87 Ú¯Ù\84 Ø¨Ù\84Ú¯Ù\87 Ù\86اÙ\85عتÙ\88ر Ø¯Ø±Ø­Ø§Ø³Øª Ø¯Ø§Ø´ØªÛ\8cتÙ\87.</strong>\nÛ\8cÙ\87 Ú¯Ù\84 Ù\86Ù\88Ù\85 Ú¯Ù\87 Ø³Û\8c  Ø§Ø¹ØªÙ\88ار Ø¨Ù\84Ú¯Ù\87 Û\8cا Ø¨Ù\88ئÙ\87 Ø¯ [[Ù\88Û\8cجÙ\87:بÙ\84Ú¯Ù\87 Û\8cا Ù\88Û\8cجÙ\87|{{رÙ\82Ù\85:بÙ\84Ú¯Ù\87 Û\8cا Ù\88Û\8cجÙ\87}}]] Ù¾Û\8cدا Ø¨Ø§.",
-       "error": "خطا",
-       "databaseerror": "خطا Ø¯ Ø¬Ø§Ú¯Ù\87 Ø¯Ù\88Ù\86سÙ\85Ù\86Ù\8aا",
-       "databaseerror-text": "یه خطا جست کردن د رسینه جا پیش اوما.یه ممکنه یه در کار ونن د نرم اوزار پیش بیاره",
-       "databaseerror-textcl": "خطاجست گرتن رسینه جا دونسمنيا پيشومد كرده",
-       "databaseerror-query": "نوم گشتن: $1",
-       "databaseerror-function": "Ø¢Ù\84شت Ù\88ن:$1",
-       "databaseerror-error": "خطا: $1",
-       "laggedslavemode": "زنهار:بلگه شايت د ور گرینه وه هنگوم سازی تازه باو نبوئه",
-       "readonly": "جاگÙ\87 Ø¯Ù\88Ù\86سÙ\85Ù\86Ù\8aا Ø¨Ø³Ù\87 Ø¨Ù\8aÙ\87",
-       "enterlockreason": "دلیل قلف کردن نه بنیست،یه گاتی سی وا کردن قلف د ویر داشتویت.",
-       "readonlytext": "رسÛ\8cÙ\86Ù\87 Ø¬Ø§ Ø§Û\8cسÙ\87 Ø³Û\8c Ø¯Ø¦Ù\86 Ù\88رÙ\88دÛ\8c Û\8cا ØªØ§Ø²Ù\87 Û\8cا Ø¢Ù\84شتگرÛ\8cا Ù\87Ù\86Û\8c Ù\82Ù\84Ù\81 Ø¨Û\8cÙ\87Ø\8cشاÛ\8cت Ø³Û\8c Ù\85Ù\86Ù\86 Ù\85عÙ\85Ù\88Ù\84Û\8c Ø±Ø³Û\8cÙ\86Ù\87 Ø¬Ø§Ù\86Ù\87ا Ù\88Ù\87 Ú©Ù\87 Ù\88رئردÙ\87 Ù\88Ù\87 Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ø¹Ø§Ø¯Û\8cØ´.\nدÛ\8cÙ\88Ù\88Ù\86دارÛ\8c Ú©Ù\87 Ù\88Ù\86Ù\87 Ù\82Ù\84Ù\81 Ú©Ø±Ø¯Ù\87 Ù\88Ù\86Ù\87 Ú¯Ù\88تÙ\87:$1",
-       "missing-article": "رسÛ\8cÙ\86Ù\87 Ø¬Ø§ Ù\86تÙ\88Ù\86Ù\87 Ø¨Ù\84Ú¯Ù\87 Ø§Û\8c Ø¨Ø§ Ù¾Û\8cدا Ø¨Ú©Ù\87 Ø¨Ø¬Ù\88رÙ\87.Ú©Ù\87 Ù\86Ù\88Ù\85Ø´ $1 Ù\88 $2 Ù\87ئ.\nÙ\85عÙ\85Ù\88Ù\84Ù\86د Û\8cÙ\87 Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\81رخ Ù\88Û\8cرگار Ø±Ø¦ØªÙ\87 Ø¯Ø´ Ø¨Û\8cÙ\87 Ù¾Ø§Ú© Ø¨Û\8cÙ\87.",
-       "missingarticle-rev": "(وانئری#: $1)",
-       "missingarticle-diff": "(فرخ: $1، $2)",
-       "readonly_lag": "اÛ\8c Ø±Ø³Û\8cÙ\86Ù\87 Ø¬Ø§ Ù\82Ù\84Ù\81 Ø¨Û\8cÙ\87 ØªØ§ Ø§Ù\88سÙ\87 Ú©Ù\87 Ø³Ø±Ù\88ر Ø±Ø³Û\8cÙ\86Ù\87 Ø¬Ø§ Ù\88Ù\87 Ù\85Û\8cÙ\86جاÙ\88Ù\86 Ø¨Ø±Ø³Ù\87.",
-       "internalerror": "خطا Ø¯Ø§Ø®Ù\84ی",
-       "internalerror_info": "خطا Ø¯Ø§Ø®Ù\84ی:$1",
-       "internalerror-fatal-exception": "تی داشتن مرگدار د جور \"$1\"",
-       "filecopyerror": "Ù\86بÙ\88ئÙ\87 Ø¬Ø§Ù\86Û\8cا $1 Ø¯ $2 Ù\88رداشتÙ\87 Ø¨Ù\88ئÙ\87",
-       "filerenameerror": "Ù\86بÙ\88ئÙ\87 Ø¬Ø§Ù\86Û\8cا $1 Ø¯ $2 Ù\86Ù\88Ù\85 Ø¢Ù\84شت Ø¨Ù\88ئÙ\87",
-       "filedeleteerror": "Ù\86بÙ\88ئÙ\87 Ø¬Ø§Ù\86Û\8cا $1 Ù¾Ø§Ú©Ø³Ø§ Ø¨Ù\88ئÙ\87",
-       "directorycreateerror": "Ù\86بÙ\88ئÙ\87 Ø³Ø±Ø¯Ø³Ù\87 $1 Ø±Ø§Ø³ Ø¨Ù\88ئÙ\87.",
-       "directoryreadonlyerror": "فقط موئه نشونگه \"$1\" بحونی.",
-       "directorynotreadableerror": "نشونگه \"$1\" حننی نئ.",
-       "filenotfound": "Ù\86تÙ\88Ù\86Û\8cت Ø¬Ø§Ù\86Û\8cا $1 Ù\86Ù\87 Ù¾Û\8cدا Ø¨Ú©Û\8cد",
-       "unexpected": "ارزاÛ\8cشت Ù\86احاستÙ\87: \"$1\"=\"$2\".",
-       "formerror": "خطا:Ù\86بÙ\88ئÙ\87 Ù\86Ù\88Ù\85 Ø¨Ù\84Ú¯Ù\87 Ù\88Ù\87 Ù\85Ù\88 Ø¨Ø¦Ù\8aت",
-       "badarticleerror": "اÛ\8c Ø§Ù\86جÙ\88Ù\85 Ø¯Ø¦Ù\86Û\8c Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø§Ù\86جÙ\88Ù\85 Ù\86گرÙ\87.",
-       "cannotdelete": "بلگه یا جانیا $1 نبوئه پاکسا با.\nشایت یه ایسه وا کسی هنی پاکسابیه.",
-       "cannotdelete-title": "Ù\86بÙ\88ئÙ\87 Ø¨Ù\84Ú¯Ù\87 $1 Ù¾Ø§Ú©Ø³Ø§ Ø¨Ù\88",
-       "delete-hook-aborted": "پاکسا بیئن وا قلاو نهاگری بیه.\nهیچ توضیئ سیش نئ.",
-       "no-null-revision": "سی بلگه$1 وانئری خنثی نه راس بکید",
-       "badtitle": "داسÙ\88Ù\86 Ú¯ن",
-       "badtitletext": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\87 Ø¨Û\8cÙ\87 Ù\85عتÙ\88ر Ù\86Û\8cØ\8cÛ\8cا  Û\8cÙ\87 Ú¯Ù\84 Ù\85ئÙ\86 Ø²Ù\88Ù\86Û\8c Û\8cا Ù\85ئÙ\86 Ù\88Û\8cÚ©Û\8c Ø¯Ø§Ø³Ù\88Ù\86 ØºÙ\84Ø·Ù\87.\nÛ\8cÙ\87 Ø´Ø§Û\8cت Ø¯ Ù\88ر Ú¯Ø±ØªÙ\87 Û\8cÚ©Û\8c Ø¨Ø§ Û\8cا Ø¨Û\8cشتر Ú©Ø§Ø±Ø§Ú©ØªØ±Û\8cا Ù\86بÙ\88ئÙ\87 Ø³Û\8c Ø§Û\8c Ø¯Ø§Ø³Ù\88Ù\86Û\8cا Ù\88Ù\87 Ú©Ø§Ø± Ú¯Ø±ØªÙ\87 Ø¨Ù\88ئÙ\86",
-       "title-invalid-empty": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ø­Ø§Ù\84Û\8cÙ\87 Û\8cا Ù\81Ù\82Ø· Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯Ø§Ø± Û\8cÙ\87 Ú¯Ù\84 Ù\86Ù\88Ù\85 Û\8cا Ù\86Ù\88Ù\85جائÙ\87.",
-       "title-invalid-utf8": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯Ø§Ø± Û\8cÙ\87 Ú¯Ù\84 Ù\86Ù\85اجا UTF-8 Ù\86اÙ\85عتÙ\88رÙ\87.",
-       "title-invalid-interwiki": "داسÙ\88Ù\86 Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯Ø§Ø± Û\8cÙ\87 Ú¯Ù\84 Ù\87Ù\88Ù\85 Ù¾Û\8cÙ\88Ù\86د Ù\85Û\8cÙ\86جا Ù\88Û\8cÚ©Û\8cÙ\87",
-       "title-invalid-talk-namespace": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\88Ù\87 Û\8cÙ\87 Ú¯Ù\84 Ø¨Ù\84Ú¯Ù\87 Ú\86Ú© Ú\86Ù\86Ù\87 Ú©Ù\87 Ù\86ئÛ\8cØ´ Ù\87شارÙ\87 Ù\85Û\8cÚ©Ù\87.",
-       "title-invalid-characters": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯Ø§Ø± Û\8cÙ\87 Ú¯Ù\84 Ú©Ø§Ø±Ø§Ú©ØªØ± Ù\86اÙ\85عتÙ\88رÙ\87 \"1$\" Ù\87.",
-       "title-invalid-relative": "داسÙ\88Ù\86 Û\8cÙ\87 Ú¯Ù\84 Ù\85سÛ\8cر Ù\87Ù\88Ù\85 Ø¯Ù\86Ú¯ Ø¯Ø§Ø±Ù\87.داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ù\87Ù\88Ù\85 Ø¯Ù\86Ú¯(./, ../) Ù\86اÙ\85عتÙ\88رÙ\87Ø\8c Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\88Ù\86Ù\88 Ø¯ Ú¯Ø§ØªÛ\8c Ú©Ù\87 Ø¯Ù\88ارتÙ\87 Ù\86Û\8cئر Ú©Ø§Ø±Û\8cار Ù\88Ù\87 Ú©Ø§Ø± Ú¯Ø±ØªÙ\87 Ø¨Ù\88ئÙ\86 Ù\86Ù\85Û\8cاÙ\86 Ø¯ Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\85اÛ\8cشت Ø¯Ù\88ارتÙ\87 Ù\86Û\8cئر.",
-       "title-invalid-magic-tilde": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯Ø§Ø± Û\8cÙ\87 Ú¯Ù\84 Ù\86Ù\85اجا Ø¬Ø§Ø¯Ù\88Û\8cÛ\8c Ù\86اÙ\85عتÙ\88رÙ\87(<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\81رÙ\87 Ú¯Ù¾Ù\87. Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ø± Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú©Ø§Ø±Û\8c UTF-8 Ø§Ù\86ازÙ\87 Ù\88Ù\87 Ù\86Ù\88اس Ø¯ $1 Ø¨Ø§Û\8cت Ú¯Ù¾ØªØ± Ø¨Ù\88ئÙ\87.",
-       "title-invalid-leading-colon": "داسÙ\88Ù\86 Ø¨Ù\84Ú¯Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ø¯Ø§Ø± Û\8cÙ\87 Ú¯Ù\84 Ú©Ù\84Ù\88Ù\86 Ù\86اÙ\85عتÙ\88ر Ø¯ Ø´Ø±Ù\88 Ú©Ø§Ø±Ø´Ù\87.",
-       "perfcached": "رسÛ\8cÙ\86Ù\87 Û\8cا Ù\86Ù\87اÛ\8cÛ\8c Ø¯ Ù\88Û\8cرگÙ\87 Ù\86Ù\87Ù\88Ù\86Û\8c Ù\85Ù\88کشت Ø¨Û\8cÙ\86Ù\87 Ù\88 Ø´Ø§Û\8cت Ù\87Ù\86Û\8c Ù\88Ù\87 Ù\87Ù\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ù\86بÛ\8cÙ\86Ù\87.بÛ\8cشترÙ\88Ù\86Ù\87 {{جÙ\85Û\8c:$4|Û\8cÙ\87 Ú¯Ù\84 Ù\86تÛ\8cجÙ\87|$4 Û\8cÙ\87 Ú¯Ù\84 Ù\86تÛ\8cجÙ\87}} Ø¯ Ù\88Û\8cرگÙ\87 Ù\86Ù\87Ù\88Ù\86Û\8c Ù\87اÙ\86 Ø¯ Ø¯Ø³Ø±س.",
-       "perfcachedts": "رسÛ\8cÙ\86Ù\87 Û\8cا Ù\86Ù\87اÛ\8cÛ\8c Ø¯ Ù\88Û\8cرگÙ\87 Ù\86Ù\87Ù\88Ù\86Û\8c Ù\85Ù\88کشت Ø¨Û\8cÙ\86Ù\87 Ù\88 Ø´Ø§Û\8cت Ù\87Ù\86Û\8c Ù\88Ù\87 Ù\87Ù\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ù\86بÛ\8cÙ\86Ù\87.بÛ\8cشترÙ\88Ù\86Ù\87 {{جÙ\85Û\8c:$4|Û\8cÙ\87 Ú¯Ù\84 Ù\86تÛ\8cجÙ\87|$4 Û\8cÙ\87 Ú¯Ù\84 Ù\86تÛ\8cجÙ\87}} Ø¯ Ù\88Û\8cرگÙ\87 Ù\86Ù\87Ù\88Ù\86Û\8c Ù\87اÙ\86 Ø¯ Ø¯Ø³Ø±س.",
-       "querypage-no-updates": "Ù\86بÙ\88ئÙ\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\88Ù\87 Ù\87Ù\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ø¨Ø§.\nرسÛ\8cÙ\86Ù\87 Û\8cا Ø§Û\8cÚ\86Ù\87 ØªØ§Ø²Ù\87 Ù\86بÛ\8cÙ\87.",
-       "viewsource": "سرÚ\86Ø´Ù\85Ù\87 Ù\86Ù\87 Ø¨Ù\88Ù\8aÙ\86Ù\8aت",
-       "viewsource-title": "سرÚ\86Ø´Ù\85Ù\87 $1 Ø¨Ù\88Ù\8aÙ\86Ù\8aت",
-       "actionthrottled": "Ú©Ù\86شت Ø¬Ù\84Ù\88گئرÛ\8c Ø¨Û\8cÙ\87",
-       "actionthrottledtext": "سی جلوگئری د درتیچ اسپم نبوئه که شما چنی کارینه د یه گات کؤچک چن گل انجوم بیئتو.\nلطفن مئن چن دیقه هنی تلاش بکیت.",
-       "protectedpagetext": "دای بلگه نبوئه ویرایشت یا کاریا هنی بکید",
-       "viewsourcetext": "Ø´Ù\85ا ØªÙ\88Ù\86Û\8cت Ø³Ø±Ú\86Ø´Ù\85Ù\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86Û\8cت Ù\88 Ø¯Ø´ Ù\88رداریت:",
-       "viewyourtext": "Ø´Ù\85ا ØªÙ\88Ù\86Û\8cت Ø³Ø±Ú\86Ø´Ù\85Ù\87 Ù\88Û\8cراÛ\8cشتÛ\8cا ØªÙ\88Ù\86Ù\87 Ø§Û\8c Ø¯ Ø¨Ù\84Ú¯Ù\87 Ø¨Ù\88Û\8cÙ\86Û\8cت Ù\88 Ø¯Ø´Ù\88 Ù\88ردارÛ\8cت",
-       "protectedinterface": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ø³Û\8c Ù\86رÙ\85 Ø§Ù\81زار Ø¯ Ø§Û\8c Ù\88Û\8cÚ©Û\8c Ù\86Û\8cسسÙ\87 Ø¢Ù\85ادÙ\87 Ù\85Û\8c Ú©Ù\87Ø\8c Ù\88 Ø¯   .\nسÛ\8c Ø§Ø¶Ø§Ù\81 Ú©Ø±Ø¯Ù\86 Û\8cا Ø¢Ù\84شت Ø¯Ø¦Ù\86 Ø¯ Ù\87Ù\85Ù\87 Ù\88Û\8cÚ©Û\8c Û\8cا Ù\84Ø·Ù\81ا [//translatewiki.net/ translatewiki.net] Ù\86Ù\87 Ø¨Ù\87 Ú©Ø§Ø± Ø¨Ø¤Ø±Û\8cتØ\8c Ù\88Ù\84ات Ù\86Ø´Û\8cÙ\86 Ú©Ù\86Û\8c Ù¾Ø±Ù\88جÙ\87 Ù\88Û\8cÚ©Û\8c Ù\88ارسگر.",
-       "editinginterface": "<strong>زئنار دئن:</strong> شما داریت بلگه ای نه که سی      بیه ویرایشت می کید.",
-       "translateinterface": "سÛ\8c Ø§Ø¶Ø§Ù\81 Ú©Ø±Ø¯Ù\86 Û\8cا Ø¢Ù\84شت Ø¯Ø¦Ù\86 Ù\88اÙ\84رستÙ\87 Û\8cا Ø¯ Ù\87Ù\85Ù\87 Ù\88Û\8cÚ©Û\8c Û\8cاØ\8cÙ\84Ø·Ù\81 Ø¨Ú©Û\8cد[//translatewiki.net/ translatewiki.net] Ù\88Ù\87 Ú©Ø§Ø± Ø¨Ø¦Û\8cرÛ\8cتØ\8c Ù¾Ø±Ù\88جÙ\87 Ù\88Ù\84ات Ø¯Û\8cارÛ\8c Ú©Ø±Ø¯Ù\86 Ù\88Û\8cÚ©Û\8c Ù\88ارسگر",
-       "cascadeprotected": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ø¯ Ù\88Û\8cراÛ\8cشت Ù¾Ø± Ù\88 Ù¾Û\8cÙ\85 Ø¨Û\8cÙ\87 Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 {{جÙ\85Û\8c:$1|Ù\88Ù\87 Ø¨Ù\84Ú¯Ù\87 Û\8cÙ\87 |Ù\88Ù\86Ù\88 Ø¨Ù\84Ú¯Ù\87 Û\8cاÙ\86}} Ú©Ù\87 Ù\87ا Ø¯Ø´ Ø¯                 :\n$2",
-       "namespaceprotected": "Ø´Ù\85ا Ø­Ù\82Û\8c Ø³Û\8c Ù\88Û\8cراÛ\8cشت Ø¨Ù\84Ú¯Ù\87 Û\8cاÛ\8cÛ\8c Ú©Ù\87 Ù\87اÙ\86 Ø¯ Ù\86Ù\88Ù\85جا  <strong>$1</strong> ناریت.",
-       "customcssprotected": "Ø´Ù\85ا Ø³Û\8c Ù\88Û\8cراÛ\8cشت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø³Û\8c Ø§Ø³ Ø§Ø³ Ø§Ø¬Ø§Ø²Ù\87 Ù\86ارÛ\8cت Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\85Û\8cزÙ\88Ù\86کارÛ\8c Ø¯Ù\88Ù\86سÙ\85Ù\86Û\8cا Ø´Ø®ØµÛ\8c Û\8cÙ\87 Ú©Ø§Ø±Û\8cار Ù\87Ù\86Û\8c Ù\87ا Ø¯ Ù\88Ù\87.",
-       "customjsprotected": "Ø´Ù\85ا Ø³Û\8c Ù\88Û\8cراÛ\8cشت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø¬Ø§Ù\88ا Ø§Ø³Ú©Ø±Û\8cپت ØµÙ\84ا Ù\86ارÛ\8cت Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\85Û\8cزÙ\88Ù\86کارÛ\8c Ø¯Ù\88Ù\86سÙ\85Ù\86Û\8cا Ø´Ø®ØµÛ\8c Û\8cÙ\87 Ú©Ø§Ø±Û\8cار Ù\87Ù\86Û\8c Ù\87ا Ø¯ Ù\88Ù\87.",
-       "mycustomcssprotected": "Ø´Ù\85ا Ø­Ù\82 Ù\86ارÛ\8cت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø³Û\8c Ø§Ø³ Ø§Ø³ Ù\86Ù\87 Ù\88Û\8cراÛ\8cشت Ø¨Ú©Û\8cد",
-       "mycustomjsprotected": "Ø´Ù\85ا Ø­Ù\82 Ù\86ارÛ\8cت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø¬Ø§Ù\88ا Ø§Ø³Ú©Ø±Û\8cپت Ù\86Ù\87 Ù\88Û\8cراÛ\8cشت Ø¨Ú©Û\8cد",
-       "myprivateinfoprotected": "Ø´Ù\85ا Ø­Ù\82 Ù\86ارÛ\8cت Ø¯Ù\88Ù\86سÙ\85Ù\86Û\8cا Ø®ØµÙ\88صÛ\8c Ù\86Ù\87 Ù\88Û\8cراÛ\8cشت Ø¨Ú©Û\8cد",
-       "mypreferencesprotected": "Ø´Ù\85ا Ø­Ù\82 Ù\86ارÛ\8cت Ù\88Û\8cجگÛ\8c Û\8cا Ù\87Ù\86Û\8c ØªÙ\88Ù\86Ù\87 Ù\88Û\8cراÛ\8cشت Ø¨Ú©Û\8cد",
-       "ns-specialprotected": "بلگیا ویجه نتونن ویرایشت بوئن",
-       "titleprotected": "اÛ\8c Ø¯Û\8cارگر Ø¯ Ø¯Ø±Ù\88س Ø¨Û\8cئÙ\86 Ù\88Ù\87 Ø¯Ø³ [[کارÛ\8cار:$1|$1]].\n Ù\86Ù\87اگرÛ\8c Ø¨Û\8cÙ\87.\nدÙ\84Û\8cÙ\84Ø´ Ù\88Ù\86Ù\87\"<em>$2</em>\".",
-       "filereadonlyerror": "Ù\86بÙ\88ئÙ\87 Ø¬Ø§Ù\86Û\8cا \"$1\" Ø¢Ù\84شت Ø¨Ú©Û\8cتÙ\88 Ø³Û\8c Û\8cÙ\87 Ú©Ù\87 Ø§Ù\85اÛ\8cÛ\8cÙ\87 Ú¯Ù\87 \"$2\" Ù\81Ù\82Ø· Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ø­Ù\86Ù\86Û\8cÙ\87.\n\nدÛ\8cÙ\88Ù\88Ù\86دارÛ\8c Ú©Ù\87 Û\8cÙ\87 Ù\86Ù\87 Ù\82Ù\84Ù\81 Ú©Ø±Ø¯Ù\87 Ù\85Ù\88ئÙ\87 Ø¯ Ù\88اشکاÙ\81ت \"$3\" Ø¨Ú©Û\8cتÙ\88.",
-       "invalidtitle-knownnamespace": "نوم نامعتور سی نوم جا \"$2\" و نیسه \"$3\"",
-       "invalidtitle-unknownnamespace": "نوم نامعتور سی شماره نومجا ناشناس $1 و نیسه \"$2\"",
-       "exception-nologin": "نبوئه وارد بوئيد",
-       "exception-nologin-text": "شما وارد [[ویجه:وامین اومائن کاریار|وامین اومائن]] بوئیت سی یه تونستویت که د ای بلگه یا کنشت دسرسی داشتویت.",
-       "exception-nologin-text-manual": "دتو تقاضا میکیم که $1 تونسه بوئه د ای بلگه دسرسی داشتوه یا کاری انجوم بیئه.",
-       "virus-badscanner": "سازواره گن:ویروس نادیار:<em>$1</em>",
-       "virus-scanfailed": "زÙ\84 Ø¨Û\8cئÙ\86 Ø´Ú©Ø³Øª Ø­Ø±Ø¯($1)",
-       "virus-unknownscanner": "ويروس كش نادیار",
-       "logouttext": "<strong>Ø´Ù\85ا Ù\87Ù\86Û\8c Ù\86رÛ\8cتتÙ\87 Ù\88Ù\87 Ø¯Ø±.</strong>\n\nد Ù\88Û\8cرتÙ\88 Ø¨Ø§ Ú©Ù\87 Ù\88Û\8cرگÙ\87 Ù\86Ù\87Ù\88 Ø§Ù\86جÙ\88Ù\85Û\8cارتÙ\88 Ù\86Ù\87 Ù¾Ø§Ú©Ø³Ø§ Ù\86Ú©Û\8cتØ\8c Ø³Û\8c Û\8cÙ\87 Ù¾Ø§Ø±Ù\87 Ø§Û\8c Ø¯ Ø¨Ù\84Ú¯Ù\87 Û\8cا Ù\85Ù\85Ú©Ù\86Ù\87 Ø¬Ù\88رÛ\8c Ù\86Ø´Ù\88 Ø¯Ø¦Ù\87 Ø¨Ù\88ئÙ\86 Ú\86Û\8c Û\8cÙ\87 Ú©Ù\87 Ù\85Ù\86Û\8cستÛ\8c  Ø´Ù\85ا Ù\87Ù\86Û\8c Ù\87اÛ\8cÛ\8cÙ\86 Ù\88امین.",
-       "welcomeuser": "Ø®Ù\88Ø´ Ø§Ù\88Ù\85اÙ\8aت،$1!",
-       "welcomecreation-msg": "حساÙ\88تÙ\88 Ø¯Ø±Ù\88س Ø¨Û\8cÙ\87.\nد Ù\88Û\8cرتÙ\88 Ù\86رÙ\88ئÙ\87 Ú©Ù\87{{Ù\86Ù\88Ù\85 Ø¯Û\8cارگÙ\87}} [[Special:Preferences|preferences]]  Ø®Ù\88تÙ\88Ù\86Ù\87 Ø¢Ù\84شت Ø¨Ú©Û\8cت",
+       "nstab-mediawiki": "پئیغوٙم",
+       "nstab-template": "چوٙأ",
+       "nstab-help": "بألگە هومیاری",
+       "nstab-category": "دأسÛ\95",
+       "nosuchaction": "چئنی کونئشتگأری نییئش",
+       "nosuchactiontext": "کاری کئ ڤا یوٙ آر ئل تیار بییە نادیارە.\nگاسی شوما یوٙ آر ئل نە دوروس نأنیسأنیتە، یا یئ گئل هوم پئیڤأند ئشتئڤا ڤارئد بییە.\nڤئ گاسی یئ گئل سیسئریک د نأرم أفزاز ڤئ کار گئرئتە بییە ڤا {{SITENAME}} ئشارە بأکە.",
+       "nosuchspecialpage": "چئنی بألگە ڤیجە یی نییئش",
+       "nospecialpagetext": "<strong>Ø´Ù\88Ù\85ا Û\8cئ Ú¯Ø¦Ù\84 Ø¨Ø£Ù\84Ú¯Û\95 Ù\86ادÛ\8cار Ù\86Û\95 Ù\87استÛ\8cتÛ\95.</strong>\nگاسÛ\8c Û\8cئ Ú¯Ø¦Ù\84 Ù\86Ù\88Ù\85Ú¯Û\95 Ø³Û\8c Ø¯Û\8cارÛ\8c Ø¯Ø£Ø¦Ù\86 Ø¯ Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا Ø¨Ø§Û\8cأد Ø¯ [[Special:SpecialPages|{{int:specialpages}}]] Ø¯Û\8cارÛ\8c Ø¨Ø£Ú©Û\95.",
+       "error": "خأطا",
+       "databaseerror": "خأطا Ø¯ Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ú¯ا",
+       "databaseerror-text": "یئ گئل خأطا جوست کاری د رئسینە گا دیاری کئردە.گاسی یە یئ گل سیسئریک د کار گئرئتئن نأرم أفزار راس بأکە.",
+       "databaseerror-textcl": "یئ گئل خأطا جوست کاری د رئسینە گا دیاری کئردە.",
+       "databaseerror-query": "جوستکاری: $1",
+       "databaseerror-function": "Ø¢Ù\84ئشت Ú¤Ø£ن:$1",
+       "databaseerror-error": "خأطا: $1",
+       "laggedslavemode": "ڤارئسدار بوٙییت:گاسی بألگە د ڤأر گئرئتە ڤئ هئنگوم سازیا ئیسئنی نبوٙە",
+       "readonly": "رئسÛ\8cÙ\86Û\95 Ú¯Ø§ Ù\82Ù\88Ù\84Ù\81 Ø¨Û\8cÛ\8cÛ\95",
+       "enterlockreason": "دألیل قولف کئردئن نە بأنیسیت، کئ ڤە د ڤأرگئرئتە گات ڤا کئردئن قولف با",
+       "readonlytext": "رئسÛ\8cÙ\86Û\95 Ú¯Ø§ Ø¦Û\8cسئ Ø³Û\8c Ø¯Ø£Ø¦Ù\86 Ú¤Ù\88رÙ\88Ù\99دÛ\8c Û\8cا Ù\87Ø£Ù\86Û\8c Û\8cا Ø¢Ù\84ئشتگئرÛ\8cا Ù\87Ø£Ù\86Û\8c Ù\82Ù\88Ù\84Ù\81 Ø¨Û\8cÛ\8cÛ\95Ø\8c Ú¯Ø§Ø³Û\8c Ø³Û\8c Ø¨Û\8cÛ\8cئÙ\86 Ù\85Ø£Ù\85Ù\88Ù\99Ù\84Û\8c Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ú¯Ø§Û\8cا Ú¤Ø§Ú¯Ø£Ø±Ø¯Ù\88Ù\99Ù\86Û\8c Ø¨Ù\88Ù\99Û\95 Ú¤Ø¦ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ø£Ú¤Ø¦Ù\84Û\8c Ø®Ù\88Ø´.\nدÛ\8cÚ¤Ù\88Ù\99Ù\86دارÛ\8c Ú©Ø¦ Ú¤Ø¦Ù\86Û\95 Ù\82Ù\88Ù\84Ù\81 Ú©Ø¦Ø±Ø¯Û\95 Ú¤Ø¦Ù\86Û\95 Ú¯Ù\88تÛ\95:$1",
+       "missing-article": "رئسÛ\8cÙ\86Û\95 Ú¯Ø§ Ù\86ئÙ\85Û\8c ØªÙ\88Ù\99Ù\86Û\95 Ø¨Ø£Ù\84Ú¯Û\95 Û\8cÛ\8c Ù\86Û\95 Ø¨Ø§Ø³ Ø¨Ù\88Ù\99أش Ù\88 Ù\86Ù\88Ù\99Ù\85ئش $1Ù\88 $2 Ø¨Ø§ Ø¨Ø£Ø¬Ù\88Ù\99رÛ\95.\n\nÙ\85Ø£Ù\85Ù\88Ù\99Ù\84Ø£Ù\86د Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ù\81أرخ Ù\87Ù\88Ù\85 Ù¾Ø¦Û\8cڤأÙ\86د Ú¤Û\8cرگار Ø¯ Ø¦Ù\88 Ø¨Ø£Ù\84Ú¯Û\95 Ù¾Ø§Ú©Ø³Û\8cا Ø¨Û\8cÛ\8cÛ\95 Ø¯Û\8cارÛ\8c Ù\86ئÙ\85Û\8c Ú©Û\95.\n\nأر Û\8cÛ\95 Ú\86Û\8c Ù\85Ù\88Ù\87ئÙ\85Û\8c Ø³Û\8cتÙ\88Ù\99 Ù\86Û\8cØ\8c Ú¯Ø§Ø³Û\8c Ø´Ù\88Ù\85ا Û\8cئ Ú¯Ø¦Ù\84 Ø³Û\8cسئرÛ\8cÚ© Ø¯ Ù\86أرÙ\85 Ø£Ù\81زار Ø®Ù\88تÙ\88Ù\99 Ø¯Ø§Ø±Û\8cت.\nÙ\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Ú¤Ø¦Ù\86Û\95 Ø³Û\8c Ú¤Ø¦Ù\86Ù\88Ù\99 [[Special:Ù\86Ù\88Ù\99Ù\85Ú¯Û\95 Ú©Ø§Ø±Û\8cارÛ\8cا/سÛ\8c Û\8cÙ\88Ù\99سÙ\88Ù\99Ù¾|دÛ\8cÚ¤Ù\88Ù\99Ù\86کارÛ\8cا]]کئÙ\84 Ø¨Ø£Ú©Û\8cت Ù\88 Ø¯Ø´ Ø¯Ø¦Ø¨Ø§Ø±Ù\87 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø¢Û\8c Ù¾Û\8cتÙ\88Ù\99 Ú¤Ø¦Ø´Ù\88Ù\99 Ø¨Ù\88Ù\99Û\8cÛ\8cت.",
+       "missingarticle-rev": "(ڤانیأری#: $1)",
+       "missingarticle-diff": "(Ù\81أرخ: $1Ø\8c $2)",
+       "readonly_lag": "ئÛ\8c Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ú¯Ø§ Ù\82Ù\88Ù\84Ù\81 Ø¨Û\8cÛ\8cÛ\95 ØªØ§ Ú¯Ø§ØªÛ\8c Ú©Ø¦ Ø³Ø¦Ø±Ú¤Ø¦Ø± Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ú¯Ø§ Ø¨Ø£Ø±Ø£Ø³Û\95 Ú¤Ø¦ Û\8cئ Ú¯Ø¦Ù\84 Ù\85Û\8cÙ\86جاڤأÙ\86.",
+       "internalerror": "خأطا Ù\85Û\8cÙ\86جاÛ\8cی",
+       "internalerror_info": "خأطا Ù\85Û\8cÙ\86جاÛ\8cی:$1",
+       "internalerror-fatal-exception": "تیە داشتئن مأرگبار جوٙر \"$1\"",
+       "filecopyerror": "Ù\86أبÙ\88Ù\99Û\95 Ø¬Ø§Ù\86Û\8cا $1 Ø¯ $2 Ú¤Ù\88رداشتÛ\95 Ø¨Ù\88Ù\99Û\95",
+       "filerenameerror": "Ù\86أبÙ\88Ù\99Û\95 Ù\86Ù\88Ù\85 Ø¬Ø§Ù\86Û\8cا $1 Ø¯ $2 Ø¢Ù\84ئشت Ú©Ø§Ø±Û\8c Ø¨Ù\88Ù\99Û\95.",
+       "filedeleteerror": "Ù\86أبÙ\88Ù\99Û\95 Ø¬Ø§Ù\86Û\8cا $1 Ù¾Ø§Ú©Ø³Ø§ Ø¨Ù\88Ù\99Û\95.",
+       "directorycreateerror": "Ù\86أبÙ\88Ù\99Û\95 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86Ú¯Û\95 $1 Ø±Ø§Ø³ Ø¨Ù\88Ù\99Û\95.",
+       "directoryreadonlyerror": "فأقأط بوٙە تیرنئشوٙنگە \"$1\" نە بوٙحوٙنی.",
+       "directorynotreadableerror": "تیرنئشوٙنگە \"$1\" حأنئنی نی.",
+       "filenotfound": "Ù\86أتÙ\88Ù\99Ù\86Û\8cت Ø¬Ø§Ù\86Û\8cا $1 Ù\86Û\95 Ø¨Ø£Ø¬Ù\88Ù\99رÛ\8cت.",
+       "unexpected": "أرزاÛ\8cئت Ù\86اÙ\87استÛ\95: \"$1\"=\"$2\".",
+       "formerror": "خأطا:Ù\86أبÙ\88Ù\99Û\95 Ù\86Ù\88Ù\85 Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ú¤Ø¦ Ù\85Ù\88Ù\99 Ø¨Ù\88Ù\99Û\8cÛ\8cت.",
+       "badarticleerror": "ئÛ\8c Ú©Ù\88Ù\86ئشتکارÛ\8c Ø¯ Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø£Ù\86جÙ\88Ù\85 Ù\86أبÙ\88Ù\99Û\95.",
+       "cannotdelete": "نأبوٙە بألگە یا جانیا $1 پاکسا با.\nگاسی د ئیسئنی کئسی تئر ڤئ نە پاکسا کئردە.",
+       "cannotdelete-title": "Ù\86أبÙ\88Ù\99Û\95 Ø¨Ø£Ù\84Ú¯Û\95 $1 Ù¾Ø§Ú©Ø³Ø§ Ø¨Ø§",
+       "delete-hook-aborted": "پاکسا کاری ڤا قولاڤ نئها گئری بیە.\nهیچ توضیی سیش نی.",
+       "no-null-revision": "سی بألگە $1 ڤانیأری خومثا نە راس بأکیت",
+       "badtitle": "داسÙ\88Ù\99Ù\86 Ú¯Ø£ن",
+       "badtitletext": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87استئÙ\86Û\8c Ù\86ادÛ\8cارÛ\95Ø\8c Û\8cا Û\8cئ Ú¯Ø¦Ù\84 Û\8cئ Ú¯Ø¦Ù\84 Ø¯Ø§Ø³Ù\88Ù\99Ù\86 Ù\85Û\8cÙ\86جا Ø²Ù\88Ù\99Ù\86Û\8c Û\8cا Ù\85Û\8cÙ\86جا Ú¤Û\8cÚ©Û\8c Ø¦Ø´ØªØ¦Ú¤Ø§Û\95.\nگاسÛ\8c Û\8cÛ\95 Ø¯ Ú¤Ø£Ø± Ú¯Ø¦Ø±Ø¦ØªÛ\95 Û\8cئ Ú¯Ø¦Ù\84 Ú©Ø§Ø±Ø§Ú©ØªØ¦Ø± Û\8cا Ú\86Ø£Ù\86 Ú¯Ø¦Ù\84 Ú©Ø§Ø±Ø§Ú©ØªØ¦Ø± Ø¨Ø§ Ú©Ø¦ Ù\86أبÙ\88Ù\99Û\95 Ø¯ Ø¯Ø§Ø³Ù\88Ù\99Ù\86Û\8cا Ú¤Ø¦ Ú©Ø§Ø±Ø¦Ø´Ù\88Ù\99 Ú¯Ø¦Ø±Ø¦Øª.",
+       "title-invalid-empty": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87استئÙ\86Û\8c Ø­Ø§Ù\84Û\8cÛ\95 Û\8cا Ù\81Ø£Ù\82أط Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¯Ø§Ø± Û\8cئ Ú¯Ø¦Ù\84 Ù\86Ù\88Ù\99Ù\85 Û\8cا Ù\86Ù\88Ù\99Ù\85 Ø¬Ø§Û\95.",
+       "title-invalid-utf8": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87استئÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¯Ø§Ø± Û\8cئ Ú¯Ø¦Ù\84 Ù\86ئÙ\85اجا UTF-8 Ù\86ادÛ\8cارÛ\95.",
+       "title-invalid-interwiki": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87استئÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¯Ø§Ø± Û\8cئ Ú¯Ø¦Ù\84 Ù\87Ù\88Ù\85 Ù¾Ø¦Û\8cڤأÙ\86دÛ\95 Ú©Ø¦ Ù\86أبÙ\88Ù\99Û\95 Ø¯ Ø¯Ø§Ø³Ù\88Ù\99Ù\86Û\8cا Ú¤Ø¦ Ú©Ø§Ø± Ú¯Ø¦Ø±Ø¦ØªÛ\95 Ø¨Ù\88Ù\99Û\95.",
+       "title-invalid-talk-namespace": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87استئÙ\86Û\8c Ú¤Ø¦ Û\8cئ Ú¯Ø¦Ù\84 Ø¨Ø£Ù\84Ú¯Û\95 Ú\86Ø£Ú© Ú\86ئÙ\86Û\95 Ú©Ø¦ Ù\86Û\8cÛ\8cئش Ø¦Ø´Ø§Ø±Û\95 Ù\85Û\8cÚ©Û\95.",
+       "title-invalid-characters": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87استئÙ\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¯Ø§Ø± Û\8cئ Ú¯Ø¦Ù\84 Ú©Ø§Ø±Ø§Ú©ØªØ±Ù\87:$1 Ù\86ادÛ\8cارÛ\95.",
+       "title-invalid-relative": "داسÙ\88Ù\99Ù\86 Û\8cئ Ú¯Ø¦Ù\84 Ù\84ا Ù\87Ù\88Ù\85 Ø¯Ø£Ù\86Ú¯ Ø¯Ø§Ø±Û\95.داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87Ù\88Ù\85 Ø¯Ø£Ù\86Ú¯(./, ../) Ù\86ادÛ\8cارÛ\95Ø\8c Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ú¤Ø¦Ù\86Ù\88Ù\99 Ø£Ú©Ø«Ø£Ø±Ø£Ù\86 Ø¯ Ú¯Ø§ØªÛ\8c Ú©Ø¦ Ø¯Ù\88ڤارتÛ\95 Ù\86Û\8cأر Ú¤Ø¦ Ø¯Ø£Ø³ Ú©Ø§Ø±Û\8cار Ø¯Ø£Ø³Û\8c Ø³Ø§Ø²Û\8c Ø¨Ù\88Ù\99Û\95 Ø¯Û\8cارÛ\8c Ù\86ئÙ\85Û\8cÚ©Ø£Ù\86.",
+       "title-invalid-magic-tilde": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ø­Ø§Ø³ØªØ¦Ù\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¯Ø§Ø± Û\8cئ Ú¯Ø¦Ù\84 Ù\86ئÙ\85اجا Ø¬Ø§Ø¯Ù\88Ù\99Û\8cÛ\8c Ù\86ادÛ\8cارÛ\95(<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ø­Ø§Ø³ØªØ¦Ù\86Û\8c Ù\81ئرÛ\95 Ú¯Ø£Ù¾Û\95. Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ø± Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú©Ø§Ø±Û\8c UTF-8 Ø£Ù\86ازÛ\95 Ú¤Ø¦ Ù\86أباس Ø¯ $1 Ø¨Ø§Û\8cت Ú¯Ø£Ù¾ØªØ£Ø± Ø¨Ù\88Ù\99Û\95.",
+       "title-invalid-leading-colon": "داسÙ\88Ù\99Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Ø­Ø§Ø³ØªØ¦Ù\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ø¯Ø§Ø± Û\8cئ Ú¯Ø¦Ù\84 Ú©Ù\88Ù\84Ù\88Ù\99Ù\86 Ù\86ادÛ\8cار Ø¯ Ø£Ú¤Ø£Ù\84 Ú©Ø§Ø±Ø¦Ø´Û\95.",
+       "perfcached": "رئسÛ\8cÙ\86Û\95 Û\8cا Ù\86ئÙ\87اÛ\8cÛ\8c Ø¯ Ú¤Û\8cرگÛ\95 Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95 Ù\85Ù\88Ù\99Ú©Û\8cس Ø¨Û\8cÙ\86Û\95 Ù\88 Ú¯Ø§Ø³Û\8c Ù\87Ø£Ù\86Û\8c Ú¤Ø¦ Ù\87ئÙ\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ù\86أبÛ\8cÙ\86Û\95.بÛ\8cشتئرÙ\88Ù\99Ù\86Û\95 {{PLURAL:$4|Û\8cئ Ú¯Ø¦Ù\84 Ù\86أتÛ\8cجÛ\95|$4 Û\8cئ Ú¯Ø¦Ù\84 Ù\86أتÛ\8cجÛ\95}} Ø¯ Ú¤Û\8cرگÛ\95 Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95 Ù\87اÙ\86 Ø¯ Ø¯Ø£Ø³Ø±Ø¦س.",
+       "perfcachedts": "رئسÛ\8cÙ\86Û\95 Û\8cا Ù\86ئÙ\87اÛ\8cÛ\8c Ø¯ Ú¤Û\8cرگÛ\95 Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95 Ù\85Ù\88Ù\99Ú©Û\8cس Ø¨Û\8cÙ\86Û\95 Ù\88 Ú¯Ø§Ø³Û\8c Ù\87Ø£Ù\86Û\8c Ú¤Ø¦ Ù\87ئÙ\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ù\86أبÛ\8cÙ\86Û\95.بÛ\8cشتئرÙ\88Ù\99Ù\86Û\95 {{PLURAL:$4|Û\8cئ Ú¯Ø¦Ù\84 Ù\86أتÛ\8cجÛ\95|$4 Û\8cئ Ú¯Ø¦Ù\84 Ù\86أتÛ\8cجÛ\95}} Ø¯ Ú¤Û\8cرگÛ\95 Ù\82اÙ\85 Ø¨Û\8cÛ\8cÛ\95 Ù\87اÙ\86 Ø¯ Ø¯Ø£Ø³Ø±Ø¦س.",
+       "querypage-no-updates": "Ù\86أبÙ\88Ù\99Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Ø¦ Ù\87ئÙ\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ø¨Ø§.\nرئسÛ\8cÙ\86Û\95 Û\8cا Ø¦Û\8cÚ\86ئ ØªØ§Ø²Û\95 Ú©Ø§Ø±Û\8c Ù\86أبÛ\8cÙ\86Û\95.",
+       "viewsource": "سئÛ\8cÙ\84 Ø¯ Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 Ø¨Ø£Ú©Û\8cت",
+       "viewsource-title": "سئÛ\8cÙ\84 Ø¯ Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 $1 Ø¨Ø£Ú©Û\8cت",
+       "actionthrottled": "Ú©Ù\88Ù\86ئشتکارÛ\8c Ù\86ئÙ\87اگئرÛ\8c Ø¨Û\8cÛ\8cÛ\95",
+       "actionthrottledtext": "سی نئهاگئری د دأرتیچ بییئن ئسپأم نأبوٙە کئ شوما چئنی کاری نە د یئ گاتی کوٙتا چأن گئل أنجوم بئییت.\nلوطف بأکیت د چأن دئیقە هأنی د نۊ تئلاش بأکیت.",
+       "protectedpagetext": "نأبوٙە د ئی بألگە ڤیرایئشت کاریا کاریاریا هأنی نە سئیل بأکیت.",
+       "viewsourcetext": "Ø´Ù\88Ù\85ا Ù\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cد Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ú©Û\8cت Ù\88 Ø¯Ø¦Ø´ Ú¤Ø¦رداریت:",
+       "viewyourtext": "Ø´Ù\88Ù\85ا Ù\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cت Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 Ú¤Û\8cراÛ\8cئشتÛ\8cا ØªÙ\88Ù\99Ù\86Û\95 Ø¯ Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ú©Û\8cت Ù\88 Ø¯Ø¦Ø´Ù\88Ù\99 Ú¤Ø¦Ø±Ø¯Ø§Ø±Û\8cت:",
+       "protectedinterface": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø³Û\8c Ù\86أرÙ\85 Ø£Ù\81زار Ú©Ø¦ Ù\87ا Ø¯ Ø¦Û\8c Ú¤Û\8cÚ©Û\8c Ù\86Û\8cسئسÛ\95 Ø¢Ù\85ادÛ\95 Ù\85Û\8cÚ©Û\95Ø\8cÙ\88 Ú¤Ø¦ Ø¯ Ù\85Ù\88زاحئÙ\85Û\95 Øª Ú©Ø§Ø±Û\8c Ù¾Ø£Ø± Ù\88 Ù¾Û\8cÙ\85 Ú©Ø§Ø±Û\8c Ø¨Û\8cÛ\95\nسÛ\8c Ø¦Ø¶Ø§Ù\81 Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Û\8cا Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 Ø¯ Ù\87Ø£Ù\85Û\95 Ú¤Û\8cÚ©Û\8c Û\8cا Ù\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت [//translatewiki.net/ translatewiki.net] Ù\86Û\95 Ú¤Ø¦ Ú©Ø§Ø± Ø¨Ø¦Û\8cرÛ\8cتØ\8c Ù¾Ù\88رÙ\88جÛ\95 Ú¤Ù\88Ù\84ات Ù\86ئشÛ\8cÙ\86 Ø³Ø§Ø²Û\8c Ú¤Û\8cÚ©Û\8cÙ\85ئدÛ\8cا.",
+       "editinginterface": "<strong>ڤارئسکاری کئردئن:</strong> شوما داریت یئ گئل بألگە نە کئ سی یئ گئل نیسئسە یا نأرم أفزار پئیڤأندکار ڤئ کار گئرئتە بیە ڤیرایئشت میکیت.\nآلئشت دأئن ئی بألگە ری رئخت و بارت پئیڤأندکاری کئ کاریاری هأنی ڤئ نە ڤئ کار مئیرئن کارگئرایی دارە.",
+       "translateinterface": "سÛ\8c Ø¦Ø¶Ø§Ù\81 Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Û\8cا Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 Ú¤Ø§Ù\84ئرئسÛ\95 Û\8cا Ø¯ ØªØ£Ù\85Ù\88Ù\99Ù\85 Ú¤Û\8cÚ©Û\8c Û\8cاØ\8cÙ\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت [//translatewiki.net/ translatewiki.net] Ù\86Û\95 Ú¤Ø¦ Ú©Ø§Ø± Ø¨Ø¦Û\8cرÛ\8cتØ\8c Ù¾Ù\88رÙ\88جÛ\95 Ú¤Ù\88Ù\84ات Ù\86ئشÛ\8cÙ\86 Ø³Ø§Ø²Û\8c Ú¤Û\8cÚ©Û\8c Ù\85ئدÛ\8cا.",
+       "cascadeprotected": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¯ Ú¤Û\8cراÛ\8cئشت Ù¾Ø£Ø± Ù\88 Ù¾Û\8cÙ\85 Ú©Ø§Ø±Û\8c Ø¨Û\8cÛ\8cÛ\95 Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø¯ Ú¤Ø£Ø± Ú¯Ø¦Ø±Ø¦ØªÛ\95 Ø¨Ø£Ù\84Ú¯Û\95 {{PLURAL:$1|ڤئ Ø¨Ø£Ù\84Ú¯Û\95 Û\8cÛ\95|ڤئÙ\86Ù\88Ù\99 Ø¨Ø£Ù\84Ú¯Û\95 Ù\86}} Û\95 Ú©Ø¦ Ú¤Ø¦ Ø®Ù\88Ø´ Ú¤Ø§ Ù\86ئÙ\85اجا ØªØ§Ù\81 Ù\86ئÙ\85اÛ\8cÛ\8c Ù¾Ø£Ø± Ù\88 Ù¾Û\8cÙ\85 Ú©Ø§Ø±Û\8c Ø¨Û\8cÛ\95 Ù\88 Ú\86Û\8cا Ù\87Ø£Ù\86Û\8c Ø¯ Ø¦Û\8cÚ\86ئ Ø±Ø£Ú¤Ø§Ù\86دÛ\8cارÛ\8c Ø¨Û\8cÙ\86Û\95:\n$2",
+       "namespaceprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ø¨Ø£Ù\84Ú¯Û\95 Û\8cاÛ\8cÛ\8c Ú©Ø¦ Ù\87اÙ\86 Ø¯ Ù\86Ù\88Ù\85جا <strong>$1</strong> ناریت.",
+       "customcssprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø³Û\8c Ø¦Ø³ Ø¦Ø³ Ù\86Û\95 Ù\86ارÛ\8cت Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ù\85Û\8cزÙ\88Ù\99Ù\86کارÛ\8c Ø¯Ù\88Ù\99Ù\86ئسÙ\85Ø£Ù\86Û\8cا Ø´Ø£ØµÙ\82Û\8c Û\8cئ Ú¯Ø¦Ù\84 Ú©Ø§Ø±Û\8cار Ù\87Ø£Ù\86Û\8c Ù\87ا Ø¯Ø¦Ø´.",
+       "customjsprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¬Ø§Ú¤Ø§ Ø¦Ø³Ú©Ø±Û\8cپت Ù\86Û\95 Ù\86ارÛ\8cت Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ù\85Û\8cزÙ\88Ù\99Ù\86کارÛ\8c Ø¯Ù\88Ù\99Ù\86ئسÙ\85Ø£Ù\86Û\8cا Ø´Ø£ØµÙ\82Û\8c Û\8cئ Ú¯Ø¦Ù\84 Ú©Ø§Ø±Û\8cار Ù\87Ø£Ù\86Û\8c Ù\87ا Ø¯Ø¦Ø´.",
+       "mycustomcssprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø³Û\8c Ø¦Ø³ Ø¦Ø³ Ù\86Û\95 Ù\86ارÛ\8cت.",
+       "mycustomjsprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¬Ø§Ú¤Ø§ Ø¦Ø³Ú©Ø¦Ø±Û\8cپت Ù\86Û\95 Ù\86ارÛ\8cت.",
+       "myprivateinfoprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ú©Ø§Ø±Û\8c Ø¯Ù\88Ù\86ئسÙ\85Ø£Ù\86Û\8cا Ø´Ø£ØµÙ\82Û\8c Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ù\86ارÛ\8cت.",
+       "mypreferencesprotected": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ú¤Û\8cراÛ\8cئشت Ú©Ø§Ø±Û\8c Ú¤Û\8cجÛ\95 Û\8cÛ\8c Û\8cا Ù\87Ø£Ù\86Û\8c Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ù\86ارÛ\8cت.",
+       "ns-specialprotected": "نبوٙە بألگە یا ڤئجە نع ڤیرایئشت کئرد.",
+       "titleprotected": "ئÛ\8c Ø¯Ø§Ø³Ù\88Ù\99Ù\86 Ø¯ Ø±Ø£Ú¤Ø£Ù\86دÛ\8cارÛ\8c Ú¤Ø¦ Ø¯Ø£Ø³ [[کارÛ\8cار:$1|$1]] Ù\86ئÙ\87اگئرÛ\8c Ø¨Û\8cÛ\8cÛ\95.\nدأÙ\84Û\8cÙ\84ئش Ú¤Ø¦ Ù\86Û\95\"<em>$2</em>\".",
+       "filereadonlyerror": "Ù\86أبÙ\88Ù\99Û\95 Ø¬Ø§Ù\86Û\8cا \"$1\" Ù\86Û\95 Ø¢Ù\84ئشت Ú©Ø§Ø±Û\8c Ø¨Ø£Ú©Û\8cت Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø¦Ù\85اÛ\8cÛ\95 Ø¬Ø§ \"$2\" Ø¦Û\8cسئ Ù\87ا Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ø­Ø£Ù\86ئÙ\86.\n\nدÛ\8cÚ¤Ù\88Ù\99Ù\86دارÛ\8c Ú©Ø¦ Ú¤Ø¦ Ù\86Û\95 Ù\82Ù\88Ù\84Ù\81 Ú©Ø¦Ø±Ø¯Û\95 Ù\87ا Ø¯ Ø­Ø§Ù\84 Ù\88 Ø¨Ø§Ù\84 Ú¯Ù\88تÛ\95 Ø¯Û\8cارÛ\8c \"$3\" .",
+       "invalidtitle-knownnamespace": "داسوٙن نادیار سی نوم جا \"$2\" و نیسئسە \"$3\"",
+       "invalidtitle-unknownnamespace": "داسوٙن نادیار سی شومارە نادیار نوم جا \"$2\" و نیسئسە \"$3\"",
+       "exception-nologin": "ڤامین نیوٙماە",
+       "exception-nologin-text": "لوطف بأکیت بیایت ڤامین سی یە کئ د ئی بألگە یا کونئشتکاری دأسرئسی داشتوٙییت.",
+       "exception-nologin-text-manual": "لوطف بأکیت ڤئ $1 صئلا بئیتوٙ کئ د ئی بألگە یا کونئشتکاری دأسرئسی داشتوٙە.",
+       "virus-badscanner": "سازڤارە گأن:ڤیروٙس نادیار:<em>$1</em>",
+       "virus-scanfailed": "زÙ\88Ù\84 Ø¨Û\8cÛ\8cئÙ\86 Ø´Ø¦Ú©Ø£Ø³ Ø­Ø£Ø±Ø¯(رازÛ\8cÙ\86Û\95 $1)",
+       "virus-unknownscanner": "ڤیروٙس کوش نادیار",
+       "logouttext": "<strong>Ø´Ù\88Ù\85ا Ù\87Ø£Ù\86Û\8c Ù\86أرÛ\8cتÛ\95 Ú¤Ø¦ Ø¯Ø£Ø±.</strong>\n\nد Ú¤Û\8cرئتÙ\88Ù\99 Ø¨Ø§ Ú©Ø¦ Ú¤Û\8cرگÛ\95 Ù\86ئÙ\87Ù\88Ù\99 Ø£Ù\86جÙ\88Ù\85Û\8cارئتÙ\88Ù\99 Ù\86Û\95 Ù¾Ø§Ú©Ø³Ø§ Ù\86Ø£Ú©Û\8cتØ\8c Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ú¯Ø§Ø³Û\8c Ù¾Ø§Ø±Ø¦ Û\8cÛ\8c Ø¯ Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا Ø¬Ù\88Ù\99رÛ\8c Ø¯Û\8cارÛ\8c Ù\85Û\8c Ú©Ø£Ù\86 Ú\86Û\8c Û\8cÛ\95 Ú©Ø¦ Ù\85Ø£Ù\86Û\8cستÛ\8c Ø´Ù\88Ù\85ا Ù\87Ø£Ù\86Û\8c Ù\87اÛ\8cÛ\8cت Ú¤Ø£مین.",
+       "welcomeuser": "Ø®Ù\88Ø´ Ø¦Ù\88Ù\99Ù\85اÛ\8cÛ\8cت،$1!",
+       "welcomecreation-msg": "حئساڤتÙ\88Ù\99 Ø¯Ù\88رÙ\88س Ø¨Û\8cÛ\8cÛ\95.\nد Ú¤Û\8cرئتÙ\88Ù\99 Ù\86أرÙ\88Û\95 Ú©Ø¦ {{Ù\86Ù\88Ù\85 Ø¯Û\8cارگÛ\95}} [[Special:Preferences|preferences]]  Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ø¢Ù\84ئشت Ø¨Ø£Ú©Û\8cت.",
        "yourname": "نوم کاریاری:",
        "userlogin-yourname": "نوم کاریاری",
-       "userlogin-yourname-ph": "نوم کاریاری تو نه وارد بكيد",
-       "createacct-another-username-ph": "Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c ØªÙ\87 Ù\88ارد Ù\83Ù\88",
-       "yourpassword": "رازینه گواردن:",
-       "userlogin-yourpassword": "رازینه گواردن",
-       "userlogin-yourpassword-ph": "رازینه گواردن نه بزه",
-       "createacct-yourpassword-ph": "رازینه گواردن نه بزه",
-       "yourpasswordagain": "دوواره رازینه گواردن نه بزه",
-       "createacct-yourpasswordagain": "رازینه گواردن نه پشت راس كو",
-       "createacct-yourpasswordagain-ph": "دوواره رازینه گواردن نه بزه",
-       "remembermypassword": "اÙ\88Ù\85ائÙ\86 Ù\88ا Ù\85Û\8cÙ\86 Ù\85Ù\86Ù\87 Ø¯ Ø§Û\8c Ø¯Ù\88ارتÙ\87 Ù\86Û\8cئر Ø¯ Ù\88Û\8cر Ø¯Ø§Ø´ØªÙ\88(سÛ\8c Ø¨Û\8cشترÙ\88Ù\86Ù\87$1{{جÙ\85Û\8c:$1|رÙ\88ز|رÙ\88زیا}})",
-       "userlogin-remembermypassword": "منه مین سامونه وادار",
-       "userlogin-signwithsecure": "د وصل بيئن امن وه کار بیئر",
-       "yourdomainname": "پوشگیر شما:",
-       "password-change-forbidden": "Ø´Ù\85ا Ù\86تÙ\88Ù\86Û\8cد Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردتÙ\88Ù\86 Ø®Ù\88تÙ\88Ù\86Ù\87 Ø¯ Ø§Û\8c Ù\88Û\8cÚ©Û\8c Ø¢Ù\84شت Ø¨Ú©Û\8cد",
-       "externaldberror": "اشتÙ\88اÛ\8cÛ\8c Ø¯ Ø§Ø±ØªÙ\88اط Ù\88ا Ø±Ø³Û\8cÙ\86Ù\87 Ú¯Ø§ Ù¾Û\8cØ´ Ø§Ù\88Ù\85ائÙ\87 Û\8cا Û\8cÙ\86Ù\87 Ú©Ù\87 Ø´Ù\85ا ØµÙ\84ا Ù\88Ù\87 Ù\87Ù\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ø­Ø³Ø§Ù\88 Ø®Ø§Ø±Ø¬Û\8c ØªÙ\88Ù\86Ù\87 ناریت.",
-       "login": "وا مین اومائن",
-       "nav-login-createaccount": " اومائن د سيستم/راس كردن حساو",
-       "userlogin": " اومائن د سيستم/راس كردن حساو",
-       "userloginnocreate": "وا مین اومائن",
-       "logout": "د Ø³Ø§Ù\85Ù\88Ù\86Ù\87 Ø¯Ø±Ø§Ù\88مائن",
-       "userlogout": "د Ø³Ø§Ù\85Ù\88Ù\86Ù\87 Ø¯Ø±Ø§Ù\88مائن",
-       "notloggedin": "نبوئه بیاییت وامین",
-       "userlogin-noaccount": "یه گل حساو ناریت؟",
-       "userlogin-joinproject": "وصل بوييت {{SITENAME}}",
-       "nologin": "حساو کاریاری ناريت؟$1",
-       "nologinlink": "يه گل حساو راست بكيد",
-       "createaccount": "حساÙ\88 Ø±Ø§Ø³Øª Ø¨Ù\83Ù\8aد",
-       "gotaccount": "اÛ\8cسÙ\86Û\8c Ø­Ø³Ø§Ù\88 Ú©Ø§Ø±Ù\88رÛ\8c Ø¯Ø§Ø±Û\8cتÙ\88؟$1",
-       "gotaccountlink": "وا مین اومائن",
-       "userlogin-resetlink": "جزییات وامین اومائن تونه د ویر بردیته",
-       "userlogin-resetpassword-link": "رازینه گواردن د ویرتو رئته؟",
-       "userlogin-helplink2": "هومیاری وا مین اومائن",
-       "userlogin-loggedin": "Ø´Ù\85ا Ø§Û\8cسÙ\87 Ú\86Û\8c {{جÙ\86س:$1|$1}} Ø§Ù\88Ù\85اÛ\8cتÙ\87 Ù\88ا Ù\85Û\8cÙ\86.\nد Ù\86Ù\88Ù\85 Ø¨Ù\84Ú¯Ù\87 Ù\87ارÛ\8c Ø³Û\8c Ù\88ا Ù\85Û\8cÙ\86 Ø§Ù\88Ù\85ائÙ\86 Ú\86Û\8c Û\8cÙ\87 Ú¯Ù\84 Ú©Ø§Ø±Û\8cار Ù\87Ù\86Û\8c Ù\88Ù\87 Ú©Ø§Ø± Ø¨Û\8cئرتÙ\88.",
-       "userlogin-createanother": "يه گل حساوهنی راست بكيد",
-       "createacct-emailrequired": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87",
-       "createacct-emailoptional": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87",
+       "userlogin-yourname-ph": "نوم کاریاری توٙنە بأزئنیت",
+       "createacct-another-username-ph": "Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c ØªÙ\88Ù\99Ù\86Û\95 Ø¨Ø£Ø²Ø¦Ù\86Û\8cت",
+       "yourpassword": "رازینە گوڤاردئن:",
+       "userlogin-yourpassword": "رازینە گوڤاردئن",
+       "userlogin-yourpassword-ph": "رازینە گوڤاردئن نە بأزە",
+       "createacct-yourpassword-ph": "رازینە گوڤاردئن نە بأزە",
+       "yourpasswordagain": "یئ گئل هأنی رازینە گوڤاردئن نە بأزە",
+       "createacct-yourpasswordagain": "رازینە گوڤاردئن نە پوشت راس کو",
+       "createacct-yourpasswordagain-ph": "یئ گئل هأنی رازینە گوڤاردئن نە بأزە",
+       "remembermypassword": "ئÙ\88Ù\99Ù\85ائÙ\86 Ú¤Ø§Ù\85Û\8cÙ\86 Ù\85ئÙ\86Û\95 Ø¯ Ø¦Û\8c Ø¯Ù\88ڤارتÛ\95 Ù\86Û\8cأر Ø¯ Ú¤Û\8cر Ø¯Ø§Ø´ØªÙ\88Ù\99 (سÛ\8c Ø¨Û\8cشتئرÙ\88Ù\99Ù\86Û\95 $1{{PLURAL:$1|رÙ\88Ù\99ز|رÙ\88Ù\99زیا}})",
+       "userlogin-remembermypassword": "مئنە د ساموٙنە ڤادار",
+       "userlogin-signwithsecure": "ڤأصل بییئن أمن نە ڤئ کار بئیر",
+       "yourdomainname": "پوشگئر شوما:",
+       "password-change-forbidden": "Ø´Ù\88Ù\85ا Ù\86ئÙ\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cت Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ø¯ Ø¦Û\8c Ú¤Û\8cÚ©Û\8c Ø¢Ù\84ئشت Ø¨Ø£Ú©Û\8cت.",
+       "externaldberror": "ئشتئڤاÛ\8cÛ\8c Ø¯ Ø¦Ø±ØªØ¦Ú¤Ø§Ø· Ú¤Ø§ Ø±Ø¦Ø³Û\8cÙ\86Û\95 Ú¯Ø§ Ù¾Û\8cØ´ Ø¦Ù\88Ù\99Ù\85اÛ\95 Û\8cا Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Û\8cØ£Ù\86Û\95 Ú©Ø¦ Û\8cئ Ú¯Ø¦Ù\84 Ø­Ø¦Ø³Ø§Ú¤ Ø®Ø§Ø±Ø¬Û\8c Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ú¤Ø¦ Ù\87ئÙ\86Ú¯Ù\88Ù\85 Ø³Ø§Ø²Û\8c Ø¨Ø£Ú©Û\8cت ناریت.",
+       "login": "ڤامین ئوٙمائن",
+       "nav-login-createaccount": " ڤامین ئوٙمائن/راس کئردئن حئساڤ",
+       "userlogin": " ڤامین ئوٙمائن/راس کئردئن حئساڤ",
+       "userloginnocreate": "ڤامین ئوٙمائن",
+       "logout": "د Ø³Ø§Ù\85Ù\88Ù\99Ù\86Û\95 Ø¯Ø¦Ø±Ø¦Ù\88Ù\99مائن",
+       "userlogout": "د Ø³Ø§Ù\85Ù\88Ù\99Ù\86Û\95 Ø¯Ø¦Ø±Ø¦Ù\88Ù\99مائن",
+       "notloggedin": "نبوٙە بیاییت ڤامین",
+       "userlogin-noaccount": "یئ گئل حئساڤ ناریت؟",
+       "userlogin-joinproject": "ڤأصل بوٙییت {{SITENAME}}",
+       "nologin": "یئ گئل حئساڤ کاریاری ناريت؟$1",
+       "nologinlink": "یئ گئل حئساڤ راس بأکیت",
+       "createaccount": "حئساڤ Ø±Ø§Ø³ Ø¨Ø£Ú©Û\8cت",
+       "gotaccount": "ئÛ\8cسئÙ\86Û\8c Ø­Ø¦Ø³Ø§Ú¤ Ú©Ø§Ø±Û\8cارÛ\8c Ø¯Ø§Ø±Û\8cت؟$1",
+       "gotaccountlink": "ڤامین ئوٙمائن",
+       "userlogin-resetlink": "جوزییات ڤامین ئوٙمائنئ توٙنە د ڤیر بوردیتە؟",
+       "userlogin-resetpassword-link": "رازینە گوڤاردئنتوٙ د ڤیرئتوٙ رأتە؟",
+       "userlogin-helplink2": "هومیاری کئردئن د طأریق ڤامین ئوٙمائن",
+       "userlogin-loggedin": "Ø´Ù\88Ù\85ا Ø¦Û\8cسئ Ú\86Û\8c Û\8cئ Ú¯Ø¦Ù\84 {{GENDER:$1|$1}} Ø¦Ù\88Ù\99Ù\85اÛ\8cتÛ\95 Ú¤Ø§Ù\85Û\8cÙ\86\86Ù\88Ù\85 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87ارÛ\8c Ù\86Û\95 Ø³Û\8c Ú¤Ø§Ù\85Û\8cÙ\86 Ø¦Ù\88Ù\99Ù\85ائÙ\86 Ú\86Û\8c Û\8cئ Ú¯Ø¦Ù\84 Ú©Ø§Ø±Û\8cار Ù\87Ø£Ù\86Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\87ارÛ\8c Ø³Û\8c Ù\88ا Ù\85Û\8cÙ\86 Ø§Ù\88Ù\85ائÙ\86 Ú\86Û\8c Û\8cÙ\87 Ú¯Ù\84 Ú©Ø§Ø±Û\8cار Ù\87Ù\86Û\8c Ú¤Ø¦ Ú©Ø§Ø± Ø¨Ø¦Û\8cرÛ\8cت.",
+       "userlogin-createanother": "یئ گئل حئساڤ هأنی راس بأکیت",
+       "createacct-emailrequired": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95",
+       "createacct-emailoptional": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95",
        "createacct-email-ph": "تیرنشون انجومانامه تونه وارد بكيت",
-       "createacct-another-email-ph": "يه گل انجومانامه وارد بكيت",
-       "createaccountmail": "د یه گل رازینه گواردن موقتیه بختکی وه کار بیئریت و ونه سی یه گل نشونی انجومانامه ویجه کل بکیت",
-       "createacct-realname": "نوم راستكی(مژبوری نيئ)",
-       "createaccountreason": "دليل",
-       "createacct-reason": "دليل",
-       "createacct-reason-ph": "سÛ\8c Ú\86Û\8c Ø´Ù\85ا Ø¯Ø§Ø±Ù\8aتÙ\88 Ù\8aÙ\87 Ú¯Ù\84 Ø­Ø³Ø§Ù\88 Ù\87Ù\86Û\8c Ø±Ø§Ø³ Ù\85Û\8c Ù\83Ù\8aد",
-       "createacct-captcha": "وارسی امنيت دار بين",
-       "createacct-imgcaptcha-ph": "Ù\86Û\8cسسÙ\87 Ù\86Ù\87 Ù\83Ù\87 Ø¯ Ù\88ارÙ\88 Ù\85Ù\8aئÙ\86Ù\8aت Ù\88ارد Ø¨Ù\83Ù\8aد",
-       "createacct-submit": "حساÙ\88 Ø®Ù\88تÙ\88Ù\86Ù\87 Ø±Ø§Ø³ Ø¨Ù\83Ù\8aد",
-       "createacct-another-submit": "يه گل حساوهنی راست بكيد",
-       "createacct-benefit-heading": "{{نوم مالگه}} وه دس خلکی چی شما راس بیه.",
-       "createacct-benefit-body1": "{{جمی:$1|ویرایشت|ویرایشتیا}}",
-       "createacct-benefit-body2": "{{جمی:$1|بلگه|بلگه یا}}",
-       "createacct-benefit-body3": "تازه{{جمی:$1|هومیار|هومیارا}}",
-       "badretype": "رازینه گواردنی که شما دئیته مطاوقت ناره",
-       "userexists": "کاریارنوم که وارد بیه د ایسه وه کار گرته بوئه.\nلطف بکید یه گل نوم هنی انتخاو بکید",
-       "loginerror": "خطا Ø§Ù\88Ù\85ائÙ\86 Ø¯ Ø³Ù\8aستÙ\85",
-       "createacct-error": "خطا Ø±Ø§Ø³ Ù\83ردÙ\86 Ø­Ø³Ø§Ù\88",
+       "createacct-another-email-ph": "تیرنئشوٙن أنجومانامە توٙنە بأزأنیت",
+       "createaccountmail": "یئ گئل رازینە گوڤاردئن موڤأقأتینە ڤئ کار بئیریت و ڤئ نەسی یئ گئل تیرنئشوٙن أنجومانامە تیار بییە کئل بأکیت.",
+       "createacct-realname": "نوم راستأکی(مأژبوٙری نی)",
+       "createaccountreason": "دألیل:",
+       "createacct-reason": "دألیل",
+       "createacct-reason-ph": "سÛ\8c Ú\86Û\8c Ø´Ù\88Ù\85ا Ø¯Ø§Ø±Û\8cت Û\8cئ Ú¯Ø¦Ù\84 Ø­Ø¦Ø³Ø§Ú¤ Ù\87Ø£Ù\86Û\8c Ø±Ø§Ø³ Ù\85Û\8cÚ©Û\8cد",
+       "createacct-captcha": "ڤارئسی أمنیأت دار بییئن",
+       "createacct-imgcaptcha-ph": "Ù\86Û\8cسئسÛ\95 Û\8cÛ\8c Ù\86Û\95 Ú©Ø¦ Ø¯ Ú¤Ø§Ø±Ù\88 Ù\85ئÛ\8cÙ\86Û\8cت Ú¤Ø§Ø±Ø¦Ø¯ Ø¨Ø£Ú©Û\8cت",
+       "createacct-submit": "حئسأڤ Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ø±Ø§Ø³ Ø¨Ø£Ú©Û\8cت",
+       "createacct-another-submit": "یئ گئل حئساڤ هأنی راس بأکیت",
+       "createacct-benefit-heading": "{{SITENAME}}  ڤئ دأس خألکی چی شوما رأڤأندیاری بییە.",
+       "createacct-benefit-body1": "{{PLURAL:$1|ڤیرایئشت|ڤیرایئشتیا}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|بألگە|بألگە یا}}",
+       "createacct-benefit-body3": "تازە{{PLURAL:$1|هومیار|هومیارا}}",
+       "badretype": "رازینە گوڤاردئنی کئ شمأ دأییتە هومدأنگی نارە.",
+       "userexists": "نوم کاریاری دە بییە ئیسئنی ڤئ کار گئرئتە بییە.\nلوطف بأکیت یئ گئل نوم هأنی نە ڤئرداریت.",
+       "loginerror": "خأطا Ú¤Ø§Ù\85Û\8cÙ\86 Ø¦Ù\88Ù\99Ù\85ائÙ\86",
+       "createacct-error": "خأطا Ø±Ø§Ø³ Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø­Ø¦Ø³Ø§Ú¤",
        "createaccounterror": "نبوئه حساو راس بكيد:$1",
        "nocookiesnew": "حساو کاریاری راس بی،اما شما وامئن نیامایئته.{{نوم مالگه}} د کوکیا سی اومائن د سیستم کاریاریا وه کار میئره .کوکیا شما د کار افتائه.لطفن وا کارشو بونیت، اوسه وا نوم کاریاری تازه و رازینه گواردن هنی بیایت وا مئن.",
        "nocookieslogin": "{{نوم مالگه}} د کوکیا سی وامئن اومائن کاریاریا وه کار میئره. کوکیا شما د کار افتائه.\nلطف بکید د کارشو بونیت و دوواره تلاش بکید.",
        "password-login-forbidden": "وه کار گرتن ای پاسوردو نوم کاریاری قدقن بیه.",
        "mailmypassword": "د نۈ وارد كردن رازینه گواردن",
        "passwordremindertitle": "رازینه گواردن موقت تازه سی {{SITENAME}}",
-       "passwordremindertext": "یه نفر(شات خوتو،د تیرنشون آی پی $1) یه گل رازینه گواردن هنی سی {{نوم دیارگه}}($4) حاسته.یه گل رازینه گواردن موقتی سی کاریاری\"$2\" دروس بیه و د \"$3\" جاگر بیه. ار قصدتو یه بیه،شما واس ایسه روئیت وامین و یه گل رازینه گواردن هنی انتخاو بکید.\nرازینه گورادن موقتی د  {{جمی:$5|یه رو|$5 رو}}  تموم بوئه.\n\nار یه نفر هنی یه حاست داشتوئه،یا ار رازینه گورادن تونه د ویرتو اوما، و ار نحاستیت ونه آلشت بکیت، شما شایت د ای پیغوم تیه پوش بکیت و بحایت د وه کار بسن رازینه گواردن دماترتو دماداری بکیت.",
+       "passwordremindertext": "یه نفر(شات خوتو،د تیرنشون آی پی $1) یه گل رازینه گواردن هنی سی {{نوم دیارگه}}($4) حاسته.یه گل رازینه گواردن موقتی سی کاریاری\"$2\" دروس بیه و د \"$3\" جاگر بیه. ار قصدتو یه بیه،شما واس ایسه روئیت وامین و یه گل رازینه گواردن هنی انتخاو بکید.\nرازینه گورادن موقتی د  {{PLURAL:$5|یه رو|$5 رو}}  تموم بوئه.\n\nار یه نفر هنی یه حاست داشتوئه،یا ار رازینه گورادن تونه د ویرتو اوما، و ار نحاستیت ونه آلشت بکیت، شما شایت د ای پیغوم تیه پوش بکیت و بحایت د وه کار بسن رازینه گواردن دماترتو دماداری بکیت.",
        "noemail": "هیچ تیرنشون انجومانامه ای سی کاریار $1 ضفط نبیه.",
        "noemailcreate": "شما باید یه تیرنشون انجومانامه خو فراهم بکید",
        "passwordsent": "یه گل رازینه گواردن هنی سی تیرنشون انجومانامه ای که \"$1\" واش ثوت نام کرده بی کل بیه.\nخواهش میکیم هنی رویئت وامین و اوسه بئریتش.",
        "blocked-mailpassword": "نها آی پی شما سی ویرایشت گرته بیه، و",
        "eauthentsent": "یه گل انجومانامه پشت راس کردنی د یه گل تیرنشون ویجه کل بیه.\nدما یه که یه گل انجومانامه هنی د حساو کل بوئه، شما واس دما رئنمونی نه د انجومانامه بئریت، سی یه که حساو شما راستکی پشت راست بوئه.",
-       "throttled-mailpassword": "یه گل رازینه گواردن دواره زنه بیه ایسه کل بیه، د آخری {{جمی:$1|ساعت|$1 ساعتیا}}.\nسی نهاگری د اذیت دئن،فقط یه گل رازینه گواردن د انجومانامه دواره زنه بیه د هر {{جمی:$1|ساعت|$1 ساعتیا}} کل بیه.",
+       "throttled-mailpassword": "یه گل رازینه گواردن دواره زنه بیه ایسه کل بیه، د آخری {{PLURAL:$1|ساعت|$1 ساعتیا}}.\nسی نهاگری د اذیت دئن،فقط یه گل رازینه گواردن د انجومانامه دواره زنه بیه د هر {{PLURAL:$1|ساعت|$1 ساعتیا}} کل بیه.",
        "mailerror": "خطا داره کل موئه:$1",
-       "acct_creation_throttle_hit": "سیل کریا ای ویکی تیرنشون آی پی شما وه کار گرتنه د روز دمایی {{جمی:$1|1 حساو|$1 حساویا}} نه دروس کردنه، و وه د بیشترونه صلا دئن د ای دوره گاتی انجوم بیه.\nد نتیجه، سیل کریایی که د ای تیرنشون آی پی وه کار گرتنه نمی تونن  حساویا بیشتری د ای گات دروس بکن.",
+       "acct_creation_throttle_hit": "سیل کریا ای ویکی تیرنشون آی پی شما وه کار گرتنه د روز دمایی {{PLURAL:$1|1 حساو|$1 حساویا}} نه دروس کردنه، و وه د بیشترونه صلا دئن د ای دوره گاتی انجوم بیه.\nد نتیجه، سیل کریایی که د ای تیرنشون آی پی وه کار گرتنه نمی تونن  حساویا بیشتری د ای گات دروس بکن.",
        "emailauthenticated": "تیرنشون انجومانامه تونه د $2 سی 3$ مئکم بیه.",
        "emailnotauthenticated": "تیرنشون انجومانامه شما تا ایسه پشت راسگری نبیه.\nهنی انجومانامه ای سی چیا ری به نها کل نبیه.",
        "noemailprefs": "یه گل تیرنشون انجومانامه د الویتیاتو سی یه که ای ویجه گیا کار بکن انتخاو بکیت.",
        "login-throttled": "شما ایسنی فره سی وامین اومائن تلاش کردیته.\n$1 لطفن سی تلاش هنی صبر بکید",
        "login-abort-generic": "اومائن وامین تو شکست حرد-شکست حرده",
        "login-migrated-generic": "حساو کاریاری شما جا وه جا بیه، و نوم کاریاری شما دیه د ای ویکی نیئش.",
-       "loginlanguagelabel": "زون:$1",
+       "loginlanguagelabel": "زÙ\88Ù\99Ù\86:$1",
        "suspicious-userlogout": "درحاست وه در رئتن شما انکار بیه سی یه کل وه نظر میا که د یه گل دووارته نیئر گن یا یه گل پروکسی که ها د ویرگه نهو کل بیه",
        "createacct-another-realname-tip": "نوم راستکی دل به حائه.\nار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار   سی کاریاش وه کار گرته بوئه.",
-       "pt-login": "وا مین اومائن",
-       "pt-login-button": "وا مین اومائن",
+       "pt-login": "ڤامین ئوٙمائن",
+       "pt-login-button": "ڤامین ئوٙمائن",
        "pt-createaccount": "يه گل حساو راس بكيد",
        "pt-userlogout": "د سامونه دراومائن",
        "php-mail-error-unknown": "خطا نادیار مین آلشت ون PHP's mail()",
        "resetpass_forbidden": "رازینه گواردناتون نتونن آلشت بوئن",
        "resetpass-no-info": "شما با بیایت د سامونه تا د ای بلگه دسرسی داشتویت",
        "resetpass-submit-loggedin": "رازینه گواردن نه آلشت بكيت",
-       "resetpass-submit-cancel": "اÙ\86جÙ\88Ù\85 Ø´Û\8cÙ\88سن",
+       "resetpass-submit-cancel": "Ø£Ù\86جÙ\88Ù\85 Ø´Û\8cڤئستئن",
        "resetpass-wrong-oldpass": "رازینه گواردن تازه یا موقتی نامعتور.\nشات شما ایسنی یا رازینه گواردن خوتونه د خوئی آلشت دئیته یا یه گل رازینه گواردن موقت هنی درحاست دئیته.",
        "resetpass-recycled": "لطفن رازینه گواردن خوتونه سی چیا تر د رازینه گواردن ایسنی د نو زنه بکیت",
        "resetpass-temp-emailed": "شما وا یه گل رازینه موقتی که انجوما گر بیه  اومایته وامین.\nسی تموم کردن اومائن وامین، یه گل رازینه گواردن هنی د ایچه  جاگر بکیت.",
        "resetpass-validity-soft": "رازینه گواردتون تو معتور نئ:$1\n\nلطفن یه گل رازینه گواردن هنی انتخاو بکیت، یا ری ایچه \"{{int:resetpass-submit-cancel}}\" سی د نو زنه کردن وه د نهاتر بپورنیت.",
        "passwordreset": "د نۈ وارد كردن رازینه گواردن",
        "passwordreset-text-one": "ای نوم بلگه نه سی گرتن یه گل رازینه گواردن موقتی وا انجومانامه پر بکیت.",
-       "passwordreset-text-many": "{{جمی:$1|یه گل د رشنه گه یا نه سی یه که رازینه گواردن موقتی وا انجومانامه گرته بوئه پر بکیت}}",
-       "passwordreset-legend": "د نۈ وارد كردن رازینه گواردن",
+       "passwordreset-text-many": "{{PLURAL:$1|یه گل د رشنه گه یا نه سی یه که رازینه گواردن موقتی وا انجومانامه گرته بوئه پر بکیت}}",
        "passwordreset-disabled": "نو کرد رازینه گواردن د ای ویکی ناکشتگر بیه.",
        "passwordreset-emaildisabled": "چی یا هنی انجومانامه د ای ویکی ناکشتگر بیه.",
        "passwordreset-username": "نوم کاریاری:",
-       "passwordreset-domain": "پوشگیر",
+       "passwordreset-domain": "پوشگئر",
        "passwordreset-capture": "انجومانامه نتیجه نه بوینیتو؟",
        "passwordreset-capture-help": "ار شما ای جعوه نه وارسی بکید. انجومانامه و خوئی اوسه که سی کاریار کل بیه بوئه بوینیتش.",
        "passwordreset-email": "تیرنشون انجومانامه",
        "passwordreset-emailelement": "نوم کاریاری: $1\nرازینه گواردن موقتی: $2",
        "passwordreset-emailsent": "رازینه گواردن هنی سی انجومانامه کل بیه.",
        "passwordreset-emailsent-capture": "رازینه گواردن تازه تو د انجومانامه تو که د هار نشو دئه بیه کل بیه",
-       "passwordreset-emailerror-capture": "رازینه گواردن د انجومانامه د نو زنه کننه راس بیه، و وه د هار دیاری می که، اما کل بیین وه د{{جنس:$2|کاریار}} شکست حرده:$1",
+       "passwordreset-emailerror-capture": "رازینه گواردن د انجومانامه د نو زنه کننه راس بیه، و وه د هار دیاری می که، اما کل بیین وه د{{GENDER:$2|کاریار}} شکست حرده:$1",
        "changeemail": "انجومانامه تو نه آلشت بکید",
        "changeemail-text": "ای نوم بلگه نه سی آلشت دئن تیرنشون انجومانامه تو پر بکیت. شما سی پشت راس کردن ای آلشت واس رازینه گواردن خوتونه وارد بکیت.",
        "changeemail-no-info": "شما با بیایت د سامونه تا د ای بلگه دسرسی داشتویت",
        "resettokens": "تازه کردن نشونه یا",
        "resettokens-text": "شما سی صلا دئن دسرسی وه رسینه یا خصوصی که ها د حساو ایچنی تو می تونیت دیارگریا نه د نو زنه بکیت.\n\nشما اوسنی واس ای کار بکیت که رسینه یا شما سی یه کسی تر بئر بیه یا د حساو شما چل بیه.",
        "resettokens-no-tokens": "هیژ نشونه ای سی تازه کردن نئ.",
-       "resettokens-legend": "تازه کردن نشونه یا",
        "resettokens-tokens": "نشونه یا:",
        "resettokens-token-label": "$1 (ارزشت تازه: $2)",
        "resettokens-watchlist-token": "دیارگر سی حردنی تورگه(اتم/آر اس اس) سی [[ویجه:سیل برگ|آلشت دئن بلگه یا د سیل برگتو]]",
        "newarticle": "تازه",
        "newarticletext": "شما وادما هوم پیوندی هئیت که وجود ناره.\nسی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[$1 ] سی دونسمنی بیشتر بکید).\nار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن دوارته نیئر تونه بپورنیت.",
        "anontalkpagetext": "----",
-       "noarticletext": "د تازه یا د ای بلگه نیسسه نی.\nشما می تونیت د[[Special:/{{PAGENAME}}|]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>   \n   [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.",
-       "noarticletext-nopermission": "د تازه یا د ای بلگه نیسسه نی.\nشما می تونیت د[[Special:/{{PAGENAME}}]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه  logs]</span>      اما شما حق ناریتو ای بلگه نه راس بکیت",
+       "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\" ثوت نبیه.",
        "yourdiff": "فرخيا",
        "copyrightwarning": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
        "copyrightwarning2": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
-       "longpageerror": "<strong>خطا:نیسسه شما  {{جمی:$1|یه کلوبایت|$1 کلوبایت}}  درازی نه دئه، که ونو د بیشرونه انازه{{جمی:$2|یه کلوبایت|$2 کلوبایت}} گپترن.</strong>\nنبوئه وه اماییه با.",
+       "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>زئنار:</strong> ای بلگه",
        "titleprotectedwarning": "<strong>زئنار:ای بلگه پر و پیم بیه سی یه که[[ویجه:نوم گه حقوق گرو|حقوق ویجه]] باید ونه دروس بکن .</strong>\nآخرین پهرستنومه دئه بیه سی سرچشمه دئن نهااماییه بیه:",
-       "templatesused": "{{جمی:$1|چوئه|چوئه یا}}د ای بلگه وه کار گرته بیه:",
-       "templatesusedpreview": "{{جمی:$1|چوئه|چوئه یا}}استفاده بیه د ای پیش سیل:",
-       "templatesusedsection": "{{جمی:$1|چوئه|چوئه یا}} وه کار گرته بیه د ای بخش:",
+       "templatesused": "{{PLURAL:$1|چوئه|چوئه یا}} د ای بلگه وه کار گرته بیه:",
+       "templatesusedpreview": "{{PLURAL:$1|چوئه|چوئه یا}}استفاده بیه د ای پیش سیل:",
+       "templatesusedsection": "{{PLURAL:$1|چوئه|چوئه یا}} وه کار گرته بیه د ای بخش:",
        "template-protected": "(پر و پیم بيه)",
        "template-semiprotected": "نصم و نیمه پر و پیم بیه",
        "hiddencategories": "ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ",
        "sectioneditnotsupported-title": "ویرایشت بهرجا حامین داری نبوئه",
        "sectioneditnotsupported-text": "ویرایشت بهرجایی د ای بلگه نئیش.",
        "permissionserrors": "خطا اجازه دئین",
-       "permissionserrorstext": "شما حق ناریت ونه انجوم بیئت, سی{{جمی:$1|دلیل|دلیلیا}} نهایی:",
+       "permissionserrorstext": "شما حق ناریت ونه انجوم بیئت, سی{{PLURAL:$1|دلیل|دلیلیا}} نهایی:",
        "permissionserrorstext-withaction": "شما سی $2 اجازه ناریت\nسی نهاگری {{PLURAL:$1|دلیل|دلیلیا}}:",
        "recreate-moveddeleted-warn": "'''زنهار شما بلگه ای که وادما پاکسا بیه هنی راس کردیته'''\nشما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.\nپاکسا بیئن و جمشت سی ای بلگه سی فراغتتو آماده بیه:",
        "moveddeleted-notice": "ای بلگه پاکسا بیه.\nپاکسا بین و جمشت ای بلگه سی سرچشمه دئین آماده بیه",
        "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 {{جمی:$2|واحونی|واحونیا}}، ایسه {{جمی:$1|$1 واحونی|$1 واحونیا}}ئه.",
+       "expensive-parserfunction-warning": "<strong>زئنار:</strong>ای بلگه مینونه دار واحونی دستوریا مئن اشکافت فره ای هئ.\n\nانازه و باید د کمتر با$2 {{PLURAL:$2|واحونی|واحونیا}}، ایسه {{PLURAL:$1|$1 واحونی|$1 واحونیا}}ئه.",
        "expensive-parserfunction-category": "بلگه یایی که واحونی پیوندگر خطا گرون فره ای ها دشو",
        "post-expand-template-inclusion-warning": "زنئار چوئه د ور گرته انازه ای یه که فره گپه.پاره ای د چوئه یا نه د ور نمیئره.",
        "post-expand-template-inclusion-category": "بلگیا د ور گرته چوئه ین که انازش د حد اومائه وه در",
        "undo-failure": "سی ری به ری بیئن ای ویرایشت وا ویرایشتیا مینجایی، نبوئه ای ویرایشت نه خومثی بکیت.",
        "undo-norev": "نبوئه ای ویرایشت نه خومثی بکیت سی یه که یا وجود ناره یا پاکسا بیه.",
        "undo-nochange": "وه نظر میا که ای ویرایشت د ایسنیا خومثی بیه.",
-       "undo-summary": "خومثی بیئن وانئری وا $1[[ویجه:هومیاریا/$2|$2]] ([[چک چنه کاریار:$2|چک چنه]])",
+       "undo-summary": "خومثی بیئن وانئری وا $1 [[Special:Contributions/$2|$2]] ([[User talk:$2|چک چنه]])",
        "undo-summary-username-hidden": "خومثی بیئن وانئری $1 وا یه گل کاریار قام بیه",
        "cantcreateaccounttitle": "نبوئه حساو راس بکید",
        "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
        "history-show-deleted": "فقط پاكسا بيه",
        "histfirst": "قديمي تري",
        "histlast": "تازه تري",
-       "historysize": "({{جمی:$1|1 بایت|$1 بایتیا}})",
+       "historysize": "({{PLURAL:$1|1 بایت|$1 بایتیا}})",
        "historyempty": "(حالی)",
        "history-feed-title": "ویرگار دوواره دیئن",
        "history-feed-description": "دوواره دیئن ویرگار سی بلگه د ویکی",
        "revdelete-no-file": "جانیا تیار بیه وجود ناره.",
        "revdelete-show-file-confirm": "شما د دل میهایت که وانئری پاکسا بیه ای جانیا نه بونیت \"<nowiki>$1</nowiki>\" د $2 تا $3؟",
        "revdelete-show-file-submit": "هری",
-       "revdelete-selected-text": "{{جمی:$1|وانیری گل گر بیه|وانیری گل گر بیه}} د [[:$2]]:",
-       "revdelete-selected-file": "{{جمی:$1|وانیری گل گر بیه|وانیری گل گر بیه}} د [[:$2]]:",
-       "logdelete-selected": "{{جمی:$1|پهرستنومه رخ ونیا انتخاو بیه|پهرستنومه رخ ونیا انتخاو بیه}}:",
+       "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-suppress": "پاکساگری کردن رسینه یا سی دیوونداریا و کسونا تر",
        "revdelete-unsuppress": "محدودیتیانه د وانیریا امباربیه جا وه جا بکید",
        "revdelete-log": "دلیل:",
-       "revdelete-submit": "سی {{جمی:$1|وانیری|وانیریا}} انتخاو بیه وه کار بوریتو",
+       "revdelete-submit": "سی {{PLURAL:$1|وانیری|وانیریا}} انتخاو بیه وه کار بوریتو",
        "revdelete-success": "'''دیئن وانیری وه خوئی وه هنگوم بی.'''",
        "revdelete-failure": "'''دیئن وانیری وه خوئی وه هنگوم نبی:'''$1",
        "logdelete-success": "پهرستنومه دیار بیین د خوئی میزونکاری بی.",
        "mergehistory-go": "ویرایشتیایی که سریک سازی بوئن نشو بیئه",
        "mergehistory-submit": "سر یک سازی دوواره دیئنیا",
        "mergehistory-empty": "هیپ دوواره دیئنی نبوئه یکی سازی بوئه.",
-       "mergehistory-success": "$3 {{جمی:$3|وانیری|وانیریا}} د [[:$1]] وه خوئی د [[:$2]] سریک سازی بی.",
+       "mergehistory-success": "$3 {{PLURAL:$3|وانیری|وانیریا}} د [[:$1]] وه خوئی د [[:$2]] سریک سازی بی.",
        "mergehistory-fail": "سریک سازی ویرگار انجوم نبوئه، لطفن پینیاریا گات و بلگه نه د نو وارسی بکید.",
        "mergehistory-fail-toobig": "نبوئه وه یک شیوسن ویرگا انجوم دئه سی یکه وه بیشتر د محدودیت $1 {{PLURAL:$1|نسقه}}جا وه جا موئه.",
        "mergehistory-no-source": "سرچشمه بلگه $1 وجود ناره.",
        "diff-empty": "(بی فرق)",
        "diff-multi-sameuser": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
        "diff-multi-otherusers": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
-       "diff-multi-manyusers": "({{جمی:$1|یه گل وانیری مینجاگرته|$1وانیریا مینجا گرته}} بیشتر د $2 {{جمی:$2|کاریار|کاریاریا}} نشو دئه نبیه)",
+       "diff-multi-manyusers": "({{PLURAL:$1|یه گل وانیری مینجاگرته|$1وانیریا مینجا گرته}} بیشتر د $2 {{PLURAL:$2|کاریار|کاریاریا}} نشو دئه نبیه)",
        "difference-missing-revision": "{{PLURAL:$2|یه گل ویرایشت|$2 ویرایشت}} د فرق مینجا($1) {{PLURAL:$2|پیدا نبی|پیدا نبینه}}.\n\nشایت بانی جاونه وه وا یه گل ویرگار وه هنگوم نبیه که د یه گل بلگه پاکسا بیه هوم پیوند بیه بوئه.\nشایت جزئیات د   [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]  پیدا بوئن.",
        "searchresults": "نتيجه يا پی جوری",
        "searchresults-title": "نتيجه يا پی جوری سی \"$1\"",
        "next-page": "بلگه نهایی",
        "prevn-title": "پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}",
        "nextn-title": "نيايی $1 {{PLURAL:$1|نتيجه|نتيجيا}}",
-       "shown-title": "نشون دئن $1 {{جمی:$1|نتيجه|نتيجه}} سی هر بلگه",
+       "shown-title": "نشون دئن $1 {{PLURAL:$1|نتيجه|نتيجه}} سی هر بلگه",
        "viewprevnext": "ديئن ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''ایچه بلگه ای هئ وه نوم\"[[:$1]]\" که ها د ای ویکی'''",
        "searchmenu-new": "'''ای بلگه نه راس كو \"[[:$1]]\" د ای  ويكي!'''",
        "searchprofile-images-tooltip": "جانیایانه پی جوری کو",
        "searchprofile-everything-tooltip": "همه مینونه یا نه پی جوری كو (شاملا بلگيا چك چنه)",
        "searchprofile-advanced-tooltip": "نوم جايا نوم ديار بگرد",
-       "search-result-size": "$1 ({{جمی:$2|1 کلیمه|$2 کلیمه یا}})",
-       "search-result-category-size": "{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 جانیا|$3 جانیایا}}",
+       "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)",
        "prefs-editwatchlist-raw": "ویرایشت ردیفی سیل برگ",
        "prefs-editwatchlist-clear": "سیل برگه تونه پاک بکیت",
        "prefs-watchlist-days": "روزیا نه د سیل برگ نشو دئه بو:",
-       "prefs-watchlist-days-max": "$1 بیشترونه {{جمی:$1|روز|روزیا}}",
+       "prefs-watchlist-days-max": "$1 بیشترونه {{PLURAL:$1|روز|روزیا}}",
        "prefs-watchlist-edits": "بیشترونه انازه آلشتیایی که د سیل برگ گپ بیه نشو دئه بیه:",
        "prefs-watchlist-edits-max": "شماره بیشترونه:1000",
        "prefs-watchlist-token": "نشونه سیل برگ:",
        "stub-threshold": "آستونه ویرایشتیا د یک دیسسه<a href=\"#\" class=\"stub\">ناقص</a> (بایت):",
        "stub-threshold-disabled": "د كار ونن",
        "recentchangesdays": "روزیا آلشتیا تازه باو نه نشو بیه:",
-       "recentchangesdays-max": "$1 بیشترونه {{جمی:$1|روز|روزیا}}",
+       "recentchangesdays-max": "$1 بیشترونه {{PLURAL:$1|روز|روزیا}}",
        "recentchangescount": "انازه ویرایشتیایی که دیاری می که:",
        "prefs-help-recentchangescount": "یه شامل آلشتیا تازه،ویرگاریا بلگه و پهرستنومه یا هئ.",
        "prefs-help-watchlist-token2": "یه یه گل کلیت رازینه دار سی خوارک تیارگه سیل برگه شمانه.\nهر کسی که شما مئشناسیت می تونه سیل برگ شما نه بوحونه،په ونه هومبئری نکیت.[[Special:ResetTokens|ار لازمه ونه آلشت بئیت ایچه نه بپورنیت]].",
        "prefs-reset-intro": "شما می تونیت ای بلگه سی د نو زنه کردن ترجیحات خوت وه شکل تیارگه پیش فرض وه کار بوونیت.\nیه ورئشت پذیر نئ.",
        "prefs-emailconfirm-label": "پش راست کردن انجومانامه:",
        "youremail": "انجومانامه:",
-       "username": "{{جنس:$1|نوم کاریاری}}:",
-       "prefs-memberingroups": "{{جنس:$2|اندوم}}  {{جمی:$1|گرویا|گرویا}}:",
+       "username": "{{GENDER:$1|نوم کاریاری}}:",
+       "prefs-memberingroups": "{{GENDER:$2|اندوم}}  {{PLURAL:$1|گرویا|گرویا}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "گات ثوت نام:",
        "prefs-registration-date-time": "$1",
        "group-bureaucrat": "بروکراتیا",
        "group-suppress": "تیه پایا",
        "group-all": "(همه)",
-       "group-user-member": "{{جنس:$1|کاریار}}",
-       "group-autoconfirmed-member": "{{جنس:$1|کاریار خودانجومکار}}",
+       "group-user-member": "{{GENDER:$1|کاریار}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|کاریار خودانجومکار}}",
        "group-bot-member": "{{حنس:$1|بوت}}",
-       "group-sysop-member": "{{جنس:$1|دیووندار}}",
-       "group-bureaucrat-member": "{{جنس:$1|بروکرات}}",
-       "group-suppress-member": "{{جنس:$1|تیه پا}}",
+       "group-sysop-member": "{{GENDER:$1|دیووندار}}",
+       "group-bureaucrat-member": "{{GENDER:$1|بروکرات}}",
+       "group-suppress-member": "{{GENDER:$1|تیه پا}}",
        "grouppage-user": "{{ns:project}}:کاریاریا",
        "grouppage-autoconfirmed": "{{ns:project}}:کاریار خودانجومکار",
        "grouppage-bot": "{{ns:project}}:بوت یا",
        "action-managechangetags": "راس کردن و پاکسا کردن سردیسیا د رسینه جا",
        "action-applychangetags": "سردیسیا نه واگرد آلشتیایی که خوتو دئیته وه کار بیئریت",
        "action-changetags": "اضاف کردن یا جا وه جاکاری سردیسیا دل وه حایی د وانئریا و پهرستنومه یا شخصی",
-       "nchanges": "$1 {{جمی:$1|آلشت|آلشتیا}}",
-       "enhancedrc-since-last-visit": "$1 {{جمی:$1|د آخری دیئن}}",
+       "nchanges": "$1 {{PLURAL:$1|آلشت|آلشتیا}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|د آخری دیئن}}",
        "enhancedrc-history": "ويرگار",
        "recentchanges": "آلشتیا ایسنی",
        "recentchanges-legend": "گزینه یا آلشتیا ایسنی",
        "newpageletter": "ن",
        "boteditletter": "ب",
        "unpatrolledletter": "!",
-       "number_of_watching_users_pageview": "[$1 دینه {{جمی:$1|کاریار|کاریاریا}}]",
+       "number_of_watching_users_pageview": "[$1 دینه {{PLURAL:$1|کاریار|کاریاریا}}]",
        "rc_categories": "دسه یا نه محدود کو(وا \"|\" جگا بوئن",
        "rc_categories_any": "هرکوم",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 {{جمی:$1|بایت|بایتیا}} نها آلشتکاری",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتیا}} نئها آلئشتکاری",
        "newsectionsummary": "/* $1 */ بهرجا تازه",
        "rc-enhanced-expand": "جزيات نشون بيئه",
        "rc-enhanced-hide": "جزياته قام كو",
        "withoutinterwiki-legend": "پیشون",
        "withoutinterwiki-submit": "نشون دائن",
        "fewestrevisions": "بلگه یایی که کمتری وانئری نه دارن",
-       "nbytes": "$1{{جمی:$1|بايت|بایتیا}}",
-       "ncategories": "$1{{جمی:$1|دسه|دسه يا}}",
-       "ninterwikis": "$1 {{جمی:$1|مئن ویکی|مئن ویکیا}}",
-       "nlinks": "$1 {{جمی:$1|هوم پیوند|هوم پیوندیا}}",
+       "nbytes": "$1{{PLURAL:$1|بايت|بایتیا}}",
+       "ncategories": "$1{{PLURAL:$1|دسه|دسه يا}}",
+       "ninterwikis": "$1 {{PLURAL:$1|مئن ویکی|مئن ویکیا}}",
+       "nlinks": "$1 {{PLURAL:$1|هوم پیوند|هوم پیوندیا}}",
        "nmembers": "$1 {{PLURAL:$1|اندوم|اندوميا}}",
-       "nmemberschanged": "$1 → $2 {{جمی:$2|اندوم|اندومیا}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|اندوم|اندومیا}}",
        "nrevisions": "$1 {{جمس:$1|وانئری|وانئریا}}",
-       "nviews": "$1 {{جمی:$1|دیئن|دیئنیا}}",
-       "nimagelinks": "$1 {{جمی:$1|بلگه|بلگيا}} استفاده بیه",
-       "ntransclusions": "$1 {{جمی:$1|بلگه|بلگيا}} استفاده بیه",
+       "nimagelinks": "$1 {{PLURAL:$1|بلگه|بلگيا}} استفاده بیه",
+       "ntransclusions": "$1 {{PLURAL:$1|بلگه|بلگيا}} استفاده بیه",
        "specialpage-empty": "نتیجه ای د ای گزارشت نئ.",
        "lonelypages": "بلگه یا تک منه",
        "lonelypagestext": "د بلگه یا هاری هیچ بلگه هنی د {{SITENAME}} هوم پیوند نبیه و د هیچ بلگه هنی مین چین نبیه.",
        "listusers-editsonly": "فقط کاروریایی که ویرایشت می کن نشو بیه",
        "listusers-creationsort": "سرجاخودگری د اساس گات دروس بیین",
        "listusers-desc": "سرجاخودگری د اساس گپ د کؤچک",
-       "usereditcount": "$1{{جمی:$1|ویرایشت|ویرایشتیا}}",
+       "usereditcount": "$1{{PLURAL:$1|ویرایشت|ویرایشتیا}}",
        "usercreated": "{{جنسیت:$3|راس بیه}}د $1 at $2",
        "newpages": "بلگيا نو",
        "newpages-username": "نوم كاروری:",
        "notargettext": "شما بلگه یا کاریاری مقصدی سی انجوم دئن ای کنشت ریش انتخاو نکردیته.",
        "nopagetitle": "چنی بلگه ای نیئش",
        "nopagetext": "بلگه حاستنی که شما دیاری کردیته وجود ناره.",
-       "pager-newer-n": "{{جمی:$1|وانها تر 1وانها تر $1}}",
-       "pager-older-n": "{{جمی:$1|گپسالتر 1|گپسالتر $1}}",
+       "pager-newer-n": "{{PLURAL:$1|وانها تر 1وانها تر $1}}",
+       "pager-older-n": "{{PLURAL:$1|گپسالتر 1|گپسالتر $1}}",
        "suppress": "پائیئن",
        "querypage-disabled": "ای بلگه ویجه سی دلیلیا انجومکاری ناکشتگر بیه.",
        "apihelp": "هومیاری آی پی آی",
        "listgrouprights-members": "(نوم گه اندومیا)",
        "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
        "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
-       "listgrouprights-addgroup": "{{جمی:$2|گرویا|گرویا}} اضاف بکیتو: $1",
-       "listgrouprights-removegroup": "{{جمی:$2|گرویا|گرویا}} ورداریت: $1",
+       "listgrouprights-addgroup": "{{PLURAL:$2|گرویا|گرویا}} اضاف بکیتو: $1",
+       "listgrouprights-removegroup": "{{PLURAL:$2|گرویا|گرویا}} ورداریت: $1",
        "listgrouprights-addgroup-all": "همه گرویا نه اضاف کو",
        "listgrouprights-removegroup-all": "همه گرویا نه وردار",
-       "listgrouprights-addgroup-self": " {{جمی:$2|گروه|گرویا}} نه د حساو: $1 اضاف کو",
-       "listgrouprights-removegroup-self": "{{جمی:$2|گرویا|گرویا}} نه د حساو ورداریت: $1",
+       "listgrouprights-addgroup-self": " {{PLURAL:$2|گروه|گرویا}} نه د حساو: $1 اضاف کو",
+       "listgrouprights-removegroup-self": "{{PLURAL:$2|گرویا|گرویا}} نه د حساو ورداریت: $1",
        "listgrouprights-addgroup-self-all": "همه گرویا نه د حساو خوشو اضاف بکیت",
        "listgrouprights-removegroup-self-all": "همه گرویا نه د حساو خوشو ورداریت",
        "listgrouprights-namespaceprotection-header": "محدودیت نومجا",
        "mailnologin": "هیپچ نشونی یی کل نبیه",
        "mailnologintext": "سی کل کردن انجومانامه وه کاریاریا هنی واس [[Special:UserLogin|بیایت وامین سامونه]] و تیرنشون انجومانامه معتوری د [[Special:Preferences|ترجیحات]] خوتو داشتوئیت.",
        "emailuser": "ای كارور نه ايميل كو",
-       "emailuser-title-target": "ایمیل سی ای {{جنس:$1|کارور}}",
+       "emailuser-title-target": "ایمیل سی ای {{GENDER:$1|کارور}}",
        "emailuser-title-notarget": "ایمیل کارور",
        "emailpage": "ایمیل کارور",
        "emailpagetext": "شما می تونیت  نوم بلگه هار نه سی کل کردن یه گل انجومانامه وه ای  {{GENDER:$1|کاریار}} وه کار بئیرت.\nتیرنشون انجومانامه یی که د [[Special:Preferences|ترجیحات کاریارتو]] دئیه ته د تیرنشون کلکار انجومانامه میا، سی یه که گیرنه بتونه جواوش بیه.",
        "unwatchthispage": "واداشتن دیئن",
        "notanarticle": "مینونه هیچ بلگه ای نئ",
        "notvisiblerev": "آخری وانئری که د دس یه کاریار هنی انجوم بیه پاکسا بیه.",
-       "watchlist-details": "{{جمی:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی.",
+       "watchlist-details": "{{PLURAL:$1|$1 بلگه|$1 بلگیا}} د سیل برگتو هیش بلگه قسه کردن نی.",
        "wlheader-enotif": "وارسیاری ایمیل فعال بیه.",
        "wlheader-showupdated": "بلگه یایی که د آخرین کرتی که شما دشو دیئن کردیته آلشت بینه د <strong>توپر</strong>نشون دئه بینه",
        "wlnote": "د هار {{PLURAL:$1|آلشت|<strong>$1</strong> آلشتی}} که د {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} دماتر انجوم بیه هیئش، ویرگار آخرین واجوری انجام شده موجود است، ویرگار آخری واجوری: $3، $4",
        "namespace_association": "نوم جایا یکاگرته",
        "tooltip-namespace_association": "ای جعوه نه وارسی بکیت ای جعوه د ور گرته چک چنه یا داسون نوم ورگه شریکی و نوم ورگه انتخاو بیه ئه",
        "blanknamespace": "اصلی",
-       "contributions": "{{جنس:$1|کاریار}} هومیاریا",
+       "contributions": "{{GENDER:$1|کاریار}} هومیاریا",
        "contributions-title": "هومياري كارور سي $1",
        "mycontris": "هومياریا",
        "contribsub2": "سي {{جنسيت:$3|$1}} ($2)",
        "isredirect": "بلگه دوباره ورگشتن",
        "istemplate": "نشونی دئن",
        "isimage": "جانیا هوم پیوند",
-       "whatlinkshere-prev": "{{جمی:$1|دمایی|دمایی $1}}",
-       "whatlinkshere-next": "{{جمی:$1|نهایی|نهایی $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|دمایی|دمایی $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|نهایی|نهایی $1}}",
        "whatlinkshere-links": "هوم پیوندیا",
        "whatlinkshere-hideredirs": "$1 واگردونیا",
        "whatlinkshere-hidetrans": "$1 چن نتیجه یی",
        "movepage-max-pages": "بیشترونه انازه بلگه یا شایت سی ($1 {{PLURAL:$1|بلگه|بلگه یا}}) یی که بوئه جا وه جاکاری بوئن، جا وه جاکاری بیه و بلگه یا هنی نه نبوئه و شکل خودانجوم جا وه جاکاری کرد.",
        "movelogpage": "جاوه جا کردن",
        "movelogpagetext": "د هار یه گل نوم گه د جا وه جایی یا بلگه هئ",
-       "movesubpage": "{{جمی:$1|زیر بلگه|زیر بلگه یا}}",
+       "movesubpage": "{{PLURAL:$1|زیر بلگه|زیر بلگه یا}}",
        "movesubpagetext": "ای بلگه $1 زیربلگه داره که د زیر نشو {{PLURAL:|نشو دئه بیه|دئه بینه}}.",
        "movenosubpage": "ای بلگه زیر بلگه نئ.",
        "movereason": "دلیل:",
        "import-comment": "ویر و باور:",
        "importtext": "لطف بکیت  جانیا نه د ویکی سرچشمه وا هومیاری [[Special:Export|اوزار وه در دئن]] بئریت.\nاوسه ونه د دسگایا خوتو اماییه کاری بکیت و ایچه ونه سوار بکیت.",
        "importstart": "د حال و بار وامین اوردن",
-       "import-revision-count": "$1 {{جمی:$1|وانئری|وانئریا}}",
+       "import-revision-count": "$1 {{PLURAL:$1|وانئری|وانئریا}}",
        "importnopages": "هیچ بلگه ای وامین نیومائه.",
        "imported-log-entries": "$1 {{PLURAL:$1|داده وار پهرستنومه|داده وار پهرستنومه یا}} وامین اومائه.",
        "importfailed": "وامین اوردن شکست حرده: <nowiki>$1</nowiki>",
        "import-rootpage-nosubpage": "نومجا \"$1\" بلگه پایه صلا زیر بلگه نه نمی یه.",
        "importlogpage": "پهرستنومه دئن",
        "importlogpagetext": "وامین اوردن بلگه یا وا ویرگارچه ویرایشت ونو د ویکی یا هنی",
-       "import-logentry-upload-detail": "$1 {{جمی:$1|وانئری|وانئریا}} وامین اومانه",
-       "import-logentry-interwiki-detail": "$1 {{جمی:$1|وانئری|وانئریا}} د $2 وامین اومائنه",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|وانئری|وانئریا}} وامین اومانه",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|وانئری|وانئریا}} د $2 وامین اومائنه",
        "javascripttest": "ازمایشت کردن جاوا اسکریپت",
        "javascripttest-pagetext-noframework": "ای بلگه سی انجوم دئن ازمایشتیا جاوا اسکریپت اماییه کاری بیه.",
        "javascripttest-pagetext-unknownframework": "چوئه کار نادیار ازمایشت \"$1\"",
        "tooltip-summary": "يه چكسته كؤچك وارد بكيد",
        "interlanguage-link-title": "$1-$2",
        "interlanguage-link-title-nonlang": "$1 – $2",
-       "anonymous": "ناشناس {{جمی:$1|کارور|کاروریا}}  {{سیل جا}}",
+       "anonymous": "ناشناس {{PLURAL:$1|کارور|کاروریا}}  {{سیل جا}}",
        "siteuser": "{{نوم سیلجا}} کارور $1",
        "anonuser": "{{سیل جا}}  کارور ناشناس $1",
        "lastmodifiedatby": "ای بلگه آخری بار د $1,$2 وه دس $2 آلشت دئه بیه.",
        "othercontribs": "د اساس کار وا $1.",
        "others": "دیه رون",
-       "siteusers": "{{نوم سیل جا}} {{جمی:$2|کارور|کاروریا}} $1",
-       "anonusers": "{{نوم سیل جا}} نادیار {{جمی:$2|کاریار|کاریاریا}} $1",
+       "siteusers": "{{نوم سیل جا}} {{PLURAL:$2|کارور|کاروریا}} $1",
+       "anonusers": "{{نوم سیل جا}} نادیار {{PLURAL:$2|کاریار|کاریاریا}} $1",
        "creditspage": "اعتوار بلگه",
        "nocredits": "دونسمنیا راس کننه یا ای بلگه د دسرس نئ",
        "spamprotectiontitle": "فیلتر پر و پیم گری د اسپم",
        "pageinfo-recent-edits": "شماره ویرایشتیا ایسنی (د $1 دماتر)",
        "pageinfo-recent-authors": "شماره کلی نویسنه یا یکونه",
        "pageinfo-magic-words": "جادویی{{PLURAL:$1|کلیمه|کلیمه یا}} ($1)",
-       "pageinfo-hidden-categories": "$1{{جمی:$1|دسه|دسه يا}} قام بیه",
+       "pageinfo-hidden-categories": "$1{{PLURAL:$1|دسه|دسه يا}} قام بیه",
        "pageinfo-templates": "{{PLURAL:$1|چوئه|چوئه یا}} وه کار گرته بیه($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|بلگه|بلگه یا}} وه کار گرته بیه د ($1)",
        "pageinfo-toolboxlink": "دونسمنیا بلگه",
        "file-info-gif-looped": "حلقه دار",
        "file-info-gif-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
        "file-info-png-looped": "حلقه دار",
-       "file-info-png-repeat": "$1 بازی کرده{{جمی:$1|وخت|وختیا}}",
+       "file-info-png-repeat": "$1 بازی کرده{{PLURAL:$1|وخت|وختیا}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
        "file-no-thumb-animation": "'''د ویر داشتوئیت: سی مشگلیا فنی پیش نمایشت جانیا وه حال و بار جمشت دار نشو دئه نبوئه.'''",
        "file-no-thumb-animation-gif": "'''د ویر داشتوئیت: سی مشگلیا فنی پیش نمایشت جانیایا GIF چی یه وه حال و بار جمشت دار نشو دئه نبوئه.'''",
        "seconds": "{{PLURAL:$1|$1 ثانیه|$1 ثانیه یا}}",
        "minutes": "{{PLURAL:$1|$1 دیقه|$1 دیقه یا}}",
        "hours": "{{PLURAL:$1|$1 ساعت|$1 ساعت یا}}",
-       "days": "{{جمی:$1|1$ روز|$1 روز}}",
+       "days": "{{PLURAL:$1|1$ روز|$1 روز}}",
        "weeks": "{{PLURAL:$1|$1 هفته|$1 هفته یا}}",
-       "months": "{{جمی:$1|$1 ما|$1 مایا}}",
-       "years": "{{جمی:$1|$1 سال|$1 سال}}",
+       "months": "{{PLURAL:$1|$1 ما|$1 مایا}}",
+       "years": "{{PLURAL:$1|$1 سال|$1 سال}}",
        "ago": "$1 دماتر",
        "just-now": "فقط ایسه",
        "hours-ago": "$1 {{PLURAL:$1|ساعت |ساعتیا}} دماتر",
        "exif-gpslatitude-s": "پئنا ولاتشناسی هارگه",
        "exif-gpslongitude-e": "پئنا ولاتشناسی افتوزنون",
        "exif-gpslongitude-w": "پئنا ولاتشناسی افتونشین",
-       "exif-gpsaltitude-above-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
-       "exif-gpsaltitude-below-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|متر|متریا}} وارؤ د ریتراز دریا",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|متر|متریا}} وارؤ د ریتراز دریا",
        "exif-gpsstatus-a": "د حال و بار انازه یاری",
        "exif-gpsstatus-v": "ری وه ری یک کاری انازه یاری",
        "exif-gpsmeasuremode-2": "انازه یاری دو ورگه جایی",
        "confirm-watch-top": "ای بلگه نه د سیل برگتو اضاف می کید؟",
        "confirm-unwatch-button": "خوئه",
        "confirm-unwatch-top": "ای بلگه نه د سیل برگتو ؤرمیداریت؟",
-       "semicolon-separator": ";&#32;",
+       "semicolon-separator": "؛&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "pipe-separator": "&#32;|&#32;",
        "table_pager_empty": "هیچ نتیجه ای نئ",
        "autosumm-blank": "بلگه حالی",
        "autosumm-replace": "مینونه وا \"َ$1\" جاگزین بی",
-       "autoredircomment": "بلگه واگردونی بیه سی[[$1]]",
+       "autoredircomment": "بلگه واگردونی بیه سی [[$1]]",
        "autosumm-new": "راست کردن بلگه وه دس \"$1\"",
        "autosumm-newblank": "بلگه حالی دروس بیه",
        "lag-warn-normal": "شایت آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکن.",
        "tags-delete": "پاکسا کردن",
        "tags-activate": "کنشتیاری کردن",
        "tags-deactivate": "ناکنشتیاری کردن",
-       "tags-hitcount": "$1 {{جمی:$1|آلشت|آلشتیا}}",
+       "tags-hitcount": "$1 {{PLURAL:$1|آلشت|آلشتیا}}",
        "tags-manage-no-permission": "شما صلا یه نه که آلشت دئن سردیسیا نه دیوونداری بکیت ناریت.",
        "tags-create-heading": "راس کردن یه گل سردیس تازه",
        "tags-create-explanation": "د شکل پیش فرض، سردیسیا تازه ره وندیاری بیه سی وه کار گرتن کاریاریا و رباتیا هان د دسرس.",
        "duration-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
        "duration-minutes": "$1 {{PLURAL:$1|دیقه|دیقه یا}}",
        "duration-hours": "$1 {{PLURAL:$1|ساعت |ساعتیا}}",
-       "duration-days": "$1{{جمی:$1|روز|روزیا}}",
-       "duration-weeks": "$1 {{جمی:$1|هفته|هفته یا}}",
-       "duration-years": "$1{{جمی:$1| سال|سالیا}}",
+       "duration-days": "$1{{PLURAL:$1|روز|روزیا}}",
+       "duration-weeks": "$1 {{PLURAL:$1|هفته|هفته یا}}",
+       "duration-years": "$1{{PLURAL:$1| سال|سالیا}}",
        "duration-decades": "$1 {{PLURAL:$1|دهه|دهه یا}}",
        "duration-centuries": "$1 {{PLURAL:$1|سده|سده یا}}",
        "duration-millennia": "$1 {{PLURAL:$1|میلینیوم|ملینا}}",
index 64439a1..9c6bc6f 100644 (file)
@@ -30,7 +30,8 @@
                        "Vogone",
                        "아라",
                        "Aswanas",
-                       "Pofka"
+                       "Pofka",
+                       "Albertas"
                ]
        },
        "tog-underline": "Pabraukti nuorodas:",
        "badtitletext": "Nurodytas puslapio pavadinimas buvo neleistinas, tuščias arba neteisingai sujungtas tarpkalbinis arba tarpprojektinis pavadinimas. Jame gali būti vienas ar daugiau simbolių, neleistinų pavadinimuose.",
        "title-invalid-empty": "Prašomas puslapio pavadinimas yra tuščias arba jame yra tik tarpo simbolis.",
        "title-invalid-utf8": "Prašomo puslapio pavadinimas turi negalimą UTF-8 seką.",
-       "title-invalid-interwiki": "Pavadinimas turi interwiki nuorodą",
+       "title-invalid-interwiki": "Prašomo puslapio pavadinime yra vidinė viki nuoroda, kuri negali būti naudojama pavadinimuose.",
        "title-invalid-talk-namespace": "Prašomo puslapio pavadinimas nurodo į diskusijų puslapį, kuris negali egzistuoti.",
        "title-invalid-characters": "Prašomo puslapio pavadinimas turi negalimų simbolių: „$1“.",
        "title-invalid-relative": "Pavadinimas turi reliatyvų taką. Reliatyvūs puslapių pavadinimai (./, ../) yra negalimi, nes jie dažnai bus nepasiekiami vartotojo naršykle.",
        "title-invalid-magic-tilde": "Prašomo puslapio pavadinimas turi negalima magiška tildės seką (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Prašomo puslapio pavadinimas yra per ilgas. Jis turi būti ne ilgesnis nei $1 bitai UTF-8 koduotėje.",
+       "title-invalid-too-long": "Prašomo puslapio pavadinimas yra per ilgas. Jis turi būti ne ilgesnis nei {{PLURAL:$1|baitas|baitai}} UTF-8 koduotėje.",
        "title-invalid-leading-colon": "Prašomo puslapio pavadinimas turi neleistiną dvitaškį pradžioje.",
        "perfcached": "Rodoma išsaugota duomenų kopija, todėl duomenys gali būti ne patys naujausi. Maksimaliai $1 {{PLURAL:$1|rezultatas|rezultatai|rezultatų}} yra saugoma.",
        "perfcachedts": "Rodoma išsaugota duomenų kopija, kuri buvo atnaujinta $2 $3. Maksimaliai $4 {{PLURAL:$4|rezultatas|rezultatai|rezultatų}} yra saugoma.",
        "passwordreset": "Atstatyti slaptažodį",
        "passwordreset-text-one": "Užpildykite šią formą, norėdami atkurti savo slaptažodį.",
        "passwordreset-text-many": "{{PLURAL:$1|Užpildykite vieną iš laukų slaptažodžio atkūrimui.}}",
-       "passwordreset-legend": "Atstatyti slaptažodį",
        "passwordreset-disabled": "Slaptažodžių atstatymai šiame wikyje išjungti.",
        "passwordreset-emaildisabled": "El. pašto funkcijos uždraustos šiame wiki.",
        "passwordreset-username": "Naudotojo vardas:",
        "resettokens": "Atnaujinti žetonus",
        "resettokens-text": "Jūs galite atnaujinti žetonus, kurie suteikia prieigą prie tam tikros privačios informacijos susijusios su jūsų paskyra čia.\n\nJūs turėtumėte tai padaryti jei netyčia jais pasidalinote su kuo nors arba jei jūsų paskyra buvo pavojuje.",
        "resettokens-no-tokens": "Nėra žetonų, kuriuos galima atnaujinti.",
-       "resettokens-legend": "Atnaujinti žetonus",
        "resettokens-tokens": "Žetonai:",
        "resettokens-token-label": "$1 (dabartinė reikšmė: $2)",
        "resettokens-watchlist-token": "Žetonas skirtas interneto pateikčiai (Atom/RSS) [[Special:Watchlist|pakeitimai puslapiuose, kuriuose jūs stebite]]",
        "creating": "Kuriama $1",
        "editingsection": "Taisomas $1 (skyrelis)",
        "editingcomment": "Taisomas $1 (naujas skyrius)",
-       "editconflict": "Išpręskite konfliktą: $1",
+       "editconflict": "Jūsų pakeitimai negali būti įrašyti dėl redagavimo konflikto. Ar norite išspręsti konfliktą rankiniu būdu?",
        "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",
        "yourdiff": "Skirtumai",
        "copyrightwarning": "Primename, kad viskas, kas patenka į {{SITENAME}}, yra laikoma paskelbtu pagal $2 (detaliau - $1). Jei nenorite, kad jūsų indėlis būtų be gailesčio redaguojamas ir platinamas, čia nerašykite.<br />\nJūs taip pat pasižadate, kad tai jūsų pačių rašytas turinys arba kopijuotas iš viešų ar panašių nemokamų šaltinių.\n'''NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!'''",
        "copyrightwarning2": "Primename, kad viskas, kas patenka į {{SITENAME}} gali būti redaguojama, perdaroma, ar pašalinama kitų naudotojų. Jei nenorite, kad jūsų indėlis būtų be gailesčio redaguojamas, čia nerašykite.<br />\nTaip pat jūs pasižadate, kad tai jūsų pačių rašytas tekstas arba kopijuotas\niš viešų ar panašių nemokamų šaltinių (detaliau - $1).\n'''NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!'''",
+       "editpage-cannot-use-custom-model": "Šio puslapio turinio modelis negali būti pakeistas.",
        "longpageerror": "'''KLAIDA: Tekstas, kurį pateikėte, yra $1 {{PLURAL:$1|kilobaito|kilobaitų|kilobaitų}} ilgio, tai yra didesnis nei yra leistina. Yra leidžiami tiktai $2 {{PLURAL:$2|kilobaitas|kilobaitai|kilobaitų}}.''' Jis nebus išsaugotas.",
        "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:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Tuščias objektas",
        "content-json-empty-array": "Tuščias masyvas",
+       "duplicate-args-warning": "<strong>Pastaba:</strong>[[:$1]] kviečia [[:$2]] su daugiau nei viena $3 parametro reikšme. Bus naudojama tik paskutinė pateiktoji reikšmė.",
        "duplicate-args-category": "Puslapiai, naudojantys pasikartojančias skiltis iššaukiant šablonus",
        "duplicate-args-category-desc": "Puslapiai, turintys šablonų, naudojančių pasikartojančias skiltis, iššaukimus, pavyzdžiui <nowiki>{{foo|bar=1|bar=2}}</nowiki></code> arba <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Įspėjimas: Šiame puslapyje yra per daug užtrunkančių analizatoriaus funkcijų šaukinių.\n\nTai turėtų būti mažiau nei $2 {{PLURAL:$2|šaukinys|šaukiniai|šaukinių}}, tačiau dabar yra $1 {{PLURAL:$1|šaukinys|šaukiniai|šaukinių}}.",
        "badsig": "Neteisingas parašas; patikrinkite HTML žymes.",
        "badsiglength": "Jūsų parašas per ilgas.\nJį turi sudaryti ne daugiau kaip $1 {{PLURAL:$1|simbolis|simboliai|simbolių}}.",
        "yourgender": "Lytis:",
-       "gender-unknown": "Aš nenoriu pasakyti",
+       "gender-unknown": "Jus minėdama programinė įranga naudos kuo neutralesnės giminės žodžius",
        "gender-male": "Vyras",
        "gender-female": "Moteris",
        "prefs-help-gender": "Pasirinktinai: naudojama teisingam sistemos kreipimuisi į jus.\nŠi informacija yra vieša.",
        "userrights-lookup-user": "Tvarkyti naudotojo grupes",
        "userrights-user-editname": "Įveskite naudotojo vardą:",
        "editusergroup": "Redaguoti naudotojo grupes",
-       "editinguser": "Taisomos naudotojo '''[[User:$1|$1]]''' $2\nteisės",
+       "editinguser": "Redaguojamos {{GENDER:$1|naudotojo}} <strong>[[User:$1|$1]]</strong> $2 teisės",
        "userrights-editusergroup": "Redaguoti naudotojų grupes",
        "saveusergroups": "Saugoti naudotojų grupes",
        "userrights-groupsmember": "Narys:",
        "uploaddisabledtext": "Failų įkėlimai yra uždrausti.",
        "php-uploaddisabledtext": "Failų įkėlimai uždrausti PHP nustatymuose.\nPatikrinkite ''file_uploads'' nustatą.",
        "uploadscripted": "Šis failas turi HTML arba programinį kodą, kuris gali būti klaidingai suprastas interneto naršyklės.",
+       "upload-scripted-pi-callback": "Negalima įkelti failo, kuriame yra XML-stilių failo apdorojimo instrukcijos.",
+       "uploaded-script-svg": "Įkeltame SVG faile rastas programuojamas elementas \"$1\".",
+       "uploaded-hostile-svg": "Įkelto SVG failo stiliaus elemente rastas nesaugus CSS.",
+       "uploaded-event-handler-on-svg": "SVG failuose neleidžiamas event-handler atributų nustatymas <code>$1=\"$2\"</code>.",
+       "uploaded-href-attribute-svg": "SVG failuose neleidžiami nuorodos atributai <code>&lt;$1 $2=\"$3\"&gt;</code> su ne lokalia nukreiptimi (pvz. http://, javascript:, ir kt.).",
+       "uploaded-href-unsafe-target-svg": "Įkeltame SVG faile rasta nesaugi nukreiptis <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "Įkeltame SVG faile rasta \"animate\" žymė, kuri gali keisti nuorodas, panaudodama \"from\" atributą <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-event-handler-svg": "event-handler atributų nustatymas yra draudžiamas, įkeltame SVG faile rasta <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-href-svg": "\"set\" žymės naudojimas \"href\" atributo pridėjimui prie tėvinio elemento yra užblokuotas.",
+       "uploaded-wrong-setting-svg": "\"set\" žymės naudojimas remote/data/script tikslui pridėti prie bet kurio atributo yra užblokuotas. Įkeltame SVG faile rasta <code>&lt;set to=\"$1\"&gt;</code>.",
+       "uploaded-setting-handler-svg": "SVG, kurie nustato \"handler\" atributą naudodami remote/data/script, yra užblokuoti. Įkeltame SVG faile rasta <code>$1=\"$2\"</code>.",
+       "uploaded-remote-url-svg": "Užblokuoti SVG, kurie nustato style atributą naudodami nuotolinį URL. Įkeltame SVG faile rasta <code>$1=\"$2\"</code>.",
+       "uploaded-image-filter-svg": "Įkeltame SVG faile rastas paveikslėlio filtras su URL: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Šis SVG failas turi neteisėtą vietą vardui '$1'",
        "uploadinvalidxml": "XML įkeltoje rinkmenoje negali būti išnagrinėtas.",
        "uploadvirus": "Šiame faile yra virusas! Smulkiau: $1",
        "randomincategory-nopages": "[[:Category:$1|$1]] kategorijoje nėra puslapių.",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Atsitiktinis puslapis kategorijoje",
+       "randomincategory-submit": "Eiti",
        "randomredirect": "Atsitiktinis peradresavimas",
        "randomredirect-nopages": "Vardų srityje „$1“ nėra jokių peradresavimų.",
        "statistics": "Statistika",
        "nmembers": "$1 {{PLURAL:$1|narys|nariai|narių}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|narys|nariai|narių}}",
        "nrevisions": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}",
-       "nviews": "$1 {{PLURAL:$1|parodymas|parodymai|parodymų}}",
        "nimagelinks": "Naudojama $1 {{PLURAL:$1|puslapyje|puslapiuose|puslapių}}",
        "ntransclusions": "naudojama $1 {{PLURAL:$1|puslapyje|puslapiuose|puslapių}}",
        "specialpage-empty": "Šiai ataskaitai nėra rezultatų.",
        "unusedimages": "Nenaudojami failai",
        "wantedcategories": "Geidžiamiausios kategorijos",
        "wantedpages": "Geidžiamiausi puslapiai",
-       "wantedpages-summary": "Sąrašas neegzistuojančių puslapių su daugiausią nuorodų į juos, išskyrus puslapius, kurie turi tik nukreipimus į juos. Jei norite pamatyti sąrašą neegzistuojančių puslapių, su nukreipimais į juos,  žiūrėkite [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Sąrašas neegzistuojančių puslapių su daugiausią nuorodų į juos, išskyrus puslapius, kurie turi tik nukreipimus į juos. Jei norite pamatyti sąrašą neegzistuojančių puslapių, su nukreipimais į juos, žiūrėkite [[{{#special:BrokenRedirects}}|neveikiančių nuorodų sąrašą]].",
        "wantedpages-badtitle": "Neleistinas pavadinimas rezultatų rinkinyje: $1",
        "wantedfiles": "Trokštami failai",
        "wantedfiletext-cat": "Sekantys failai yra naudojami, bet neegzistuoja. Čia failai iš išorinių saugyklų gali būti išvardinti, nors jie jose ir egzistuoja. Failai netenkinantys šių sąlygų gali būti <del>perbraukti</del>. Papildomai peržiūrėkite [[:$1|puslapius]], kuriuose yra naudojami čia išvardinti neegzistuojantys failai.",
        "rollback-success": "Atmesti $1 pakeitimai;\ngrąžinta prieš tai buvusi $2 versija.",
        "sessionfailure-title": "Sesijos klaida",
        "sessionfailure": "Atrodo yra problemų su jūsų prisijungimo sesija; šis veiksmas buvo atšauktas kaip atsargumo priemonė prieš sesijos vogimą.\nPrašome paspausti „atgal“ ir perkraukite puslapį iš kurio atėjote, ir pamėginkite vėl.",
+       "changecontentmodel": "Keisti puslapio turinio modelį",
+       "changecontentmodel-legend": "Keisti turinio modelį",
+       "changecontentmodel-title-label": "Puslapio pavadinimas",
+       "changecontentmodel-model-label": "Naujas turinio modelis",
+       "changecontentmodel-reason-label": "Priežastis:",
+       "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-revertlink": "atšaukti",
+       "logentry-contentmodel-change-revert": "atšaukti",
        "protectlogpage": "Rakinimų sąrašas",
        "protectlogtext": "Žemiau yra puslapių užrakinimų bei atrakinimų sąrašas.\nDabar veikiančių puslapių apsaugų sąrašą rasite [[Special:ProtectedPages|apsaugotų puslapių sąraše]].",
        "protectedarticle": "užrakino „[[$1]]“",
        "tooltip-pt-logout": "Atsijungti",
        "tooltip-pt-createaccount": "Skatiname susikurti paskyrą ir prisijungti, tačiau, tai nėra privaloma",
        "tooltip-ca-talk": "Puslapio turinio aptarimas",
-       "tooltip-ca-edit": "Jūs galite redaguoti šį puslapį. Nepamirškite paspausti peržiūros mygtuką prieš išsaugodami.",
+       "tooltip-ca-edit": "Redaguoti šį puslapį",
        "tooltip-ca-addsection": "Pradėti naują aptariamą temą",
        "tooltip-ca-viewsource": "Puslapis yra užrakintas. Galite pažiūrėti turinį.",
        "tooltip-ca-history": "Ankstesnės puslapio versijos",
        "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-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į",
        "pageinfo-subpages-name": "Šio puslapio papuslapiai",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|peradresavimas|peradresavimai}}; $3 {{PLURAL:$3|neperadresavimas|peradresavimai}})",
        "version-libraries": "Įdiegtos bibliotekos",
        "version-libraries-library": "Biblioteka",
        "version-libraries-version": "Versija",
+       "version-libraries-license": "Licenzija",
+       "version-libraries-description": "Aprašymas",
+       "version-libraries-authors": "Autoriai",
        "redirect": "Nukreiptas iš failo, naudotojo arba versijos ID",
        "redirect-legend": "Nukreipti į failą ar puslapį",
        "redirect-summary": "Šis specialus puslapis peradresuoją į failą (nurodant failo pavadinimą), puslapį (nurodant versijos ID ar puslapio ID), arba vartotojo puslapį (nurodant skaitinį vartotojo ID).\nNaudojimas: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "log-name-pagelang": "Keisti kalbos žurnalą",
        "log-description-pagelang": "Tai pakeitimų žurnalas puslapio kalbomis.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|pakeitė}} puslapio kalbą $3 iš $4 į $5.",
-       "default-skin-not-found": "Ups! Numatytoji išvaizda jūsų viki, nustatyta <code dir=\"ltr\">$wgDefaultSkin</code> kaip <code>$1</code>, yra negalima.\n\nPanašu, kad jūsų instaliacija turi {{PLURAL:$4|šią išvaizdą|šias išvaizdas}}. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfiguracija] dėl informacijos kaip įgalinti {{PLURAL:$4|ją|jas ir pasirinkti numatytuosius}}.\n\n$2\n\n; Jei ką tik instaliavote MediaWiki:\n: Jūs tikriausiai instaliavote iš git arba tiesiai iš kodo naudojant kitą metodą. Tai tikėtina. Pabandykite įdiegti išvaizdas iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo]:\n:* Persisiunčiant  [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi kelius išvaizdas ir plėtinius. Jūs galite nukopijuoti ir įklijuoti <code>skins/</code> kataloge.\n:* Persiųsti individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonuojant vieną iš <code>mediawiki/skins/*</code> saugyklas per git į <code dir=\"ltr\">skins/</code> kataloge jūsų MediaWiki instaliacijoje.\n: Tai neturėtų trukdyti jūsų git saugyklai jei jūs esate MediaWiki kūrėjas.\n\n; Jei jūs ką tik atnaujinote MediaWiki:\n: MediaWiki 1.24 ir naujesnės versijos daugiau automatiškai neįgalina įdiegtas versijas (žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Instrukcija: Išvaizdų automatinis aptikimas]). Jūs galite įklijuoti {{PLURAL:$5|šią eilutę|šias eilutes}} į <code>LocalSettings.php</code>, kad įgalintumėte {{PLURAL:$5| |visus}} šiuo metu {{PLURAL:$5|įdiegtą išvaizdą|įdiegtas išvaizdas}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Jei jūs ką tik pakeitėte <code>LocalSettings.php</code>:\n: Dar kartą patikrinkite išvaizdą dėl galimų klaidų.",
-       "default-skin-not-found-no-skins": "Ups! Jūsų viki numatytoji išvaizdą, nurodyta <code>$wgDefaultSkin</code> <code>$1</code>, yra negalima.\n\nJūs neturi įdiegtų išvaizdų.\n\n; Jei ką tik instaliavote MediaWiki:\n: Jūs tikriausiai instaliavote iš git arba tiesiai iš kodo naudojant kitą metodą. Tai tikėtina. Pabandykite įdiegti išvaizdas iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo]:\n:* Persisiunčiant  [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi kelius išvaizdas ir plėtinius. Jūs galite nukopijuoti ir įklijuoti <code>skins/</code> kataloge.\n:* Persiųsti individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonuojant vieną iš <code>mediawiki/skins/*</code> saugyklas per git į <code dir=\"ltr\">skins/</code> kataloge jūsų MediaWiki instaliacijoje.\n: Tai neturėtų trukdyti jūsų git saugyklai jei jūs esate MediaWiki kūrėjas. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti išvaizdas ir pasirinkti numatytuosius.",
+       "default-skin-not-found": "Ups! Jūsų viki numatytoji išvaizda, nustatyta <code dir=\"ltr\">$wgDefaultSkin</code> kaip <code>$1</code>, yra negalima.\n\nPanašu, kad Jūsų instaliacija turi {{PLURAL:$4|šią išvaizdą|šias išvaizdas}}. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti {{PLURAL:$4|ją|jas ir pasirinkti numatytąją}}.\n\n$2\n\n; Jei ką tik įsidiegėte MediaWiki:\n: Jūs tikriausiai įsidiegėte iš git arba tiesiai iš kodo naudodami kitą metodą. To ir buvo tikimasi. Pabandykite įdiegti išvaizdų iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo]:\n:* Atsisiųsti [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi keletą išvaizdų ir plėtinių. Jūs galėsite nukopijuoti ir įklijuoti <code>skins/</code> katalogą iš jo.\n:* Atsisiųsti individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Naudoti Git išvaizdoms atsisiųsti].\n: Tai neturėtų trukdyti jūsų git saugyklai jei Jūs esate MediaWiki kūrėjas.\n\n; Jei Jūs ką tik atnaujinote MediaWiki:\n: MediaWiki 1.24 ir naujesnės versijos daugiau automatiškai nebeįgalina įdiegtų išvaizdų (žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Instrukcija: Išvaizdų automatinis aptikimas]). Jūs galite įklijuoti {{PLURAL:$5|šią eilutę|šias eilutes}} į <code>LocalSettings.php</code>, kad įgalintumėte {{PLURAL:$5||visus}} šiuo metu {{PLURAL:$5|įdiegtą išvaizdą|įdiegtas išvaizdas}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Jei Jūs ką tik pakeitėte <code>LocalSettings.php</code>:\n: Dar kartą patikrinkite išvaizdos pavadinimą ar nepadarėte spausdinimo klaidos.",
+       "default-skin-not-found-no-skins": "Ups! Jūsų viki numatytoji išvaizdą, nurodyta <code>$wgDefaultSkin</code> <code>$1</code>, yra negalima.\n\nJūs neturite įdiegtų išvaizdų.\n\n; Jei ką tik įsidiegėte MediaWiki:\n: Jūs tikriausiai įsidiegėte iš git arba tiesiai iš kodo naudodami kitą metodą. To buvo tikimasi. Pabandykite įsidiegti išvaizdų iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo] taip:\n:* Parsisiųsdami  [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi kelias išvaizdas ir plėtinius. Jūs galite nukopijuoti ir įklijuoti <code>skins/</code> katalogą iš jos.\n:* Persiųsdami individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Naudodami Git išvaizdų parsisiuntimui].\n: Tai neturėtų trukdyti Jūsų git saugyklai jei Jūs esate MediaWiki kūrėjas. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti išvaizdas ir pasirinkti numatytąją.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (įgalinta)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''išjungtas''')",
        "mediastatistics": "Medios statistika",
        "special-characters-group-khmer": "Khmerų",
        "special-characters-title-endash": "en brūkšnys",
        "special-characters-title-emdash": "em brūkšnys",
-       "special-characters-title-minus": "minuso ženklas"
+       "special-characters-title-minus": "minuso ženklas",
+       "mw-widgets-titleinput-description-new-page": "puslapis dar neegzistuoja",
+       "mw-widgets-titleinput-description-redirect": "nukreipti į $1"
 }
diff --git a/languages/i18n/luz.json b/languages/i18n/luz.json
new file mode 100644 (file)
index 0000000..bd21c65
--- /dev/null
@@ -0,0 +1,691 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bonevarluri",
+                       "علی ساکی لرستانی",
+                       "Mjbmr"
+               ]
+       },
+       "tog-underline": "لینکیا خط وه دومن",
+       "tog-hideminor": "قائم کردن ویرایشه یل کیچک مئن تغییره یل نو",
+       "tog-hidepatrolled": "قائم کردن ویرایشه یل کیچک مئن تغییره یل نو",
+       "tog-newpageshidepatrolled": "قائم کردن بلگه یل گشت مئنه لیست بلگه یل نو",
+       "tog-extendwatchlist": "گپ کردن بلگه یل  پیگیری یل سی نشو دائن تموم تغییره یل ، نه فقط هونو که جدید وابون",
+       "tog-usenewrc": "تغییره یل جمی توسط بلگه مئنه تغییره یل نو و نوم بلگه پیگیری",
+       "tog-numberheadings": "شماره وندن خودکار سی سرخط یل",
+       "tog-showtoolbar": "نشو دائن تولبار ویرایش",
+       "tog-editondblclick": "ویرایس بلگه یل با دو کلیژ",
+       "tog-editsectiononrightclick": "فعال کردن ویرایس قسمتل با یه کلیژ ری نوم او قسمت",
+       "tog-watchcreations": "وندن بلگه یلی ک مو ساختمه و فایلل ک مو بار کردمه مئنه نوم بلگه پیگیری",
+       "tog-watchdefault": "وندن بلگه یل و فایلل ک مو هونونه ساختمه مئنه نوم بلگه پیگیری",
+       "tog-watchmoves": "وندن بلگه یل و فایلل ک مو هونونه انتقال دامه مئنه نوم بلگه پیگیری",
+       "tog-watchdeletion": "وندن بلگه یل و فایلل ک مو هونونه حذف کردمه مئنه نوم بلگه پیگیری",
+       "tog-minordefault": "علامت دائن وه تغییره یل تموم نبیه",
+       "tog-previewontop": "نشو دائن پیش نمایش قبل یوکه جعبه یا کادر اصلاح وابوه",
+       "tog-previewonfirst": "نشو دائن پیش نمایش مئن اصلاح اول",
+       "tog-enotifwatchlistpages": "ایمیل و مو به یوکه یه بلگه یا فایل مئن نوم بلگه پیگیری مه تغییر کرد",
+       "tog-enotifusertalkpages": "ایمیل و مو به یوکه بلگه بحث مو تغییر کرد",
+       "tog-enotifminoredits": "ایمیل و مو به حتی سی اطلاحات تموم نبیه فایلل و بلگه یل",
+       "tog-enotifrevealaddr": "نشو دائن ایمیل مو مئن ایمیلل دونسمنی _ خه وری",
+       "tog-shownumberswatching": "نشو دائن شماره کاروران در حال تماشا",
+       "tog-oldsig": "هی دیسه امضا",
+       "tog-fancysig": " وا امضا چی ویکی متن برخورد کو ( بدون لینک اتوماتیک )",
+       "tog-uselivepreview": "زه پیش نمویش زه نَ استفاده کُ",
+       "tog-forceeditsummary": "و مو یادآوری سریع کُ هنگام اصلاح خالی و کوتاه",
+       "tog-watchlisthideown": "قائم کردن اصلاحات مو زه نوم بلگه پیگیری یل",
+       "tog-watchlisthidebots": "قائم کردن اصلاحات بوت زه نوم بلگه پیگیری یل",
+       "tog-watchlisthideminor": "قائم کردن اصلاحات کیچیک زه نوم بلگه پیگیری یل",
+       "tog-watchlisthideliu": "قائم کردن اصلاحاتی ک توسط کاوری یل داخل سیستم وابیده انجام وابیه زه نوم بلگه پیگیری یل",
+       "tog-watchlisthideanons": "قائم کردن اصلاحات انجام وابیه توسط کاروری یل داخل سیستم نوابیه زه نوم بلگه پیگیری",
+       "tog-watchlisthidepatrolled": "قائم کردن اصلاحات گشت زه نوم بلگه پیگیری",
+       "tog-ccmeonemails": "ارسال کوپی ایمیللی ک مو سی کاروری یل دیه ارسال کردم سی مو",
+       "tog-diffonly": "نشو نده بلگه ای که چیا متفاوت و زبر داره",
+       "tog-showhiddencats": "نشو دائن دسه بنی یل قائم وابیده",
+       "tog-norollbackdiff": "حذف تفاوت بدیکه عقبگرد انجام وابی",
+       "tog-useeditwarning": "منه هشدار بی وقتی که مو بلگه ای ک درحال ویرایش وابینه بدون ذخیره تغییرل ترک کردم",
+       "tog-prefershttps": "همیشه زه یه اتصال امن وقتی وارد وابی منه سیستم استفاده کو",
+       "underline-always": "همیشه",
+       "underline-never": "هیچ وقت",
+       "underline-default": "پوسته و یا مرورگر وطور پیش فرض",
+       "editfont-style": "ویرایس فونت استایل ولات",
+       "editfont-default": "مرورگر وطور پیش فرض",
+       "editfont-monospace": "فونت هم عرض",
+       "editfont-sansserif": "فونت بدون سریف",
+       "editfont-serif": "فونت سریف",
+       "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": "ای دسه الآن هیچ بلگه یا مدیا ناره",
+       "hidden-categories": "{{PLURAL:$1|دسە قائم|دسە یل قائم}}",
+       "hidden-category-category": "دسه بنی یل قائم",
+       "category-subcat-count": "{{PLURAL:$2|ای دسه فقط دسه یل فرعی دۉمنه دارھ.|ای دسه چیه یل دۉمنه دارھ {{PLURAL:$1|دسه فرعی|$1 دسه یل فرعی}}, بیشتر زھ $2 کل.}}",
+       "category-subcat-count-limited": "ای دسه چیه یل دومنه داره {{PLURAL:$1|دسه فرعی|$1 دسه یل فرعی}}.",
+       "category-article-count": "{{PLURAL:$2|ای دسه فقط  بلگه یل دۉمنه داره .|دۉمن الذکر{{PLURAL:$1|بلگه هس|$1 بلگه هسن}} مئن ای دسه, بیشتر زھ$2 کل.}}",
+       "category-article-count-limited": "دومن الذکر {{PLURAL:$1|بلگه هس|$1 بلگه هسن}} د او دسه جریانی.",
+       "category-file-count": "{{PLURAL:$2|ای دسه فقط فایلل دۉمنه دارھ.|دۉمن الذکر{{PLURAL:$1|فایل هس|$1 فایلل هسن}} د ای دسه, بیشتر زھ$2 کل.}}",
+       "category-file-count-limited": "دومن الذکر {{PLURAL:$1|فایل هس|$1 فایلل هسن}} د او دسه جریانی.",
+       "listingcontinuesabbrev": "دنباله",
+       "index-category": "بلگه یل ایندکس وابیده",
+       "noindex-category": "بلگه یل ایندکس نوابیده",
+       "broken-file-category": "بلگه یل وا فایلل لینک اشکسه",
+       "about": "درباره",
+       "article": "بلگه محتوا",
+       "newwindow": "(د یه پنجرھ دیه ۉا کۉ )",
+       "cancel": "لغو",
+       "moredotdotdot": "بیشتر...",
+       "morenotlisted": "ای نوم بلگه کامل نی",
+       "mypage": "بلگه",
+       "mytalk": "گپ",
+       "anontalk": "سی ای آدرس آی پی گپ بزه",
+       "navigation": "هدایت کردن",
+       "and": "&#32;ڤ",
+       "qbfind": "سیل کردن",
+       "qbbrowse": "نوم بلگه",
+       "qbedit": "اصلاح",
+       "qbpageoptions": "ای بلگه",
+       "qbmyoptions": "بلگه مو",
+       "faq": "اف آی کیو \" سوالل متداول \"",
+       "faqpage": "Project:اف آی کیو \" سوالل متداول \"",
+       "actions": "عملیه یل",
+       "namespaces": "هۉمدیرأنگل",
+       "variants": "أنۉاع",
+       "navigation-heading": "مأنۉ ناۉ ۉری",
+       "errorpagetitle": "خطا",
+       "returnto": "بازگشت وھ $1.",
+       "tagline": "زھ {{SITENAME}}",
+       "help": "هوٙمیاری",
+       "search": "جۉستأن",
+       "searchbutton": "جۉستأن",
+       "go": "رو",
+       "searcharticle": "رۉ",
+       "history": "تاریخچھ بلگه",
+       "history_short": "ڤیرگار",
+       "updatedmarker": "بروز وابی تا موقع آخرین سیل کردن مو",
+       "printableversion": "ڤیرژین سی چاپ",
+       "permalink": "لینکل دائمی",
+       "print": "چاپ",
+       "view": "نما",
+       "view-foreign": "نما مئن  $1",
+       "edit": "ئیصلاح",
+       "edit-local": "اصلاح توضیحتل محلی",
+       "create": "درست کردن",
+       "create-local": "ۉندن تۉضیحتل محلی",
+       "editthispage": "اصلاح ای بلگه",
+       "create-this-page": "درست کو ای بلگه نه",
+       "delete": "حذف",
+       "deletethispage": "حذف کو ای بلگه نه",
+       "undeletethispage": "حذف نکو ای بلگه نه",
+       "undelete_short": "ورگردونی {{PLURAL:$1|یه اصلاح|$1 اصلاحل}}",
+       "viewdeleted_short": "نما {{PLURAL:$1|یه اصلاح حذف وابیه|$1 اصلاحل حذف وابیه}}",
+       "protect": "حفاظت کردن",
+       "protect_change": "تغییر بی",
+       "protectthispage": "ای بلگنه حفاظت کو",
+       "unprotect": "تغییر دائن حالت حفاظت",
+       "unprotectthispage": "تغییر دائن حالت حفاظت ای بلگه",
+       "newpage": "بلگه نۉ",
+       "talkpage": "گپ زئن ای بلگه",
+       "talkpagelinktext": "گأپ",
+       "specialpage": "بلگه مخصوص",
+       "personaltools": "ئوزارگل سی خۉتی",
+       "articlepage": "سل کردن محتوا ای بلگه",
+       "talk": "قسە",
+       "views": "نمایل",
+       "toolbox": "ئوزارگە",
+       "userpage": "دیئن بلگه کارور",
+       "projectpage": "دیئن بلگه پروجه",
+       "imagepage": "دیئن بلگه فایل",
+       "mediawikipage": "دیئن بلگه پیوم",
+       "templatepage": "دیئن بلگه قالب",
+       "viewhelppage": "دیئن بلگه هومیاری",
+       "categorypage": "دیئن بلگه دسه بنی",
+       "viewtalkpage": "دیئن گپل",
+       "otherlanguages": "مئن زۉۉنل دیە",
+       "redirectedfrom": "(تصحیح مجدد زھ $1)",
+       "redirectpagesub": "بلگه تصحیح و هدایت زه مجدد",
+       "redirectto": "تغییر دائن مسیر ۉھ:",
+       "lastmodifiedat": "ئی بألگە اخیرا تأغییر ڤ ئیصلاح ڤابیە مأئنە $1, مأئنە $2.",
+       "viewcount": "ای بلگه قابل دسترسی وابیه {{PLURAL:$1|یه بار|$1 مدتل}}.",
+       "protectedpage": "بلگه حفاظت وابیه",
+       "jumpto": "پریدن ڤھ:",
+       "jumptonavigation": "هدایت کردن",
+       "jumptosearch": "جۉستأن",
+       "view-pool-error": "وبشید ، سرور بیش زه حد بارگیری وابیه .\nکارورل زیادی ایخن ای بلگنه سل کنن.\nلطفا یه لحظه واسیت قبلیکه به خیت ای بلگنه مجددا سل کیت.\n$1",
+       "generic-pool-error": "وبشید ، سرور بیش زه حد بارگیری وابیه .\nکارورل زیادی ایخن ای منوبنه سل کنن.\nلطفا یه لحظه واسیت قبلیکه به خیت ای منوبنه مجددا سل کیت.",
+       "pool-timeout": "پایان زمون اتنظار سی قفل",
+       "pool-queuefull": "صف استخر پر هسی",
+       "pool-errorunknown": "خطا ناشناخته",
+       "pool-servererror": "شمارنده سرویس استخر ور تیه نی ($1).",
+       "aboutsite": "پۉرۉجھ : دأربارھ",
+       "aboutpage": "Project:دأربارھ",
+       "copyright": "مطلب دومن $ 1 هس نکه خلاف هونو ذکر وابی.",
+       "copyrightpage": "{{ns:project}}:کپی رایت",
+       "currentevents": "اتفاقل جاری",
+       "currentevents-url": "Project:اتفاقل جاری",
+       "disclaimers": "ئینکار کنندھ یل",
+       "disclaimerpage": "Project:ئینکار کارۉأران",
+       "edithelp": "هۉمیاری سی اصلاح",
+       "mainpage": "بألگە أصلی",
+       "mainpage-description": "بألگە أصلی",
+       "policy-url": "Project:خط مشی",
+       "portal": "دأرگاھ کارڤأرل",
+       "portal-url": "Project:دأرگاھ کارڤأرل",
+       "privacy": "خط مأشی رازداری",
+       "privacypage": "Project:خط مأشی رازداری",
+       "badaccess": "خطا دسترسی",
+       "badaccess-group0": "ایسا اجازه انجام کاری که ایخستیده ندارین",
+       "badaccess-groups": "او کاری که ایسا درخواست کردین فقط سی کارورانیه که مئنه ای  گروهن  {{PLURAL:$2|آن گروه|یکی زه گروه یل}}: $1.",
+       "versionrequired": "یه نسخه زه نیازمندی یل ویکی مدیا\n$1",
+       "versionrequiredtext": "یه نسخه زه ویکی مدیا($1) نیازمند ه وه استفاده زه ای بلگه\nبویین :[[مخصوص:نسخه|نسخه مخصوص]].",
+       "ok": "خووه",
+       "retrievedfrom": "بازیافت زھ \"$1\"",
+       "youhavenewmessages": "پیوم نو داری $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|ایشا داریت}} $1 زه {{PLURAL:$3|یه کارور دیه|$3 کارورل}} ($2).",
+       "youhavenewmessagesmanyusers": "ایشا $1 زه کارورل دیه داریت ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|یه پیوم نو|999=پیومل نو}}",
+       "newmessagesdifflinkplural": "آخر {{PLURAL:$1|تغییر|999=تغییرل}}",
+       "youhavenewmessagesmulti": "ایشا پیوم نو داریت مئنه\n$1",
+       "editsection": "ئیصلاح",
+       "editold": "اصلاح",
+       "viewsourceold": "دیئن منبع",
+       "editlink": "ئیصلاح",
+       "viewsourcelink": "دیئن سأرچیشمە",
+       "editsectionhint": "ئیصلاح ئی بأخش: $1",
+       "toc": "مۉحتڤا یل",
+       "showtoc": "نمایش",
+       "hidetoc": "قائم",
+       "collapsible-collapse": "سقوط",
+       "collapsible-expand": "ببن",
+       "thisisdeleted": "دیئن یا ورگردوندن $1؟",
+       "viewdeleted": "دیئن$1؟",
+       "restorelink": " {{PLURAL:$1|یه اصلاح حذف وابیه|$1 اصلاحل حذف وابیه}}",
+       "feedlinks": "تغذیه:",
+       "feed-invalid": "اشتراک  زه راه  تایپ باطله",
+       "feed-unavailable": "فید پیوند ور تیه نی",
+       "site-rss-feed": "خبرخو RSS سی $1",
+       "site-atom-feed": "خأھ ڤأر خۉ Atom سی $1",
+       "page-rss-feed": "خبرخو RSS سی «$1»",
+       "page-atom-feed": "خبرخۉ Atom سی «$1»",
+       "red-link-title": "(بألگە ۉجوٙد نارھ) $1",
+       "sort-descending": "مرتب سازی وا صعودی",
+       "sort-ascending": "مرتب سازی وا صعودی",
+       "nstab-main": "بألگە",
+       "nstab-user": "بلگه کارۉر",
+       "nstab-media": "بلگه مدیا",
+       "nstab-special": "بألگە یل ڤیجە",
+       "nstab-project": "بلگه پرۉجه",
+       "nstab-image": "فایل",
+       "nstab-mediawiki": "پیوم",
+       "nstab-template": "الگۉ",
+       "nstab-help": "بلگه هومیاری",
+       "nstab-category": "دسە",
+       "nosuchaction": "چنی دستوری موجود نی",
+       "nosuchspecialpage": "چنو بلگه مخصوصی نی",
+       "error": "خطا",
+       "databaseerror": "خطا دیتابیس",
+       "databaseerror-textcl": "خطا مئنه پرس  و جو پایگاه داده رخ دابی.",
+       "databaseerror-query": "سل کردن:$1",
+       "databaseerror-function": "عملکرد:$1",
+       "databaseerror-error": "خطا:$1",
+       "readonly": "پایگاه داده بسته وابی",
+       "enterlockreason": "یه دلیل سی قفل کردن وارد کو ، از جمله برآورد زمونی که قفل منتشر  خواهد وابی",
+       "missingarticle-rev": "(تجدید نظر#:$1)",
+       "missingarticle-diff": "(تفاوت:$1،$2)",
+       "internalerror": "خطا داخلی",
+       "internalerror_info": "خطا داخلی:$1",
+       "filecopyerror": "نیوا قایلنه کپی کی \"$1\" تا \"$2\"",
+       "filerenameerror": "نیوا نوم قایلنه تغییر بی \"$1\" به \"$2\"",
+       "filedeleteerror": "نیوا فایلنه حذف کی \"$1\"",
+       "directorycreateerror": "نیوا پوشه بسازی \"$1\"",
+       "filenotfound": "نیوا فایلنه پیداس کی \"$1\"",
+       "unexpected": "ارزش ناگهونی: \"$1\"=\"$2\"",
+       "formerror": "خطا:نیوا فرمنه ارسال کیت.",
+       "badarticleerror": "ای عمل نیوا ری ای بلگه اجرا وابی.",
+       "cannotdelete-title": "نیوا بلگنه حذف کی \"$1\"",
+       "badtitle": "عنۉان بد",
+       "badtitletext": "عنۉان درخۉاستی نامعتبر، خالی، یا عنۉانی بین زۉۉنی یا بین‌ۉیکی‌ای با پیۉند نادرسته.\nۉ ممکنه  یه یا چند کاراکتر داشته بۉھ که مئن عنۉان مربۉط نۉا زش استفادھ کنین.",
+       "viewsource": "دیئن سرچشمھ",
+       "viewsource-title": "دیئن منبع سی $1",
+       "actionthrottled": "عمل متوقف وابی",
+       "protectedpagetext": "ای بلگه سیکه اصلاح یا دیهر عملل ریش انجام نبی محافظت وابیه",
+       "viewsourcetext": "ایشا ترین بوینین وکپی کنین منبع ای بلگنه:",
+       "mycustomcssprotected": "ایشا اجازه ناریت سی اصلاح کردن ای بلگه سی اس اس",
+       "mycustomjsprotected": "ایشا اجازه ناریت سی اصلاح کردن ای بلگه جاوا اسکریپت",
+       "myprivateinfoprotected": "ایشا اجازه ناریت سی اصلاح کردن اطلاعات شصخی خوتون",
+       "mypreferencesprotected": "ایشا اجازه ناریت سی اصلاح کردن تنظیمات خوتون",
+       "ns-specialprotected": "بلگه یل مخصوص نیوا اصلاح بوان",
+       "exception-nologin": "نوایته",
+       "exception-nologin-text-manual": "لطفا $1 تا بترید به ای بلگه یا عمل دسترسی پیدا کنیت",
+       "virus-scanfailed": "اسکن انجام نبی (کد $1)",
+       "virus-unknownscanner": "آنتی ویروس ناشناخته",
+       "welcomeuser": "خش اومیت، $1!",
+       "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": "رمزنه دۉۉارھ ۉارد بکنیت",
+       "userlogin-remembermypassword": "منه تۉ بنھ",
+       "userlogin-signwithsecure": "د اتصال ایمن استفاده کو",
+       "yourdomainname": "دومین کارو:",
+       "password-change-forbidden": "ایشا نیتریت مئنه ای ویکی رمزه یلنه اصلاح بکیت",
+       "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": "رمزتۉنه نۉنیتۉ؟",
+       "userlogin-helplink2": "هۉمیاری ۉا ئۉیدن ۉھ سیستم",
+       "userlogin-createanother": "یه اکانت دیه بساز",
+       "createacct-emailrequired": "آدرس ایمیل",
+       "createacct-emailoptional": "آدرس ایمیل (ۉاخۉتۉنی)",
+       "createacct-email-ph": "آدرس ایمیل خۉتۉنه ۉارد بکنیت",
+       "createacct-another-email-ph": "آدرس ایمیلنه وارد بکیت",
+       "createacct-realname": "نوم راسکی (واخوتونی)",
+       "createaccountreason": "دلیل:",
+       "createacct-reason": "دلیل",
+       "createacct-reason-ph": "سیچه داریت یه اکانت دیه ایسازیت",
+       "createacct-captcha": "چک کردن امنیتی",
+       "createacct-imgcaptcha-ph": "ای نشتنه کھ دۉمن سیل کی ۉارد کۉ",
+       "createacct-submit": "حسآۉ خۉتۉنه راس کنیت",
+       "createacct-another-submit": "یه اکانت دیه بساز",
+       "createacct-benefit-heading": "{{SITENAME}} ۉا بجلی کپ خۉتۉن راسھ بیه.",
+       "createacct-benefit-body1": "{{PLURAL:$1|اصلاح|اصلاحل}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|بلگه|بلگه یل}}",
+       "createacct-benefit-body3": "اخیرا {{PLURAL:$1|هۉمیارندھ|هۉمیارندھ یل}}",
+       "badretype": "رمزنه ک وارد کیت وایک جور نیوان",
+       "userexists": "نوم کاروری ک وارد کیت الان در حال استفاده هسس\nلطفا یه نوم دیه انتخاب کیت",
+       "loginerror": "خطا ورود",
+       "createacct-error": "خطا حین ساختن اکانت",
+       "createaccounterror": "نیوا اکانتنه بسازیت: $1",
+       "noname": "ایشا یه نوم کارور معتبر مشخص نکردیته",
+       "loginsuccesstitle": "اویدن وا بخت وتوفیق وه سیستم",
+       "loginsuccess": "''' ایشا اویدن وه مئنه سایت {{SITENAME}} و عنوان \"$1\".'''",
+       "nosuchusershort": "کاروری وا ای نوم نی\"$1\".\nحروف نومنه چک کنین.",
+       "nouserspecified": "ایشا واسی یه نوم کارور مشخص کیت",
+       "login-userblocked": "ای کارور بسته وابید.اجازه ورود ناریت.",
+       "wrongpassword": "رمز وارد وابیده درست نی.\nلطفا دوباره سعی کنین.",
+       "wrongpasswordempty": "رمز وارد وابیده عقیم یامبهم بی.\nلطفا دوباره سعی کنین.",
+       "password-name-match": "ایشا واسی وا نوم کاروریت متفاوت وابی.",
+       "password-login-forbidden": "استفاده زه ای نوم کارور و رمز ممنوع وابی.",
+       "mailmypassword": "تعویض رمز",
+       "passwordremindertitle": "رمز موقتی تازه سی {{SITENAME}}",
+       "noemail": "آدرس ایمیلی ظبط نوابی سی کارور \"$1\".",
+       "noemailcreate": "ایشا واسی یه آدرس ایمیل معتبر آماده کیت.",
+       "passwordsent": "یه رمز تازه ارسال وابید وه نشانی ایمیل ثبت وابده سی \"$1\".\nلطفا بعد از دریافت آن داخل سیستم بوین.",
+       "mailerror": "خطا ارسال ایمیل: $1",
+       "emailauthenticated": "آدرس ایمی ایشا تایید وابی ری $2 مئنه $3",
+       "emailconfirmlink": "آدرس ایمیل خوتونه تایید بکیت",
+       "cannotchangeemail": "اکانت آدرسل ایمیلل نیوا تغییر وابی مئنه ای ویکی.",
+       "emaildisabled": "ای سایت نیتره ایمیل ارسا کنه.",
+       "accountcreated": "اکانت ساخته بی",
+       "createaccount-title": "اکانت سازی سی {{SITENAME}}",
+       "login-abort-generic": "ورود ایشا ناموفق وابی - سقط وابی",
+       "loginlanguagelabel": "زۉۉن:$1",
+       "pt-login": "ئۉیدأن ڤھ سیستم",
+       "pt-login-button": "ئۉیدن ۉھ سیستم",
+       "pt-createaccount": "راس کردن حسآۉ",
+       "pt-userlogout": "رتن زھ سیستم",
+       "changepassword": "تغییر رمز",
+       "resetpass_announce": "سی پایان ورود ، ایشا واسی یه رمز جدید سیخوت به ونی.",
+       "resetpass_header": "تغییر رمز اکانت",
+       "oldpassword": "رمز قبلی:",
+       "newpassword": "رمز نو:",
+       "retypenew": "تایپ دوباره رمز:",
+       "resetpass_submit": "وندن رمز و اوییدن وه سیستم",
+       "changepassword-success": "رمز ایشا وا موفقیت تغییر وابی",
+       "resetpass_forbidden": "رمزل نیوا تغییر کنن",
+       "resetpass-no-info": "ایشا واسی وارد بویت تا وه بلگه ای پوشه دسترسی داشته بوین.",
+       "resetpass-submit-loggedin": "تغییر رمز",
+       "resetpass-submit-cancel": "لغو",
+       "resetpass-recycled": "خواهشا رمز خوتونه مجددا وه چیکه زه ای رمز الانی تونه بنیت",
+       "resetpass-temp-password": "رمز جایگزین",
+       "resetpass-expired": "رمز ایشانه اعتبار ناره.لطفا یه رمز نو سیخوتون بونیت.",
+       "passwordreset": "تعویض رمز",
+       "bold_sample": "متن گپ نما",
+       "bold_tip": "متن گپ نما",
+       "italic_sample": "متن شکسته",
+       "italic_tip": "متن شکسته",
+       "link_sample": "عنۉان لینک",
+       "link_tip": "لینک داخلی",
+       "extlink_sample": "http://www.example.com عنۉان لینک",
+       "extlink_tip": "(به خاطر بسپار http:// prefix)\nلینک خارجی",
+       "headline_sample": "سرخط متن",
+       "headline_tip": "2سرخط یکسان",
+       "nowiki_sample": "متن شکل ندائھ یافرمت نۉابیدھ را ایچۉ بنین",
+       "nowiki_tip": "زھ فرمت کردن یا شکل دائن ۉیکی دس ۉردار",
+       "image_tip": "فایل محاط ۉابید",
+       "media_tip": "لینک فایل",
+       "sig_tip": "امضا ایشا ۉ برچسب زمان",
+       "hr_tip": "خط افقی (کم استفادھ کنین)",
+       "summary": "خلاصه:",
+       "minoredit": "ای یه اصلاح کچک ۉابی",
+       "watchthis": "پیگیری ای بلگه",
+       "savearticle": "بلگه ضبط بوھ",
+       "showpreview": "پیش‌نمایش",
+       "showdiff": "نشۉدائن تغییرل",
+       "anoneditwarning": "<strong>هشدار:</strong> ایشا نۉایته مئنه سیستم. آی پی ایشا سی عۉمۉم قابل رۉیت هی ار اصلاحی بکنیت. ار ایشا <strong>[$1 ورود]</strong> یا <strong>[$2 راس کردن یه حسآۉ]</strong>, اصلاحل ایشا به حسآۉ کارۉری ایشا ھشتھ ایۉان ۉا منفعل حسآۉل دیه..",
+       "loginreqlink": "ئۉیدن ۉھ سیستم",
+       "newarticletext": "ایشا یه لینک ۉھ یه بلگنه که هنی ۉجود نارنه دنبال کردیته.\nسی راس کردن ای بلگه،نوشتنه مئنه جعبه زیر شرۉع کنیت(بینیتۉ [$1 help page] سی اصلاعات اضافی).\nار ایشا ۉا خطا ایچه هیسیت، ری <strong>back</strong> button مرۉرگر ایشا کلیژ کیت.",
+       "noarticletext": "د حال جاری متنی مئنه ای بلگه نیسس.\nایشا ایترید [[Special:Search/{{PAGENAME}}|جستن سی عنوان ای بلگه]] مئنه بلگه یل دیه.\n<span class=\"plainlinks\">[{{fullurl:{{#مخصۉص:نمایه یل}}|بلگه={{FULLPAGENAMEE}}}} جستن سی نمایل مربوط], یا [{{fullurl:{{FULLPAGENAME}}|اقدام=اصلاح}} اصلاح کۉ ای بلگنه]</span>.",
+       "noarticletext-nopermission": "د حال جاری متنی مئنه ای بلگه نیسس.\nایشا ایترید [[Special:Search/{{PAGENAME}}|search for this page title]] مئنه بلگل دیه، یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>، ۉلی ایشا نیترید ای بلگنه راس بکنیت.",
+       "editing": "درحال اصلاح $1",
+       "creating": "راس کردن $1",
+       "editingsection": "درحال اصلاح $1 (قسمت)",
+       "templatesused": "{{PLURAL:$1|قالب|قالبل}} اسفادھ بیه مئنه ای بلگه:",
+       "template-protected": "(تأحت حمایت)",
+       "template-semiprotected": "(نیمه حمایت ۉابیدھ)",
+       "hiddencategories": "ای بلگه عضۉ {{PLURAL:$1|1 دسه بنی قائم|$1 دسه بنی یل قائم}} هیسس :",
+       "permissionserrorstext-withaction": "ایشا اجازھ ناریت که $2, سی ای {{PLURAL:$1|دلیل|دلیلل}}:",
+       "moveddeleted-notice": "ای بلگه حذف ۉابیدھ.\nحذف ۉ انتقال سیاهه ای بلگه فراهم ۉابیدھ دۉمن سرچشمه.",
+       "viewpagelogs": "نشۉدائن نمایه ها سی ای بلگه",
+       "currentrev-asof": "آخرین ۉرژن تا $1",
+       "revisionasof": "ئیصلاح $1",
+       "revision-info": "ۉرژن $1 تۉسط {{GENDER:$6|$2}}$7",
+       "previousrevision": "← ئیصلاح قأبلی",
+       "nextrevision": "ۉرژن نۉتر →",
+       "currentrevisionlink": "آخرین ۉرژن",
+       "cur": "فعلی",
+       "last": "قبلی",
+       "rev-delundel": "قابلیت تغییر دائن",
+       "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|نأتیجە|نأتیجل}} د هر بألگە",
+       "viewprevnext": "مشاهدھ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>درست کۉ ای بلگنه \"[[:$1]]\" مئنه ای ۉیکی!</strong> {{PLURAL:$2|0=|همچنین سل کۉ بلگه ای که ۉا جستن پیداش کردیه.|همچنین سل کۉ نتیجل جستنه.}}",
+       "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": "(تغییر مسیر $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": "نتیجه ای مرتبط ۉا هۉنی که در خۉاست دیته نی.",
+       "mypreferences": "تنظیمل",
+       "right-writeapi": "ئیستفادھ د نڤشتن ڤە صوٙرأت API",
+       "newuserlogpage": "سیاهە راس کردن حسآۉ",
+       "enhancedrc-history": "تاریخچھ",
+       "recentchanges": "تأغییرل نۉ",
+       "recentchanges-legend": "گزینه یل تغییرل اخیر",
+       "recentchanges-summary": "شیار تغییرل اخیر مئنه ای بلگه ۉھ ۉیکی .",
+       "recentchanges-label-newpage": "ئی ئیصلاح یە بألگە نوٙ ئیسازھ",
+       "recentchanges-label-minor": "ئی یە ئیصلاح کوٙچیر ڤابی",
+       "recentchanges-label-bot": "ئی ئیصلاح تأڤأسۉط یە روٙبات انجام ڤابیە",
+       "recentchanges-label-unpatrolled": "ای اصلاح هۉنۉ گشت نۉابیدھ",
+       "recentchanges-label-plusminus": "اندازھ بلگه ۉا ای تعداد بایت تغییر دادھ بیه",
+       "recentchanges-legend-heading": "'''آلشتیا ئیھ سنی :'''",
+       "recentchanges-legend-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": "قائم کردن",
+       "rcshowhidemine": "$1 اصلاحل مۉ",
+       "rcshowhidemine-show": "نشۉ دائن",
+       "rcshowhidemine-hide": "قائم کردن",
+       "rclinks": "نشودائن ئاخرین $1 تغییر مئن $2 روز اخیر؛ $3",
+       "diff": "فأرخ",
+       "hist": "گۉزاریش",
+       "hide": "قائم کردن",
+       "show": "نشۉ دائن",
+       "minoreditletter": "رز",
+       "newpageletter": "تا",
+       "boteditletter": "ر",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتل}} بأعد تأغییر",
+       "recentchangeslinked": "تغییرل مربۉط",
+       "recentchangeslinked-toolbox": "تأغییرل مأربوٙط",
+       "recentchangeslinked-title": "تغییرل مرتبط ۉا $1",
+       "recentchangeslinked-summary": "ئی بألگە خاص تأغییرل اخیر مأئنە بألگل لینک ڤابیدھ ڤە ئی بألگنە نیشۉ ادھ.\nبألگلی کە مأئنە [[Special:Watchlist|لیست پیگیری یل]] ئیشا هیسن بە شکل '''سیاھ''' نیشۉ دادھ ابۉن.",
+       "recentchangeslinked-page": "نۉم بلگه:",
+       "recentchangeslinked-to": "نشۉ دائن تغییرل بلگلی که ۉ بلگه دادھ بیه لینک دادھ شدنه به جای",
+       "upload": "بلم گیر کردن فایل",
+       "filedesc": "خلاصه",
+       "license-header": "صدۉر مجۉز",
+       "imgfile": "فایل",
+       "file-anchor-link": "فایل",
+       "filehist": "ڤیرگار فایل",
+       "filehist-help": "رۉ تاریخ‌/زمان کلیژ کنیت تا ڤیرژن مۉرتبط رنە بینیت.",
+       "filehist-current": "جاری",
+       "filehist-datetime": "تاریخ/زمان",
+       "filehist-thumb": "بأند أنگۉشتی",
+       "filehist-thumbtext": "کوٙچیر سی ۉیرژن از تا $1",
+       "filehist-user": "کارڤأر",
+       "filehist-dimensions": "ابعاد",
+       "filehist-comment": "توٙضیح",
+       "imagelinks": "ئیستفادھ د فایل",
+       "linkstoimage": "دوٙمین الذکر {{PLURAL:$1|لینکل بألگە|$1 لینک بألگل}} بە ئی فایل:",
+       "nolinkstoimage": "بلگه یلی که ۉھ ای فایل لینک دائنه نی.",
+       "sharedupload-desc-here": "ئی فایل ز $1 ئوٙمائە ڤ شاید د پۉرۉجە یل دیە مورد ئیستفادھ ڤابین.\nتوٙضیحتل ری [$2 بألگە تۉضیح فایل] دوٙمین نیشۉ ڤابیە .",
+       "upload-disallowed-here": "ایشا نیترید ای فایلنه بنۉیسید",
+       "randompage": "بألگە بأختە کی",
+       "nbytes": "$1 {{PLURAL:$1|بایت|بایتل}}",
+       "nmembers": "$1 {{PLURAL:$1|عضۉ|اعضۉل}}",
+       "newpages": "بألگە یل نوٙ",
+       "pager-older-n": "{{PLURAL:$1|قدیمی تر 1|قدیمی تر $1}}",
+       "booksources": "سرچشمل کتآۉ",
+       "booksources-search-legend": "جستن سی سرچشمل کتآۉ",
+       "booksources-search": "جستن",
+       "log": "نمایل",
+       "allarticles": "همه بلگل",
+       "allpagessubmit": "رۉ",
+       "categories": "دسه یل",
+       "mywatchlist": "فهرست پیگیری یل",
+       "watch": "پی‌گیری",
+       "dellogpage": "نمایه حذف",
+       "rollbacklink": "عأقأب گرد",
+       "rollbacklinkcount": "ۉرگرد $1 {{PLURAL:$1|اصلاح|اصلاحل}}",
+       "protectlogpage": "نمایه حفاظت ۉحمایت",
+       "namespace": "هۉمدیرأنگل:",
+       "invert": "ئینتخاب بأرعأکس بوھ",
+       "tooltip-invert": "انتخاب کۉ ای جعبنه سی قائم کردن تغییرل بلگلی که همدرنگلشۉ انتخاب ۉابین(ۉ همدرنگل مرتبط ار انتخاب ۉابین)",
+       "namespace_association": "همدرنگل مرتبط",
+       "tooltip-namespace_association": "انتخاب کو ای جعبنه سیکه گپ یا مۉضۉع همدرنگ مرتبط ۉا همدرنگل انتخاب ۉابینه قرار بنی.",
+       "blanknamespace": "(أصلی)",
+       "contributions": "{{GENDER:$1|سھمل}} کارۉر",
+       "mycontris": "سھمل",
+       "month": "مئنھ ای ماھ (ۉ قبل زھ ھۉ):",
+       "year": "مئنھ ای سال (ۉ قبل زھ ھۉ):",
+       "whatlinkshere": "لینکل ئی بألگە",
+       "whatlinkshere-title": "بلگل که لینک دائنه ۉھ \"$1\"",
+       "whatlinkshere-page": "بلگه",
+       "linkshere": "لینک بلگل دۉمن الذکر ۉھ '''[[:$1]]''':",
+       "isredirect": "بلگه تغییر مسیر",
+       "istemplate": "استفادھ ۉابیدھ داخل بلگه",
+       "isimage": "لینک فایل",
+       "whatlinkshere-prev": "{{PLURAL:$1|قبلی |مۉرد قبلی$1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|بعدی |مۉرد بعدی $1}}",
+       "whatlinkshere-links": "← لینکل",
+       "whatlinkshere-hideredirs": "$1 تغییرل مسیر",
+       "whatlinkshere-hidetrans": "$1 تراگنجایش",
+       "whatlinkshere-hidelinks": "$1 لینکل",
+       "whatlinkshere-filters": "فیلترل",
+       "blocklink": "بسە بۉھ",
+       "contribslink": "شۉراکأتل",
+       "movelogpage": "نمایه جابجایی",
+       "export": "بلگل صادرھ",
+       "thumbnail-more": "گأپ کردن",
+       "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-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": "تغذیه کچک ترین جزء  ای بلگه",
+       "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": "ئی بألگە ھا ڤیجە ڤ ئیشا نیتأرین خۉد ئی بألگنە ئیصلاح کنیت",
+       "tooltip-ca-nstab-project": "دیئن بلگه پرۉجه",
+       "tooltip-ca-nstab-image": "دیئن بألگە فایل",
+       "tooltip-ca-nstab-template": "دیئن قالب",
+       "tooltip-ca-nstab-category": "دیئن بألگە دسە بأنی",
+       "tooltip-save": "ضبط کردن تغییرل ایشا",
+       "tooltip-preview": " دیئن تغییرل ، لطفا قبل ضبط کردن د ای خدمت استفادھ کنیت!",
+       "tooltip-diff": "دیئن تغییرلی که ایشا مئن ای متن انجام دادینه",
+       "tooltip-rollback": "\"اعادە\" ۉرگأردوٙندأن بە ڤأضع أڤألیە سی ئی بألگە کە سی مۉشارکأت  ئاخر ئیصلاح ڤابیدھ ڤا یە کلیک",
+       "tooltip-undo": "\"لغو\"ۉرگشت ای اصلاح ۉ ۉا ۉیدن فرم اصلاح مئنه پیش نمایش.اجازھ ایدھ که یه دلیل ۉھ خلاصه اضافه بکنی.",
+       "tooltip-summary": "یه خلاصه کچکی بنویسیت",
+       "simpleantispam-label": "انتخاب آنتی-اسپم\nپر <strong>نکنیت</strong> اینه مئن!",
+       "pageinfo-toolboxlink": "اطلاعات بألگە",
+       "previousdiff": "← اصلاح قدیمی",
+       "nextdiff": "اصلاح نۉتر→",
+       "file-info-size": "$1 × $2 پیکسل, اندازھ فایل: $3, MIME نۉع: $4",
+       "file-nohires": "قابلیت تفکیک بالاتری در دسترس نی.",
+       "svg-long-desc": "SVG فایل, تقریبا$1 × $2 پیکسل, اندازھ فایل: $3",
+       "show-big-image": "اندازھ أصلی",
+       "show-big-image-preview": "اندازھ ئی پیش نمایش:$1.",
+       "show-big-image-other": "دیە {{PLURAL:$2|تأفکیک پأذیری|تأفکیک پأذیری یل}}: $1.",
+       "show-big-image-size": "$1 × $2 پیکسلل",
+       "metadata": "فرادادھ",
+       "metadata-help": " ای فایل دارای اطلاعات اضافه‌ای هی که احتمالاً ۉا دۉربین دیجیتالی‌ یا پۉیشگری که سی ایجاد یا دیجیتالی‌کردن هۉ ۉھ کار رهدھ اضاف ۉابیدھ . ایر فایل زھ ۉضعیت اۉلیه اس تغییر دادھ ۉابیدھ بوھ ممکنه همه توضیحات مۉجود اطلاعات عیس رنھ منعکس نکنه.",
+       "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": "تغییرل تاریخ و زمان فایل",
+       "exif-make": "کۉمپانی راسندھ دۉربین",
+       "exif-model": "مدل دۉربین",
+       "exif-software": "نرم افزار مۉرد استفادھ",
+       "exif-exifversion": "ۉرژن Exif",
+       "exif-colorspace": "فضای رنگ",
+       "exif-datetimeoriginal": "تاریخ ۉ زمان تۉلید دادھ یل",
+       "exif-datetimedigitized": "تاریخ ۉ زمان دیجیتالی ۉابیدن",
+       "exif-orientation-1": "عادی",
+       "namespacesall": "همە",
+       "monthsall": "همه",
+       "semicolon-separator": "؛&#32;",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ]])",
+       "specialpages": "بألگە یل ڤیجە",
+       "tag-filter": "[[Special:Tags|بأرچأسب]] فیلتر:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|بأرچسب|بأرچسبل}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|حذف ۉابیدھ}} بلگه $3",
+       "logentry-move-move": "$1 {{GENDER:$2|انتقال دادھ بیه}} بلگه $3 ۉھ $4",
+       "logentry-newusers-create": "حسآۉ کارڤأر $1 ڤابیە {{GENDER:$2|راس ڤیدھ }}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|بلم گیر کردھ ۉابی}} $3",
+       "searchsuggest-search": "جۉستأن"
+}
index a9a8d82..09d4ecd 100644 (file)
        "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īties vēlreiz.\n\n$1",
+       "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",
        "pool-errorunknown": "Nezināma kļūda",
        "poolcounter-usage-error": "Izmantošanas kļūda: $1",
        "aboutsite": "Par {{grammar:akuzatīvs|{{SITENAME}}}}",
        "viewsource-title": "Apskatīt $1 izejas kodu",
        "actionthrottled": "Darbība netika atļauta",
        "protectedpagetext": "Šī lapa ir aizsargāta, lai novērstu tās izmainīšanu vai citas darbības.",
-       "viewsourcetext": "Tu vari apskatīties un nokopēt šīs lapas vikitekstu:",
+       "viewsourcetext": "Tu vari apskatīt un nokopēt šīs lapas vikitekstu:",
        "protectedinterface": "Šī lapa satur programmatūras interfeisā lietotu tekstu un ir bloķēta pret izmaiņām, lai pasargātu no bojājumiem.\nLai pievienotu izmaiņas tulkojumā visās ''wiki'', lūdzam izmantot ''MediaWiki'' lokalizēšanas projektu [//translatewiki.net/ translatewiki.net].",
        "editinginterface": "'''Brīdinājums:''' Tu izmaini lapu, kuras saturu izmanto wiki programmatūras lietotāja saskarnē (''interfeisā''). Šīs lapas izmaiņas ietekmēs lietotāja saskarni citiem lietotājiem. Pēc modificēšanas šīs izmaiņas būtu lietderīgi pievienot arī ''MediaWiki'' lokalizēšanas projektā [//translatewiki.net/ translatewiki.net].",
        "namespaceprotected": "Tev nav atļaujas izmainīt lapas, kas atrodas '''$1''' ''namespacē''.",
        "resetpass-abort-generic": "Paroles nomaiņu pārtrauca paplašinājums.",
        "passwordreset": "Paroles atiestatīšana",
        "passwordreset-text-one": "Aizpildiet šo veidlapu, lai atiestatītu savu paroli.",
-       "passwordreset-legend": "Atiestatīt paroli",
        "passwordreset-disabled": "Paroles atiestates šajā viki ir atspējotas.",
        "passwordreset-emaildisabled": "Šajā viki ir atspējotas e-pasta iespējas.",
        "passwordreset-username": "Lietotājvārds:",
        "note": "'''Piezīme: '''",
        "previewnote": "'''Atceries, ka šis ir tikai pirmskats un teksts vēl nav saglabāts!'''",
        "continue-editing": "Pāriet uz labošanas lauku",
-       "session_fail_preview": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.\nLūdzu mēģini vēlreiz.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
+       "session_fail_preview": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.\nLūdzu mēģini vēlreiz saglabāt izmaiņas.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
        "session_fail_preview_html": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.'''\n\n''Tā, kā {{grammar:ģenitīvs|{{SITENAME}}}} darbojas neapstrādāts HTML, pirmskats ir paslēpts, lai aizsargātos no JavaScripta  uzbrukumiem.''\n\n'''Ja šis bija parasts rediģēšanas mēģinājums, mēģini vēlreiz.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
        "editing": "Labot $1",
        "creating": "Izveido lapu $1",
        "permissionserrors": "Atļauju kļūda",
        "permissionserrorstext": "Tev nav atļauts veikt šo darbību {{PLURAL:$1|šādu iemeslu|šāda iemesla|šādu iemeslu}} dēļ:",
        "permissionserrorstext-withaction": "Tev nav atļauts $2 {{PLURAL:$1|šādu iemeslu|šāda iemesla|šādu iemeslu}} dēļ:",
-       "recreate-moveddeleted-warn": "'''Brīdinājums: Tu atjauno lapu, kas ir tikusi izdzēsta'''\n\nTev vajadzētu pārliecināties, vai ir lietderīgi turpināt izmainīt šo lapu.\nTe var apskatīties dzēšanas un pārvietošanas reģistrus, kuros jābūt datiem par to kas, kad un kāpēc šo lapu izdzēsa.",
-       "moveddeleted-notice": "Šī lapa ir tikusi izdzēsta.\nTe var apskatīties dzēšanas un pārvietošanas reģistru fragmentus, lai noskaidrotu kurš, kāpēc un kad to izdzēsa.",
+       "recreate-moveddeleted-warn": "'''Brīdinājums: Tu atjauno lapu, kas ir tikusi izdzēsta'''\n\nTev vajadzētu pārliecināties, vai ir lietderīgi turpināt izmainīt šo lapu.\nTe var apskatīt dzēšanas un pārvietošanas reģistrus, kuros jābūt datiem par to kas, kad un kāpēc šo lapu izdzēsa.",
+       "moveddeleted-notice": "Šī lapa ir tikusi izdzēsta.\nTe var apskatīt dzēšanas un pārvietošanas reģistru fragmentus, lai noskaidrotu kurš, kāpēc un kad to izdzēsa.",
        "log-fulllog": "Paskatīties pilnu reģistru",
        "edit-hook-aborted": "Aizķere pārtrauca labojumu.\nNetika sniegts paskaidrojums.",
        "edit-gone-missing": "Nevar atjaunināt lapu.\nIzskatās, ka lapa ir dzēsta.",
        "upload_directory_missing": "Augšupielādes direktorijs ($1) ir pazudis, un to tīmekļa serveris nevar izveidot.",
        "upload_directory_read_only": "Augšupielādes direktoriju ($1) tīmekļa serveris nevar labot.",
        "uploaderror": "Augšupielādes kļūda",
-       "upload-recreate-warning": "'''Brīdinājums: Fails ar šādu nosaukumu ir dzēsts vai pārvietots.'''\n\n Dzēšanas un pārvietošanas reģistri šai lapai ir uzskaitīti šeit:",
+       "upload-recreate-warning": "<strong>Brīdinājums: Fails ar šādu nosaukumu ir dzēsts vai pārvietots.</strong>\n\nDzēšanas un pārvietošanas reģistri šai lapai ir pieejami šeit:",
        "uploadtext": "Pirms tu kaut ko augšupielādē, noteikti izlasi un ievēro [[Project:Attēlu izmantošanas noteikumi|attēlu izmantošanas noteikumus]].\n\nLai aplūkotu vai meklētu agrāk augšupielādētus attēlus,\ndodies uz [[Special:FileList|augšupielādēto attēlu sarakstu]].\nAugšupielādes un dzēšanas tiek reģistrētas [[Special:Log/upload|augšupielādes reģistrā]] un [[Special:Log/delete|dzēšanas reģistrā]].\n\nIzmanto šo veidni, lai augšupielādētu jaunus attēlu failus, ar kuriem ilustrēt tevis izmainītās lapas.\nGandrīz visos pārlūkos tev vajadzētu redzēt pogu '''\"Choose...\",''' kuru spiežot parādīsies faila atvēršanas dialogs.\nIzvēloties kādu failu, tā adrese parādīsies ailītē blakus šai pogai.\nTev ir arī jāatzīmē ailīte, kas apstiprina, ka tu nepārkāp nekādas autortiesības, augšupielādējot šo failu.\nSpied pogu '''Augšupielādēt''', lai pabeigtu augšupielādi.\nTas var ieilgt, ja tavs interneta pieslēgums ir lēns.\n\nIeteicamie formāti ir:\n* JPEG - ja tā ir fotogrāfija,\n* PNG - ja tas ir zīmējums vai kāda ikona, un\n* OGG - ja tas ir skaņas fails.\n\nLūdzu, pārliecinies, ka faila nosaukums ir pietiekami aprakstošs, lai izvairītos no neskaidrībām. Lai attēlu pēc tam ievietotu kādā lapā, izmanto šādi noformētu linkus:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fails.jpg|paskaidrojošs teksts]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fails.png|paskaidrojošs teksts]]</nowiki>'''\nvai skaņām\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fails.ogg]]</nowiki>'''\n\nLūdzu, ņem vērā, ka tāpat kā citas wiki lapas arī tevis augšupielādētos failus citi var mainīt vai dzēst, ja uzskata, ka tas nāktu par labu šim projektam, kā arī atceries, ka tev var tikt liegta augšupielādes iespēja, ja tu šo sistēmu.",
        "upload-permitted": "Atļautie failu tipi: $1.",
        "upload-preferred": "Ieteicamie failu tipi: $1.",
        "nlinks": "$1 {{PLURAL:$1|saites|saite|saites}}",
        "nmembers": "$1 {{PLURAL:$1|lapas|lapa|lapas}}",
        "nrevisions": "$1 {{PLURAL:$1|versijas|versija|versijas}}",
-       "nviews": "skatīta $1 {{PLURAL:$1|reizes|reizi|reizes}}",
        "nimagelinks": "Izmantots $1 {{PLURAL:$1|lapās|lapā|lapās}}",
        "ntransclusions": "izmantots $1 {{PLURAL:$1|lapās|lapā|lapās}}",
        "specialpage-empty": "Šim ziņojumam nav rezultātu.",
        "confirmdeletetext": "Tu tūlīt no datubāzes dzēsīsi lapu vai attēlu, kā arī to iepriekšējās versijas. Lūdzu, apstiprini, ka tu tiešām to vēlies darīt, ka tu apzinies sekas un ka tu to dari saskaņā ar [[{{MediaWiki:Policy-url}}|vadlīnijām]].",
        "actioncomplete": "Darbība pabeigta",
        "actionfailed": "Darbība neizdevās",
-       "deletedtext": "Lapa \"$1\" ir izdzēsta.\nŠeit var apskatīties pēdējos izdzēstos: \"$2\".",
+       "deletedtext": "Lapa \"$1\" ir izdzēsta.\nŠeit var apskatīt pēdējos izdzēstos: \"$2\".",
        "dellogpage": "Dzēšanas reģistrs",
        "dellogpagetext": "Šajā lapā ir pēdējo dzēsto lapu saraksts.",
        "deletionlog": "dzēšanas reģistrs",
        "protectexpiry": "Beidzas:",
        "protect_expiry_invalid": "Beigu termiņš ir nederīgs.",
        "protect_expiry_old": "Beigu termiņs ir pagātnē.",
-       "protect-text": "Šeit var apskatīties un izmainīt lapas '''$1''' aizsardzības līmeni.",
+       "protect-text": "Šeit var apskatīt un izmainīt lapas <strong>$1</strong> aizsardzības līmeni.",
        "protect-locked-access": "Jūsu kontam nav atļaujas mainīt lapas aizsardzības pakāpi.\nPašreizējie lapas '''$1''' iestatījumi ir:",
        "protect-cascadeon": "Šī lapa pašlaik ir aizsargāta, jo tā ir iekļauta {{PLURAL:$1|šajās lapās|šajā lapā|šajās lapās}} (mainot šīs lapas aizsardzības līmeni aizsardzība netiks noņemta):",
        "protect-default": "Atļaut visiem lietotājiem",
        "ipb-edit-dropdown": "Izmainīt bloķēšanas iemeslus",
        "ipb-unblock-addr": "Atbloķēt $1",
        "ipb-unblock": "Atbloķēt lietotāju vai IP adresi",
-       "ipb-blocklist": "Apskatīties esošos blokus",
+       "ipb-blocklist": "Apskatīt esošos blokus",
        "ipb-blocklist-contribs": "$1 devums",
        "unblockip": "Atbloķēt lietotāju",
        "unblockiptext": "Šeit var atbloķēt iepriekš nobloķētu IP adresi vai lietotāja vārdu (atjaunot viņiem rakstīšanas piekļuvi).",
        "emaillink": "nosūtīt e-pastu",
        "autoblocker": "Tava IP ir nobloķēta automātiski, tāpēc, ka to nesen lietojis \"[[User:$1|$1]]\".\nViņa bloķēšanas iemesls bija: \"$2\"",
        "blocklogpage": "Bloķēšanas reģistrs",
-       "blocklog-showlog": "Šis lietotājs ir bijis bloķēts jau agrāk.\nTe apakšā var apskatīties bloķēšanas reģistru:",
+       "blocklog-showlog": "Šis lietotājs ir bijis bloķēts jau agrāk.\nTe apakšā var apskatīt bloķēšanas reģistru:",
        "blocklogentry": "nobloķēja [[$1]] uz $2 $3",
        "reblock-logentry": "izmainīja bloķēšanas iestatījumus [[$1]] ar beigu termiņu $2 $3",
        "blocklogtext": "Šajā lapā ir pēdējo nobloķēto un atbloķēto lietotāju saraksts.\nTe neparādās automātiski nobloķētās IP adreses.\nŠobrīd aktīvos blokus var apskatīties bloķēto lietotāju [[Special:BlockList|IP adrešu sarakstā]].",
        "tooltip-ca-talk": "Diskusija par šī raksta lapu",
        "tooltip-ca-edit": "Labot šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.",
        "tooltip-ca-addsection": "Sākt jaunu sadaļu",
-       "tooltip-ca-viewsource": "Šī lapa ir aizsargāta. Tu vari apskatīties tās izejas kodu.",
+       "tooltip-ca-viewsource": "Šī lapa ir aizsargāta. Tu vari apskatīt tās izejas kodu.",
        "tooltip-ca-history": "Šīs lapas iepriekšējās versijas.",
        "tooltip-ca-protect": "Aizsargāt šo lapu",
        "tooltip-ca-unprotect": "Mainīt šīs lapas aizsardzību",
        "file-info-png-frames": "$1 {{PLURAL:$1|kadri|kadrs|kadri}}",
        "newimages": "Jauno attēlu galerija",
        "imagelisttext": "Šobrīd redzams $1 {{PLURAL:$1|attēlu|attēla|attēlu}} uzskaitījums, kas sakārtots $2.",
-       "newimages-summary": "Šeit var apskatīties pēdējos augšuplādētos failus šajā Vikipēdijā",
+       "newimages-summary": "Šeit var apskatīt pēdējos augšupielādētos failus.",
        "newimages-legend": "Filtrs",
        "newimages-label": "Faila nosaukums (vai tā daļa):",
        "newimages-showbots": "Parādīt botu augšupielādētos failus",
index b99ecee..5629515 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": "Шифра за каналот (Атом/RSS) на [[Special:Watchlist|измени во набљудуваните страници]]",
        "creating": "Создавање на $1",
        "editingsection": "Уредување на $1 (пасус)",
        "editingcomment": "Уредување на $1 (ново заглавие)",
-       "editconflict": "СпÑ\80оÑ\82иÑ\81Ñ\82авени Ñ\83Ñ\80едÑ\83ваÑ\9aа: $1",
+       "editconflict": "СпÑ\80оÑ\82иÑ\81Ñ\82авеноÑ\81Ñ\82 Ð²Ð¾ Ñ\83Ñ\80едÑ\83ваÑ\9aеÑ\82о: $1",
        "explainconflict": "Некој друг ја променил страницата откако почнавте да ја уредувате.\nГорниот дел за текст ја содржи страницата како што сега постои.\nВашите промени се прикажани во долниот дел.\nЌе морате да ги внесете вашите промени со постоечкиот текст.\n'''Само''' текстот во горниот дел ќе биде зачуван кога ќе притиснете на „{{int:savearticle}}“.",
        "yourtext": "Вашиот текст",
        "storedversion": "Зачувана преработка",
        "yourdiff": "Разлики",
        "copyrightwarning": "Имајте предвид дека сите придонеси на {{SITENAME}} се сметаат за издадени под лиценцата $2 (повеќе на $1).\nДоколку не сакате вашите текстови да бидат слободно уредувани и разменувани, тогаш не поднесувајте ги овде.<br />\nИсто така ветувате дека вие сте автор на текстот, или сте го копирале од ресурс во јавна сопственост или сличен слободен извор.\n'''НЕ ПОДНЕСУВАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!'''",
        "copyrightwarning2": "Ве молиме, имајте предвид дека сите придонеси кон {{SITENAME}} можат да бидат уредувани, менувани или отстранувани од други корисници. Ако не сакате вашиот текст да биде менуван и редистрибуиран слободно, не го испраќајте овде.<br />\nИсто така потврдувате дека текстот сте го напишале сами, или сте го копирале од ресурс во јавна сопственост или сличен слободен извор (видетe $1 за подробности).<br />\n'''НЕ ПРАЌАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!'''",
+       "editpage-cannot-use-custom-model": "Содржинскиот модел на страницава не може да се измени.",
        "longpageerror": "'''Грешка: Текстот што го внесовте е голем {{PLURAL:$1|еден килобајт|$1 килобајти}}, што ја надминува границата од {{PLURAL:$2|еден килобајт|$2 килобајти}}.'''\nЗатоа нема да може да се зачува.",
        "readonlywarning": "'''ПРЕДУПРЕДУВАЊЕ: Базата на податоци е заклучена заради одржување, па нема да можете да ги зачувате промените сега.\n\nВи препорачуваме да го прекопирате текстот на текстуална податотека за да го зачувате за подоцна.'''\n\nАдминистраторот кој ја заклучил базата на податоци го дал следново објаснување: $1",
        "protectedpagewarning": "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "badsig": "Грешка во потписот.\nПроверете ги HTML ознаките.",
        "badsiglength": "Вашиот потпис е премногу долг.\nМора да биде со помалку од $1 {{PLURAL:$1|знак|знаци}}.",
        "yourgender": "Како би сакале да ве опишуваме?",
-       "gender-unknown": "Ð\9dе Ñ\81акам Ð´Ð° Ð¼Ðµ Ð¾Ð¿Ð¸Ñ\88Ñ\83ваÑ\82е",
+       "gender-unknown": "Ð\9aога Ñ\9cе Ð²Ðµ Ñ\81помнÑ\83ва, Ð¿Ñ\80огÑ\80амоÑ\82 Ñ\9cе ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ñ\80одово Ð½ÐµÑ\83Ñ\82Ñ\80ални Ð·Ð±Ð¾Ñ\80ови Ñ\81екаде ÐºÐ°Ñ\98Ñ\88Ñ\82о Ð¼Ð¾Ð¶е",
        "gender-male": "Тој уредува викистраници",
        "gender-female": "Таа уредува викистраници",
        "prefs-help-gender": "Оваа поставка е незадолжителна.\nПрограмот го користи посочениот род за да ве опишува согласно вашиот пол.\nИнформацијата ќе биде јавна.",
        "action-undelete": "обнови ја страницава",
        "action-suppressrevision": "прегледај ја и обнови ја оваа скриена преработка",
        "action-suppressionlog": "преглед на овој li;en дневник",
-       "action-block": "оневозможи го овој корисник да уредува",
+       "action-block": "оневозможување на уредувањето на корисников",
        "action-protect": "измени го степенот на заштита на оваа страница",
        "action-rollback": "брзо отповикување на измени направени од последниот уредник на страницата",
        "action-import": "увоз на страници од друго вики",
        "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-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-податотека.",
        "uploaded-setting-event-handler-svg": "Задавањето на атрибути за работа со настани е спречено. Пронајдов <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "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": "Нема резултати од пребарувањето на овој извештај.",
        "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-title-cantexist": "Не е возможно да се направи страница на $1.",
+       "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]]“",
        "ipbreason-dropdown": "*Вообичаени причини за блокирање\n** Вметнување лажни информации\n** Бришење на содржини од страниците\n** Спам-врски кон надворешни мрежни места\n** Вметнување глупости во страниците\n** Непристојно однесување\n** Навредување на други корисници\n** Неприфатливо корисничко име",
        "ipb-hardblock": "Спречи ги најавените корисници да уредуваат од оваа IP-адреса",
        "ipbcreateaccount": "Оневозможи создавање кориснички сметки",
-       "ipbemailban": "Ð\9eневозможи Ð³Ð¾ корисникот да праќа е-пошта",
+       "ipbemailban": "Ð\9eневозможи Ð¼Ñ\83 Ð½Ð° корисникот да праќа е-пошта",
        "ipbenableautoblock": "Автоматски блокирај ја последната IP-адреса што ја користел корисникот и сите понатамошни адреси од кои ќе се обиде да уредува",
        "ipbsubmit": "Блокирај го овој корисник",
        "ipbother": "Друг рок:",
        "tooltip-pt-logout": "Одјавување",
        "tooltip-pt-createaccount": "Ви препорачуваме да направите сметка и да се најавите, иако тоа не е задолжително",
        "tooltip-ca-talk": "Разговор за страницата",
-       "tooltip-ca-edit": "Ð\9cожеÑ\82е Ð´Ð° Ñ\98а Ñ\83Ñ\80едиÑ\82е Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а. Ð\92е Ð¼Ð¾Ð»Ð¸Ð¼Ðµ ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\82е Ð³Ð¾ ÐºÐ¾Ð¿Ñ\87еÑ\82о Ð·Ð° Ð¿Ñ\80еглед Ð¿Ñ\80ед Ð·Ð°Ñ\87Ñ\83вÑ\83ваÑ\9aе.",
+       "tooltip-ca-edit": "УÑ\80едеÑ\82е Ñ\98а Ñ\81Ñ\82Ñ\80аниÑ\86ава",
        "tooltip-ca-addsection": "Започни нов пасус",
        "tooltip-ca-viewsource": "Оваа страница е заштитена. Можете да го видите изворниот код.",
        "tooltip-ca-history": "Претходни верзии на оваа страница.",
        "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": "Потстраници на страницата",
        "deletedwhileediting": "'''Предупредување''': Оваа страница беше избришана откако почнавте со нејзино уредување!",
        "confirmrecreate": "Корисникот [[User:$1|$1]] ([[User talk:$1|разговор]]) ја избриша оваа страница откако вие почнавте со уредување заради:\n: ''$2''\nПотврдете дека навистина сакате повторно да ја создадете оваа страница.",
        "confirmrecreate-noreason": "Корисникот [[User:$1|$1]] ([[User talk:$1|разговор]]) ја избриша страницава откако почнавте да ја уредувате.  Потврдете деак навистина сакате да ја пресоздадете страницата.",
-       "recreate": "Повторно создај",
+       "recreate": "Пресоздај",
        "unit-pixel": "п",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Да го исчистам меѓускладот на страницава?",
        "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/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
        "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 066a716..610119b 100644 (file)
        "title-invalid-characters": "ആവശ്യപ്പെട്ട താളിന്റെ തലക്കെട്ടിൽ അസാധുവായ അക്ഷരങ്ങളുണ്ട്: \"$1\".",
        "title-invalid-relative": "തലക്കെട്ടിന് ആപേക്ഷികമായ പഥമാണുള്ളത്. ഉപയോക്താവിന്റെ ബ്രൗസറിൽ നിന്ന് ശ്രമിക്കുമ്പോൾ മിക്കവാറും എത്തിച്ചേരില്ലാത്തതിനാൽ ആപേക്ഷിക താൾ തലക്കെട്ടുകൾ (./, ../) അസാധുവാണ്.",
        "title-invalid-magic-tilde": "ആവശ്യപ്പെട്ട താൾ തലക്കെട്ടിൽ അസാധുവായ മാന്ത്രിക ടിൽഡേ പരമ്പര ഉൾപ്പെടുന്നു (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "ഈ തലക്കെട്ടിന്റെ നീളം കൂടുതലാണു്. UTF-8 എൻകോഡിങ്ങിൽ തലക്കെട്ടുകൾക്ക് $1 ബൈറ്റുകളിലധികം നീളമുണ്ടാകാൻ പാടില്ല.",
+       "title-invalid-too-long": "ഈ തലക്കെട്ടിന്റെ നീളം കൂടുതലാണു്. UTF-8 എൻകോഡിങ്ങിൽ തലക്കെട്ടുകൾക്ക് $1 {{PLURAL:$1|ബൈറ്റിലധികം|ബൈറ്റുകളിലധികം}} നീളമുണ്ടാകാൻ പാടില്ല.",
        "title-invalid-leading-colon": "ആവശ്യപ്പെട്ട താൾ തലക്കെട്ടിന്റെയാദ്യം അസാധുവായ അപൂർണ്ണവിരാമം ഉൾപ്പെടുന്നു.",
        "perfcached": "താഴെ കൊടുത്തിരിക്കുന്ന വിവരം ശേഖരിച്ചു വെച്ചിരിക്കുന്നതാണ്, അതുകൊണ്ട് ചിലപ്പോൾ പുതിയതായിരിക്കണമെന്നില്ല. പരമാവധി {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.",
        "perfcachedts": "താഴെയുള്ള വിവരങ്ങൾ ശേഖരിച്ച് വെച്ചവയിൽ പെടുന്നു, അവസാനം പുതുക്കിയത് $1-നു ആണ്‌. പരമാവധി {{PLURAL:$4|ഒരു ഫലം|$4 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.",
        "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|താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളിലുണ്ടാകുന്ന മാറ്റങ്ങളുടെ]] വെബ് ഫീഡ് (ആറ്റം/ആർ.എസ്.എസ്.) ചീട്ട്",
        "creating": "$1 സൃഷ്ടിക്കുന്നു",
        "editingsection": "തിരുത്തുന്ന താൾ:- $1 (ഉപവിഭാഗം)",
        "editingcomment": "തിരുത്തുന്ന താൾ:- $1 (പുതിയ ഉപവിഭാഗം)",
-       "editconflict": "തിരàµ\81à´¤àµ\8dà´¤àµ\8d à´¸à´®à´°à´¸à´ªàµ\8dà´ªàµ\86à´\9fായàµ\8dà´\95: $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?",
        "explainconflict": "താങ്കൾ തിരുത്താൻ തുടങ്ങിയതിനു ശേഷം ഈ താൾ മറ്റാരോ തിരുത്തി സേവ് ചെയ്തിരിക്കുന്നു.\nമുകളിലുള്ള ടെക്സ്റ്റ് ഏരിയയിൽ നിലവിലുള്ള ഉള്ളടക്കം കാണിക്കുന്നു.\nതാങ്കൾ ഉള്ളടക്കത്തിൽ വരുത്തിയ മാറ്റങ്ങൾ താഴെയുള്ള ടെക്സ്റ്റ് ഏരിയയിൽ കാണിക്കുന്നു.\nതാങ്കളുടെ മാറ്റങ്ങൾ മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലേക്ക് സം‌യോജിപ്പിക്കുക.\nതാങ്കൾ '''സേവ് ചെയ്യുക''' എന്ന ബട്ടൺ അമർത്തുമ്പോൾ '''മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലുള്ള എഴുത്തുകൾ മാത്രമേ''' സേവ് ആവുകയുള്ളൂ.",
        "yourtext": "താങ്കൾ എഴുതി ചേർത്തത്",
        "storedversion": "മുമ്പേയുള്ള നാൾപതിപ്പ്",
        "yourdiff": "വ്യത്യാസങ്ങൾ",
        "copyrightwarning": "{{SITENAME}} സംരംഭത്തിൽ എഴുതപ്പെടുന്ന ലേഖനങ്ങളെല്ലാം $2 പ്രകാരം സ്വതന്ത്രമാണ് (വിശദാംശങ്ങൾക്ക് $1 കാണുക). താങ്കൾ എഴുതുന്ന ലേഖനം തിരുത്തപ്പെടുന്നതിലോ ഒഴിവാക്കപ്പെടുന്നതിലോ എതിർപ്പുണ്ടെങ്കിൽ ദയവായി ലേഖനമെഴുതാതിരിക്കുക.\n\nഈ ലേഖനം താങ്കൾത്തന്നെ എഴുതിയതാണെന്നും അതല്ലെങ്കിൽ പകർപ്പവകാശനിയമങ്ങളുടെ പരിധിയിലില്ലാത്ത ഉറവിടങ്ങളിൽനിന്ന് പകർത്തിയതാണെന്നും ഉറപ്പാക്കുക.\n\n'''പകർപ്പവകാശ സംരക്ഷണമുള്ള സൃഷ്ടികൾ ഒരു കാരണവശാലും ഇവിടെ പ്രസിദ്ധീകരിക്കരുത്.'''",
        "copyrightwarning2": "{{SITENAME}} സംരംഭത്തിൽ താങ്കൾ എഴുതി ചേർക്കുന്നതെല്ലാം മറ്റുപയോക്താക്കൾ തിരുത്തുകയോ, മാറ്റം വരുത്തുകയോ, ഒഴിവാക്കുകയോ ചെയ്തേക്കാം. താങ്കൾ എഴുതി ചേർക്കുന്നതു മറ്റ് ഉപയോക്താക്കൾ തിരുത്തുന്നതിലോ ഒഴിവാക്കുന്നതിലോ താങ്കൾക്ക് എതിർപ്പുണ്ടെങ്കിൽ ദയവായി ലേഖനമെഴുതാതിരിക്കുക.\nഇതു താങ്കൾത്തന്നെ എഴുതിയതാണെന്നും, അതല്ലെങ്കിൽ പകർപ്പവകാശ നിയമങ്ങളുടെ പരിധിയിലില്ലാത്ത ഉറവിടങ്ങളിൽനിന്നും പകർത്തിയതാണെന്നും ഉറപ്പാക്കുക (കുടുതൽ വിവരത്തിനു $1 കാണുക).\n'''പകർപ്പവകാശ സംരക്ഷണമുള്ള സൃഷ്ടികൾ ഒരു കാരണവശാലും ഇവിടെ പ്രസിദ്ധീകരിക്കരുത്!'''",
+       "editpage-cannot-use-custom-model": "ഈ താളിന്റെ ഉള്ളടക്ക മാതൃക മാറ്റാൻ കഴിയില്ല.",
        "longpageerror": "'''പിഴവ്: താങ്കൾ സമർപ്പിച്ച എഴുത്തുകൾക്ക് {{PLURAL:$1|ഒരു കിലോബൈറ്റ്|$1 കിലോബൈറ്റ്സ്}} വലിപ്പമുണ്ട്. പരമാവധി അനുവദനീയമായ വലിപ്പം {{PLURAL:$2|ഒരു കിലോബൈറ്റ്|$2 കിലോബൈറ്റ്സ്}} ആണ്‌. അതിനാലിതു സേവ് ചെയ്യാൻ സാദ്ധ്യമല്ല.'''",
        "readonlywarning": "'''മുന്നറിയിപ്പ്: ഡേറ്റാബേസ് പരിപാലനത്തിനു വേണ്ടി ബന്ധിച്ചിരിക്കുന്നു, അതുകൊണ്ട് താങ്കളിപ്പോൾ വരുത്തിയ മാറ്റങ്ങൾ സേവ് ചെയ്യാൻ സാദ്ധ്യമല്ല.''' താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഒരു ടെക്സ്റ്റ് ഫയലിലേക്ക് പകർത്തി (കോപ്പി & പേസ്റ്റ്) പിന്നീടുപയോഗിക്കുന്നതിനായി കരുതിവക്കാൻ താല്പര്യപ്പെടുന്നു. ഡേറ്റാബേസ് ബന്ധിച്ച അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ വിശദീകരണം: $1",
        "protectedpagewarning": "'''മുന്നറിയിപ്പ്:  ഈ താൾ കാര്യനിർവാഹക പദവിയുള്ളവർക്കു മാത്രം തിരുത്താൻ സാധിക്കാവുന്ന തരത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിരിക്കുന്നു.''' അവലംബമായി രേഖകളിൽ ലഭ്യമായ ഏറ്റവും പുതിയ വിവരം താഴെ നൽകിയിരിക്കുന്നു:",
        "badsig": "അനുവദനീയമല്ലാത്ത രൂപത്തിലുള്ള ഒപ്പ്. HTML ടാഗുകൾ പരിശോധിക്കുക.",
        "badsiglength": "താങ്കളുടെ ഒപ്പിനു നീളം കൂടുതലാണ്‌.\nഅതിലെ {{PLURAL:$1|അക്ഷരത്തിന്റെ|അക്ഷരങ്ങങ്ങളുടെ}} എണ്ണം $1 ൽ താഴെയായിരിക്കണം.",
        "yourgender": "ആൺ / പെൺ?",
-       "gender-unknown": "à´µàµ\86ളിപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതാനാà´\97àµ\8dരഹിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനിലàµ\8dà´²",
+       "gender-unknown": "താà´\99àµ\8dà´\95à´³àµ\86 à´ªà´°à´¾à´®àµ¼à´¶à´¿à´\95àµ\8dà´\95àµ\81à´®àµ\8dà´ªàµ\8bൾ, à´¸à´¾à´¦àµ\8dà´§àµ\8dയമാà´\95àµ\81à´¨àµ\8dനയിà´\9fà´¤àµ\8dà´¤àµ\8d à´²à´¿à´\82à´\97രഹിത à´µà´¾à´\95àµ\8dà´\95àµ\81à´\95ൾ à´¸àµ\8bà´«àµ\8dâ\80\8cà´±àµ\8dà´±àµ\8dâ\80\8cà´µàµ\87ർ à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതാണàµ\8d",
        "gender-male": "പുരുഷൻ",
        "gender-female": "സ്ത്രീ",
        "prefs-help-gender": "ഈ സജ്ജീകരണം നിർബന്ധമല്ല.\nസോഫ്റ്റ്‌വെയർ ഉപയോഗിച്ച് സ്ത്രീകളേയും പുരുഷന്മാരേയും ശരിയായി സംബോധന ചെയ്യാൻ ഉപയോഗിക്കുന്നു.\nഈ വിവരം പരസ്യമായി ലഭ്യമായിരിക്കുന്നതാണ്‌.",
        "uploaddisabledtext": "പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നതു സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു.",
        "php-uploaddisabledtext": "പി.എച്ച്.പി.യിൽ പ്രമാണ അപ്‌‌ലോഡുകൾ സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു.\nദയവായി file_uploads ക്രമീകരണങ്ങൾ പരിശോധിക്കുക.",
        "uploadscripted": "ഈ പ്രമാണത്തിൽ വെബ് ബ്രൗസർ തെറ്റായി വ്യാഖ്യാനിച്ചേക്കാവുന്ന എച്ച്.റ്റി.എം.എൽ. അല്ലെങ്കിൽ സ്ക്രിപ്റ്റ് കോഡ് ഉണ്ട്.",
+       "uploaded-script-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സ്ക്രിപ്റ്റ് ചെയ്യാവുന്ന ഭാഗമായ \"$1\" കണ്ടെത്തി.",
+       "uploaded-hostile-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സുരക്ഷിതമല്ലാത്ത സി.എസ്.എസ്. സ്റ്റൈൽ ഭാഗം കണ്ടെത്താനായി.",
+       "uploaded-image-filter-svg": "യു.ആർ.എൽ. ഉൾപ്പെടെയുള്ള ചിത്ര അരിപ്പ : <code>&lt;$1 $2=\"$3\"&gt;</code>, അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. ചിത്രത്തിൽ കണ്ടെത്തി.",
        "uploadscriptednamespace": "ഈ എസ്.വി.ജി. പ്രമാണത്തിൽ ഉപയോഗിക്കാൻ പാടില്ലാത്ത നാമമേഖലയായ \"$1\" ഉണ്ട്",
        "uploadinvalidxml": "അപ്‌ലോഡ് ചെയ്ത പ്രമാണത്തിലെ എക്സ്.എം.എൽ. പാഴ്സ് ചെയ്യാൻ കഴിയില്ല.",
        "uploadvirus": "പ്രമാണത്തിൽ വൈറസുണ്ട്! വിശദാംശങ്ങൾ: $1",
        "randomincategory-nopages": "[[:Category:$1|വർഗ്ഗം:$1]] എന്നതിൽ താളുകളൊന്നുമില്ല.",
        "randomincategory-category": "വർഗ്ഗം:",
        "randomincategory-legend": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ",
+       "randomincategory-submit": "പോകൂ",
        "randomredirect": "ക്രമരഹിതമായ തിരിച്ചുവിടൽ",
        "randomredirect-nopages": "\"$1\" എന്ന നാമമേഖലയിൽ തിരിച്ചുവിടൽ താളുകളൊന്നുമില്ല.",
        "statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ",
        "nmembers": "{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}}",
        "nmemberschanged": "$1 → {{PLURAL:$2|ഒരു അംഗം|$2 അംഗങ്ങൾ}}",
        "nrevisions": "{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}}",
-       "nviews": "{{PLURAL:$1|ഒരു സന്ദർശനം|$1 സന്ദർശനങ്ങൾ}}",
        "nimagelinks": "{{PLURAL:$1|ഒരു താളിൽ|$1 താളുകളിൽ}} ഉപയോഗിച്ചിരിക്കുന്നു",
        "ntransclusions": "{{PLURAL:$1|ഒരു താളിൽ|$1 താളുകളിൽ}} ഉപയോഗിച്ചിരിക്കുന്നു",
        "specialpage-empty": "ഈ താൾ ശൂന്യമാണ്.",
        "wlheader-enotif": "ഇമെയിൽ അറിയിപ്പുകൾ സജ്ജമാക്കിയിരിക്കുന്നു.",
        "wlheader-showupdated": "താങ്കളുടെ അവസാന സന്ദർശനത്തിനു ശേഷം മാറ്റം വന്ന താളുകൾ  '''കടുപ്പിച്ച്''' കാണിച്ചിരിക്കുന്നു",
        "wlnote": "$3, $4-നു കഴിഞ്ഞ {{PLURAL:$2|മണിക്കൂറിൽ|<strong>$2</strong> മണിക്കൂറിൽ}} നടന്ന {{PLURAL:$1|ഒരു പുതിയ മാറ്റം|<strong>$1</strong> പുതിയ മാറ്റങ്ങൾ}} താഴെ പ്രദർശിപ്പിച്ചിരിക്കുന്നു.",
-       "wlshowlast": "ഒടുവിലത്തെ $1 മണിക്കൂറുകൾ $2 ദിനങ്ങൾ പ്രദർശിപ്പിക്കുക",
+       "wlshowlast": "ഒടുവിലത്തെ $1 മണിക്കൂറുകൾ $2 ദിനങ്ങൾ പ്രദർശിപ്പിക്കുക",
        "watchlist-options": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ സജ്ജീകരണങ്ങൾ",
        "watching": "ശ്രദ്ധിക്കുന്നു...",
        "unwatching": "അവഗണിക്കുന്നു...",
        "rollback-success": "$1 ചെയ്ത തിരുത്ത് തിരസ്ക്കരിച്ചിരിക്കുന്നു; $2 ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു.",
        "sessionfailure-title": "സെഷൻ പരാജയപ്പെട്ടിരിക്കുന്നു",
        "sessionfailure": "താങ്കളുടെ ലോഗിൻ സെഷനിൽ പ്രശ്നങ്ങളുള്ളതായി കാണുന്നു;\nസെഷൻ തട്ടിയെടുക്കൽ ഒഴിവാക്കാനുള്ള മുൻകരുതലായി ഈ പ്രവൃത്തി റദ്ദാക്കിയിരിക്കുന്നു.\nദയവായി പിന്നോട്ട് പോയി താങ്കൾ വന്ന താളിൽ ചെന്ന്, വീണ്ടും ശ്രമിക്കുക.",
+       "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": "സംരക്ഷണ പ്രവർത്തനരേഖ",
        "protectlogtext": "താഴെ താളുകൾ സംരക്ഷിച്ചതിന്റേയും സംരക്ഷണം നീക്കിയതിന്റേയും പട്ടിക നൽകിയിരിക്കുന്നു.\nനിലവിലുള്ള [[Special:ProtectedPages|സംരക്ഷിത താളുകളുടെ പട്ടിക]] കാണുക.",
        "protectedarticle": "\"[[$1]]\" സം‌രക്ഷിച്ചിരിക്കുന്നു",
        "sp-contributions-search": "ചെയ്ത സേവനങ്ങൾ",
        "sp-contributions-username": "ഐ.പി. വിലാസം അഥവാ ഉപയോക്തൃനാമം:",
        "sp-contributions-toponly": "ഒടുവിലത്തെ നാൾപ്പതിപ്പുകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
-       "sp-contributions-newonly": "താൾ à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95ാനàµ\81à´³àµ\8dà´³ തിരുത്തുകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
+       "sp-contributions-newonly": "താളàµ\81à´\95ൾ à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\9aàµ\8dà´\9a തിരുത്തുകൾ മാത്രം പ്രദർശിപ്പിക്കുക",
        "sp-contributions-submit": "തിരയൂ",
        "whatlinkshere": "ഈ താളിലേക്കുള്ള കണ്ണികൾ",
        "whatlinkshere-title": "\"$1\" എന്ന താളിലേക്കുള്ള കണ്ണികൾ",
        "tooltip-pt-logout": "ലോഗൗട്ട് ചെയ്യാനുള്ള കണ്ണി",
        "tooltip-pt-createaccount": "നിർബന്ധമില്ലെങ്കിലും, താങ്കൾ ഒരു അംഗത്വമെടുക്കണമെന്നും പ്രവേശിക്കണമെന്നും താത്പര്യപ്പെടുന്നു",
        "tooltip-ca-talk": "വിവരദായക താളിനെക്കുറിച്ചുള്ള ചർച്ച",
-       "tooltip-ca-edit": "താà´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´\88 à´¤à´¾àµ¾ à´¤à´¿à´°àµ\81à´¤àµ\8dതാവàµ\81à´¨àµ\8dനതാണàµ\8d. à´¤à´¿à´°àµ\81à´¤àµ\8dതിയ à´¤à´¾àµ¾ à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\82à´¨àµ\8dനതിനàµ\81 à´®àµ\81ൻപàµ\8d à´ªàµ\8dà´°à´¿à´µàµ\8dà´¯àµ\82 à´\95ാണàµ\81à´\95.",
+       "tooltip-ca-edit": "à´\88 à´¤à´¾àµ¾ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95",
        "tooltip-ca-addsection": "പുതിയ വിഭാഗം തുടങ്ങുക",
        "tooltip-ca-viewsource": "ഈ താൾ സം‌രക്ഷിക്കപ്പെട്ടിരിക്കുന്നു. താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാവുന്നതാണ്‌.",
        "tooltip-ca-history": "ഈ താളിന്റെ പഴയ പതിപ്പുകൾ.",
        "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 ({{PLURAL:$2|ഒരു തിരിച്ചുവിടൽ|$2 തിരിച്ചുവിടലുകൾ}}; {{PLURAL:$3|തിരിച്ചുവിടലല്ലാത്ത ഒരെണ്ണം|തിരിച്ചുവിടലല്ലാത്ത $3}})",
        "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/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],  [[{{#Special:Redirect}}/revision/328429]], അല്ലെങ്കിൽ [[{{#Special:Redirect}}/user/101]].",
        "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 d01fead..82d1415 100644 (file)
@@ -11,7 +11,8 @@
                        "Wisdom",
                        "Zorigt",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Sembuk"
                ]
        },
        "tog-underline": "Линкүүдийн доогуур зураас зур:",
        "nlinks": "$1 линк",
        "nmembers": "$1 гишүүн",
        "nrevisions": "$1 засвар",
-       "nviews": "$1 удаа үзсэн",
        "nimagelinks": "$1 {{PLURAL:$1|хуудсанд|хуудсанд}} ашигласан",
        "specialpage-empty": "Энэ мэдүүлэгт үр дүн гарсангүй.",
        "lonelypages": "Өнчин хуудсууд",
        "tooltip-pt-mycontris": "Таны оруулсан хувь нэмрийн жагсаалт",
        "tooltip-pt-login": "Заавал хийх ёстой зүйл биш боловч таныг нэвтрэхийг зөвлөж байна.",
        "tooltip-pt-logout": "Гарах",
+       "tooltip-pt-createaccount": "Заавал шаарлагатай биш боловч та бүртгүүлж, нэвтэрч орно уу.",
        "tooltip-ca-talk": "Хуудсыг зөвшин хэлэлцэх",
        "tooltip-ca-edit": "Та энэ хуудсыг засч янзалж болно. Хадгалахаасаа өмнө урьдчилан харах товчийг дардаг юм шүү.",
        "tooltip-ca-addsection": "Шинэ сэдвээр ярьж эхлэх",
index e028891..0572e0d 100644 (file)
@@ -47,7 +47,8 @@
                        "Darshan kandolkar",
                        "Steinsplitter",
                        "Macofe",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Suyog"
                ]
        },
        "tog-underline": "दुव्यांचे अधोरेखन:",
        "hidetoc": "लपवा",
        "collapsible-collapse": "निपात करा",
        "collapsible-expand": "विस्तार",
+       "confirmable-yes": "होय",
+       "confirmable-no": "नाही",
        "thisisdeleted": "$1चे अवलोकन किंवा पुनर्स्थापन करायचे ?",
        "viewdeleted": " $1चे अवलोकन करायचे?",
        "restorelink": "{{PLURAL:$1|एक वगळलेले संपादन|$1 वगळलेली संपादने}}",
        "passwordreset": "परवलीचा शब्द पूर्ववत करा",
        "passwordreset-text-one": "आपला परवलीचा शब्द बदलण्यास हे आवेदन भरा.",
        "passwordreset-text-many": "{{PLURAL:$1|आपला तात्पुरता परवलीचा शब्द विपत्रामार्फत प्राप्त करण्यास खालील क्षेत्रातील एखादे भरा.}}",
-       "passwordreset-legend": "परवलीचा शब्द पूर्ववत करा",
        "passwordreset-disabled": "या विकिवर परवलीचा शब्द पुनर्स्थापित करता येत नाही.",
        "passwordreset-emaildisabled": "या विकिवर विपत्र पाठविणे 'अशक्य' करण्यात आलेले आहे.",
        "passwordreset-username": "सदस्यनाव:",
        "resettokens": "ओळखचिन्ह(टोकन) पुनर्स्थापित करा",
        "resettokens-text": "येथे आपल्या खात्यात असलेला व्यक्तिगत मजकूरापर्यंत पोचण्यासाठी आपण ओळखचिन्ह(टोकन) पुनर्स्थापित करू शकता.\nआपण जर तो अपघाताने कोणासमवेत सहभागीला असेल किंवा आपले खात्याची आपण तडजोड केली असल्यास, हे करावयास हवे.",
        "resettokens-no-tokens": "पुनर्स्थापित करण्यासाठी कोणतीही ओळखचिन्हे नाहीत.",
-       "resettokens-legend": "ओळखचिन्ह(टोकन) पुनर्स्थापित करा",
        "resettokens-tokens": "ओळखचिन्हे:",
        "resettokens-token-label": "$1 (सद्य मुल्य: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|आपल्या निरीक्षणसूचीतील पानांमधील बदलाचा]] वेब रसद बिल्ला (ॲटम/आरएसएस)",
        "randomincategory": "वर्गातील अनियत पान",
        "randomincategory-invalidcategory": "\"$1\" हे अधिकृत वर्गाचे नाव नाही.",
        "randomincategory-nopages": "[[:Category:$1]] यात काहीच पाने नाहीत.",
+       "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": "या अहवालाकरिता(रिपोर्ट)कोणताही निकाल नाही.",
index 19e6916..5708727 100644 (file)
        "cancel": "ول هاکردن",
        "moredotdotdot": "ویـشـتـه...",
        "mypage": "مه صفحه",
-       "mytalk": "مه گپ",
+       "mytalk": "گپ",
        "anontalk": "گپ بزوئن اینتا آی‌پی وسّه",
        "navigation": "بگردستن",
        "and": "&#32;و",
        "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": "بدی‌ین ِعکس ِصفحه",
        "viewyourtext": "بتونّی '''شه بنویشته چیون''' مبدأ ره این صفحه دله هارشین و کپی هاکنین:",
        "protectedinterface": "این صفحه ارائه‌دهندهٔ متنی واسط کارور این نرم‌افزار هسته و به منظور پیشگیری از خرابکاری زلفین بزه‌بیّه.",
        "yourname": "شمه کاروری‌نوم:",
+       "userlogin-yourname": "کاروری نوم",
+       "userlogin-yourname-ph": "شه کاروری نوم ره بنویسین",
        "yourpassword": "شمه پسورد",
+       "userlogin-yourpassword": "رمز",
        "yourpasswordagain": "پسورد ره دِباره بنویس",
        "remembermypassword": "مه رمز ره (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) این مرورگر سر یاد نکان",
        "yourdomainname": "شمه کاروری نوم",
        "mailmypassword": "اتا نو پسورد بساز و برسِن",
        "accountcreated": "کاروری نوم دِرِس بیّه",
        "accountcreatedtext": "کاروری نوم، $1 بساته بیّه.",
+       "loginlanguagelabel": "زوون: $1",
+       "pt-login": "دله بموئن",
+       "pt-createaccount": "عضو بواشین",
+       "pt-userlogout": "دربوردن",
        "newpassword": "نو پسورد:",
        "passwordreset-username": "کاروری نوم:",
        "passwordreset-domain": "دامنه:",
        "preview": "پیش‌پیش سِراق هدائن",
        "showpreview": "پیش‌پیش سِراق هدائن",
        "showdiff": "تغییرات ِسراق هدائن",
-       "anoneditwarning": "'''هشدار:''' شِما هنتا عضو نَیینی.\nشمه آی‌پی آدرِس تاریخچه دله موندنه.",
+       "anoneditwarning": "<strong>هشدار:</strong> شما هَنتا لاگین نَیی. اگه اتا تغییر انجام هادی، بقیه تونّه ته آی‌پی ره هارشِن. اگه <strong>[$1 لاگین بَواشی (دله بئی)]</strong> یا <strong>[$2 اتا کاروری حیساب بسازی]</strong>، شمه دَچی‌‎یه‌ئون شمه نوم جه ثبت وانه و اتسری مزایا شمه وسّه دانّه.",
        "anonpreviewwarning": "''شما هنتا عضو نَیینی، اگه اتچی بنویسین، شمه آی‌پی ِلینگِ‌رج اینجه موندنه.''",
        "missingcommenttext": "ات‌چی اینجه بنویسین که شمه توضیح بوو",
        "summary-preview": "خلاصه‌ی پیش‌پیش سِراق هدائن:",
        "accmailtitle": "پسورد ره برسِنیمی.",
        "accmailtext": "اتا تصادفی پسور بساته بیّه [[User talk:$1|$1]] وسّه $2 سَر برسِنی‌یه بیّه.\n\nاین ترنه کاروری حساب ِپسور، سامانه دله بموئن په، ''[[Special:ChangePassword|ات‌تی]]'' بتونده عوض بوو.",
        "newarticle": "(ترنه)",
+       "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 ره دچی‌ین",
        "copyrightwarning": "خـاهش بونه شمه یاد دواشه که همه چیزایی که {{SITENAME}} دله وانه، تحت $2 حیساب وونه. (ویشتر بخوندستن وسه $1 ره هارشین)<br />\nاگه نخانّی شمه بنویشته‌ئون اینجه دس بزه یا ات نفر دیگه شمه بنویشته ره کوپی نکانه، اصلأ شه بنویشته ره اینجه نی‌یلین.",
        "templatesused": "{{PLURAL:$1|شابلون|شابلونای}} استفاده بَیی این صفحه دله:",
        "templatesusedpreview": "{{PLURAL:$1|شابلون|شابلونای}} استفاده بَیی این پیش‌نمایش دله:",
+       "template-protected": "(زلفِن بزوئه)",
+       "template-semiprotected": "(پچوک زلفن بزه)",
        "permissionserrorstext-withaction": "ته اجازهٔ $2 ره به {{PLURAL:$1|دلیل|دلایل}} رو به رو ندانی:",
        "recreate-moveddeleted-warn": "'''هشدار: ته دری اتا صفحه ره نویسنی که قبلا پاک بیّه.'''\n\nشه فکر هاکن که اینتا کار که دری کانده درسته یا نا؟\nاینجه توندی پاک بیی صفحه ره هارشی:",
        "moveddeleted-notice": "اینتا صفحه پاک بی بی‌یه\nاینجه بتوندی قبلی صفحه که پاک بیّه ره هارشی",
        "lineno": "بند  $1:",
        "editundo": "واچی‌ین",
        "searchresults": "بچرخستن ِجوابون",
+       "searchresults-title": "چرخه‌ئوی نتیجه «$1» وسّه",
        "prevn": "پـیـشـیـن {{PLURAL:$1|$1}}",
        "nextn": "تا پَس‌تر {{PLURAL:$1|$1}}",
+       "nextn-title": "$1 بعدی {{PLURAL:$1|نتیجه|نتیجه}}",
+       "shown-title": "$1 ِ{{PLURAL:$1|نتیجه|نتیجه}} سِراق هِدائن هر صفحه دله",
        "viewprevnext": "هارشائن ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "'''« [[:$1]] » ِ صفحه ره این ویکی دله بساجین!'''",
+       "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": "(بَرسی‌یه $1 جه)",
        "search-section": "(تیکه $1)",
        "search-suggest": "شما اینتا ره نخاسنی: $1",
        "search-interwiki-caption": "خاخر پروژه‌ئون",
        "search-interwiki-more": "(ویشتر)",
+       "searchall": "همه",
+       "search-showingresults": "{{PLURAL:$4|نتایج <strong>$1</strong> از <strong>$3</strong>|نتایج <strong>$1 - $2</strong> از <strong>$3</strong>}}",
+       "search-nonefound": "اونچی بخاستنی پیدا نیّه.",
        "powersearch-legend": "ململ بَیی دور هایتن",
        "powersearch-ns": "بچرخستن اینان دله:",
-       "mypreferences": "مه خاستنی‌ئون",
+       "mypreferences": "ترجیحات",
        "prefs-edits": "تعداد دچی‌یه‌ئون:",
        "prefs-rc": "تازه دگاردسته‌ئون",
        "youremail": "شه مه Email:",
        "group-sysop": "مدیرون",
        "group-all": "(همه)",
        "grouppage-sysop": "{{ns:project}}:مدیرون",
+       "right-writeapi": "بنویشتن API جه استفاده هاکردن",
+       "newuserlogpage": "کارور بساتن سیاهه",
        "rightslog": "سیاهه اختیارای کاروری",
        "rightslogtext": "اینتا سیاهه تغییرای اختیارای کاروری هسته.",
        "action-edit": "این صفحه ره دچی‌ین",
        "action-move": "دکشی‌ین اینتا صفحه",
        "action-move-subpages": "دکشی‌ین اینتا صفحه و ونه زیر رج‌ئون",
        "action-move-rootuserpages": "دکشی‌ین صفحه‌ئون کاروری سرچله",
+       "enhancedrc-history": "تاریخچه",
        "recentchanges": "تازه دگاردسته‌ئون",
        "recentchanges-legend": "تازه دگاردسته‌ئون گوزینه‌ها",
        "recentchanges-summary": "ویکی تازه دگاردسته‌ئون ره اینتا صفحه دله دمبال هاکنین.",
        "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|تازه بساته صفحه‌ئون]] ره هم هارشین)",
        "rclistfrom": "نِمایش تازه‌دگاردسته‌ئون با شروع از $3 $2",
        "rcshowhideminor": "پچیک دچی‌یه‌ئون $1",
+       "rcshowhideminor-hide": "پنهون هاکن",
        "rcshowhidebots": "ربوت‌ئون $1",
+       "rcshowhidebots-show": "سِراق هاده",
        "rcshowhideliu": "ثبت‌نوم هاکرده کارورون $1",
+       "rcshowhideliu-hide": "پنهون هاکن",
        "rcshowhideanons": "ناشناس ِکارورون $1",
+       "rcshowhideanons-hide": "پنهون هاکن",
        "rcshowhidepatr": "گشت‌بخارد ِدچی‌یه‌ئون $1",
        "rcshowhidemine": "مه دچی‌یه‌ئون $1",
+       "rcshowhidemine-hide": "پنهون هاکن",
        "rclinks": "نـِشون هـِدائن  $1 پایانی دَچی‌‌یه‌ئون، $2 اِسـا روز ره دلـه؛ $3",
        "diff": "فرق",
        "hist": "تاریخچه",
        "recentchangeslinked": "واری دأچیـه‌ن‌ئون",
        "recentchangeslinked-feed": "واری دچی‌یه‌ئون",
        "recentchangeslinked-toolbox": "واری دچی‌یه‌ئون",
+       "recentchangeslinked-title": "مرتبط تغییرات $1 جه",
        "recentchangeslinked-page": "صفحه ایسم:",
+       "recentchangeslinked-to": "تغییرات صفحه‌ئونی که این صفحه جه ربط دارنه ره سِراق هِدائن",
        "upload": "باربی‌یشتن فـایـل",
        "uploadbtn": "باربی‌یشتن فایل",
        "uploadtext": "فرم زیر جه باربی‌یشتن نو پرونده‌ئون وسّه استفاده هاکنین.\nبدی‌ین پرونده‌ئونی که قبلاً باربی‌یشته بَینه به [[Special:FileList|فهرست پرونده‌ها]] بورین. باربی‌یشتن مجدد [[Special:Log/upload|سیاههٔ بارگذاری‌ها]] و حذف پرونده‌ئون [[Special:Log/delete|deletion log]] دله ثبت وانه.\n\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>''' استفاده از اتا نسخه ۲۰۰ پیکسلی از پرونده که اتا جعبه سمت چپ متن دله دره و عبارت alt text ونه دله به عنوان توضیح استفاده بیّه وسّه\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' بساتن اتا پیوند مستقیم به پرونده بدون نمایش پرونده",
        "uploadlogpage": "باربی‌یشتن گزارش",
+       "filedesc": "کار ِگزارش",
+       "license-header": "اجازه‌نومه",
        "imgfile": "فایل",
        "listfiles": "هارشی ئون ره لیست",
        "listfiles_name": "نـوم",
        "listfiles_size": "قایده",
        "file-anchor-link": "فایل",
        "filehist": "فایل تاریخچه",
+       "filehist-help": "تاریخ/زمون‌ها سَر کلیک هاکنین تا اون گادِر ِنسخه ره هارشین.",
        "filehist-current": "إسا",
        "filehist-datetime": "تاریخ/زمون",
        "filehist-thumb": "انگوس گتی",
+       "filehist-thumbtext": "انگوس‌گتی عکس $1 نسخه جه",
        "filehist-user": "کارور",
+       "filehist-dimensions": "ابعاد",
        "filehist-comment": "هارشا",
-       "imagelinks": "Ù\84Û\8cÙ\86Ú©â\80\8cئÙ\88ن",
+       "imagelinks": "پرÙ\88Ù\86دÙ\87â\80\8cÛ\8c Ø§Ø³ØªÙ\81ادÙ\87 Ø¨Û\8cÙ\91ن",
        "linkstoimage": "این {{PLURAL:$1|صفحه|$1 صفحه‌ئون}} لینک هِدانه این فایل ره:",
+       "nolinkstoimage": "این عکس ره هیچ جا نی‌یشتنه",
+       "sharedupload-desc-here": "این پرونده $1 دله دَره و ممکن هسته دیگه پروژه‌ئون دله هم استفاده بواشه.\nتوضیحات موجود [$2 پرونده توضیحات صفحه میون اونجه]، سِراق هِدا وونّه.",
+       "upload-disallowed-here": "متأسفانه شما نتوندی این پرونده ره بازنویس هاکنی.",
        "randompage": "شانسی صفحه",
        "statistics": "آمار",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
        "booksources-search-legend": "بگردستن منابع کتاب",
        "booksources-text": "زیر فهرستی از لینکا به وبگاه‌ئون دیگه دره که کتاب‌ئون نو و دست دوم روشنّه و ممکنه اطلاعات ویشتری راجع به کتاب مورد نظر دارِن:",
        "specialloguserlabel": "کارور:",
+       "log": "سیاهه‌ها",
        "allpages": "همه صفحه‌ئون",
        "prevpage": "پیشین صفحه ($1)",
        "allarticles": "همه صفحه‌ئون",
        "emailuser": "این کارور وسّه ایمیل بَرسِن",
        "emailpage": "ئـی-مه‌یـل ای کـارور وه‌سه",
        "watchlist": "مه دمبال‌هاکرده‌‌ئون ِلیست",
-       "mywatchlist": "مه دمبال‌هاکرده‌‌ئون ِلیست",
+       "mywatchlist": "دمبال‌هاکرده‌ئون فهرست",
        "watchnologin": "سیستم ره دله نی ئه موئین",
        "addedwatchtext": "«[[:$1]]» شمه [[Special:Watchlist|دمبال هاکردئون لیست]] دله اضافه بیه.\nاینتا صفحه دگاردسته‌ئون و ونه گپ آینده دله اینتا لیست دله شمه وسه فهرست بوننه؛ یان شه بماند، اینتا صفحه، [[Special:RecentChanges|تازه دگاردسته‌ئون]] فهرست دله شمه وسه '''پررنگ‌تر''' نمایش هدا بونه تا وره راحت تر بوینین.",
        "watch": "دمبال هاکردن",
        "undeletelink": "بـأویـنـه‌ن / ده‌واره جـا بـیـه‌شـتـه‌ن",
        "namespace": "نوم‌جا:",
        "invert": "برعکس انتخاب هاکن",
+       "tooltip-invert": "این جعبه ره علامت بزنین تا صفحه‌ئون ِتغییرات انتخاب‌بَیی فضائون (و دیگه فضائون علامت‌بَزه دله) مخفی بَوون",
+       "namespace_association": "مرتبط فضائون",
+       "tooltip-namespace_association": "این جعبه ره علامت بزنین تا گپ یا دیگه مرتبط فضائون هم انتخاب بواشِن",
        "blanknamespace": "(مـار)",
-       "contributions": "کارور کایری‌ئون",
+       "contributions": "{{GENDER:$1|کارور}} کایری‌ئون",
        "contributions-title": "$1 کایری‌ئون",
        "mycontris": "مه کایری‌ئون",
        "contribsub2": "$1 ($2) وه‌سه",
        "whatlinkshere-prev": "{{PLURAL:$1|پـیـشـیـن|$1 تـای پـیـشـیـن}}",
        "whatlinkshere-next": "{{PLURAL:$1|پَس|$1 تا پَس‌تر}}",
        "whatlinkshere-links": "← لـیـنـک‌ئون",
+       "whatlinkshere-hideredirs": "$1 دکشی‌یه",
+       "whatlinkshere-hidetrans": "$1 تراگنجانشون",
+       "whatlinkshere-hidelinks": "$1 لینک",
+       "whatlinkshere-filters": "فیلترون",
        "blockip": "کارور ره دَوستن",
        "blockip-legend": "کارور ره دَوستن",
        "ipbsubmit": "ای کارور دأبه‌س بأوه",
        "tooltip-pt-mycontris": "مه کایری‌ئون لیست",
        "tooltip-pt-login": "شه‌ما به‌ته‌ر هـأسـه که سـیـسـتـه‌م ده‌لـه بـیـه‌ئی، هـرچـأن زوری نـیـه",
        "tooltip-pt-logout": "سیستم جه دأیابـوری",
+       "tooltip-pt-createaccount": "شِما ره پیشنهاد کامبی که اتا کاروری حیساب بسازین و لاگین بَواشین؛ البته این کار اختیاری هسته.",
        "tooltip-ca-talk": "این صفحه خَوری گپ بَزوئن",
        "tooltip-ca-edit": "شِما بتوندی این صفحه ره دَچینی.",
        "tooltip-ca-addsection": "أتـا نـه گـب را دأکـه‌تـه‌ن",
        "tooltip-t-recentchangeslinked": "اِسایی دِگاردسته‌ئون ِصفحه‌ئون که این صفحه جه لینک دارنه",
        "tooltip-feed-rss": "RSS خوراک این صفحه وسّه",
        "tooltip-feed-atom": "Atom خوراک این صفحه وسّه",
+       "tooltip-t-contributions": "این کارور ِکایریون ِفهرست",
        "tooltip-t-emailuser": "ای کـارور ره اتـا ئـه‌لـه‌کـتـه‌رونـیـکـی‌نـومـه راهـی هـه‌کـارده‌ن",
        "tooltip-t-upload": "بـاربـیـه‌شـتـه‌ن فـایـل‌ئون",
        "tooltip-t-specialpages": "همه شا صفحه‌ئون ِلیسـت",
        "tooltip-ca-nstab-special": "اینتا اتا شا صفحه هسته که شِما نتوندی وه ره دچینی",
        "tooltip-ca-nstab-image": "عکس ِصفحه ره بدی‌ین",
        "tooltip-ca-nstab-template": "شـابـلـون بـأویـنـه‌ن",
+       "tooltip-ca-nstab-category": "رج ره بدی‌ین",
+       "tooltip-save": "شه تغییرات ره ذخیره هاکنین",
        "tooltip-preview": "شـه ده‌گـه‌ره‌سـه‌ئون ره پـیـشـاپـیـش بـأویـنـه‌ن،\n خـا‌هـه‌ش بـونـه، شـه کـارئون ره جـا دأکـه‌تـه‌ن پـیـش، ای ره کـار بـأزه‌نـی.",
+       "tooltip-diff": "تغییراتی که ته هِدایی ره سِراق هِدائن",
+       "tooltip-rollback": "«دِگاردنی‌ین» اون دچی‌یه(ئون) که آخرین نفر انجام هِدائه ره اتا کلیک جه وَرگِردنانده.",
+       "tooltip-summary": "خلاصه بنویسین",
        "siteusers": "$1، {{PLURAL:$2|کارور|کارورون}} {{SITENAME}}",
+       "simpleantispam-label": "!آنتی‌اسپم ِچک‌هاکردن.\nاین قسمت ره پـِر <strong>نکان!</strong>",
+       "pageinfo-toolboxlink": "صفحه‌ی ِاطلاعات",
        "previousdiff": "کوهنه‌تر دچی‌ین ←",
        "nextdiff": "ته‌رنه دأچیه‌ن ←",
        "thumbsize": "أنـگـوسـی گأتی:",
        "file-info-size": "$1 × $2 پـیـکـسه‌ل, فـایـل گـأتـی: $3, MIME مـونـد: $4",
+       "show-big-image": "اصلی پرونده",
+       "show-big-image-preview": "این پیش‌-پیش سِراق هدائن ِقایده: $1.",
+       "show-big-image-other": "دیگه {{PLURAL:$2|کیفیت|کیفیتون}}: $1.",
+       "show-big-image-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل",
        "file-info-png-frames": "$1 {{PLURAL:$1|قاب|قاب}}",
        "newimages": "گالری نو عکس‌ئون",
        "imagelisttext": "فهرست بن $1 {{PLURAL:$1|عکسی|عکسی}} که $2 مرتب بیی‌یه بموئه.",
        "bydate": "تاریخ رو جه",
        "sp-newimages-showfrom": "نشون‌هدائن عکسای نو $2، $1 جه به بعد",
        "video-dims": "$1, $2×$3",
+       "metadata": "متادیتا",
+       "metadata-help": "این پرونده اتسری اضافه اطلاعات دانه که احتمالاً دیجیتال دوربین یا دیگه تغییرکَرون اضافه هاکردنه. اگه پرونده اولیه حالت جه تغییر هاکرد بائه، ممکن هسته که توضیحات تکمیل نَی‌بائِن.",
+       "exif-orientation": "جهت",
+       "exif-xresolution": "افقی رزولویشن",
+       "exif-yresolution": "عمودی رزولویشن",
+       "exif-datetime": "پرونده‌ی ِتاریخ و زمون ره تغییر هدائن",
+       "exif-make": "دوربین ِسازنده‌ئون ِکمپانی",
+       "exif-model": "دوربین ِمدل",
+       "exif-software": "استفاده‌بیی نرم‌افزار",
+       "exif-exifversion": "Exif نسخه",
+       "exif-colorspace": "رنگی فضا",
+       "exif-datetimeoriginal": "دیتای ِتولید ِتاریخ و زمون",
+       "exif-datetimedigitized": "دیجیتالی بیّن ِزمون و تاریخ",
        "exif-gpsareainformation": "جی پی اس ناحیه نوم",
        "exif-gpsdatestamp": "جی پی اس روز",
        "exif-gpsdifferential": "جی پی اس په‌چه‌ک درس هأکه‌ردن",
        "autosumm-blank": "صفحه ره اسپه هاکرده",
        "autosumm-replace": "صفحه ره اینتا جه عوض هاکرد: '$1'",
        "autoredircomment": "به [[$1]] مسیر ره تغییر هدائه",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ]])",
        "version-specialpages": "شا صفحه‌ئون",
        "specialpages": "شا صفحه‌ئون",
        "specialpages-group-maintenance": "چله‌بندی صفحه‌ئون",
+       "tag-filter": "[[Special:Tags|برچسبون]] ِفیلتر:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسبون}}]]: $2)",
+       "logentry-delete-delete": "$1 صفحهٔ $3 ره {{GENDER:$2|حذف هاکرده}}",
        "logentry-move-move_redir-noredirect": "$1 ، $3 ره بدون اینکه مسیر تغییری درس بوه به $4 که مسیر تغییر بیه منتقل هاکرده",
        "logentry-newusers-newusers": "$1  بساتن اتا حساب کاروری",
-       "logentry-newusers-create": "$1  بساتن اتا حساب کاروری",
+       "logentry-newusers-create": "$1 کاروری حساب {{GENDER:$2|بساته بیّه}}",
        "rightsnone": "(هچّی)",
        "feedback-adding": "بی‌یشتن پیشنهادات و انتقادات...",
        "feedback-cancel": "ول هاکردن",
        "feedback-message": "پیغوم:",
        "feedback-subject": "موضوع:",
        "feedback-submit": "ارسال پیشنهادات و انتقادات",
+       "searchsuggest-search": "چرخه‌تو",
        "api-error-badaccess-groups": "شما اجازهٔ باربی‌یشتن پرونده‌ها ره این ویکی دله ندارنی.",
        "api-error-badtoken": "خطای داخلی: کد امنیتی اشتبائه (Bad token).",
        "api-error-copyuploaddisabled": "باربی‌یشتن با استفاده از نشونی اینترنتی این کارساز دله غیرفعاله.",
index 4092f94..0edacdb 100644 (file)
@@ -44,7 +44,7 @@
        "tog-diffonly": "Diff ē-pêng bián hián-sī ia̍h ê loē-iông",
        "tog-showhiddencats": "Hián-sī chhàng khí--lâi ê lūi-pia̍t",
        "tog-norollbackdiff": "ká tńg-khí liáu bián-koán cheng-chha goā-chē",
-       "tog-useeditwarning": "我若猶未保存修改的頁就跳開,愛共我講。",
+       "tog-useeditwarning": "Goá nā iáu-boē pó-chûn siu-kái--ê ia̍h tō thiàu khai, ài kā goá kóng.",
        "tog-prefershttps": "我登入的時陣愛用安全連線",
        "underline-always": "Tiāⁿ-tio̍h",
        "underline-never": "Tiāⁿ-tio̍h mà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",
        "emailnotauthenticated": "Lí ê e-mail chū-chí iáu-bōe khak-jīn ū-hāu, só·-í ē--kha ê e-mail kong-lêng bē-ēng-tit.",
        "noemailprefs": "Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.",
        "emailconfirmlink": "Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu",
+       "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í.",
        "changepassword": "Oāⁿ bi̍t-bé",
        "resetpass_header": "Kái káu-chō ê bi̍t-bé.",
        "resetpass-submit-cancel": "Chhú-siau",
        "resetpass-temp-password": "Lîm-sî ê bi̍t-bé:",
        "passwordreset": "Têng siat bi̍t-bé",
-       "passwordreset-legend": "Têng siat bi̍t-bé",
        "passwordreset-username": "Lí ê iōng-chiá miâ-chheng:",
        "passwordreset-email": "Tiān-chú-phoe tē-chí:",
        "passwordreset-emailelement": "Iōng-chiá: $1\nLîm-sî ê bi̍t-bé: $2",
        "preview": "Seng khoàⁿ-māi",
        "showpreview": "Seng khoàⁿ-māi",
        "showdiff": "Khòaⁿ kái-piàn ê pō·-hūn",
-       "anoneditwarning": "'''Kéng-kò:''' Lí bô teng-ji̍p. Lí ê IP chū-chí ē kì tī pún ia̍h ê pian-chi̍p le̍k-sú lāi-bīn.",
+       "anoneditwarning": "'''thê-chhíⁿ:''' Lí bô teng-ji̍p. Lí nā ū kái mi̍h-kiāⁿ, lí ê IP ē hô͘ lâng khoàⁿ tio̍h. Lí nā <strong>[$1 teng-ji̍p]</strong> iah-sī <strong>[$2 khui chi̍t-ê kháu-chō]</strong>; lí kái ê mi̍h-kiāⁿ ē kái kì lí ê kháu-chō-miâ. Mā ū kî-thaⁿ ê hó-chhù.",
        "summary-preview": "Khài-iàu ê preview:",
        "subject-preview": "Ū-lám tê-bo̍k/piau-tê:",
        "blockednoreason": "無寫理由",
        "yourdiff": "Chha-pia̍t",
        "readonlywarning": "'''CHÙ-Ì: Chu-liāu-khò· taⁿ só tiâu leh thang pān î-siu khang-khòe, só·-í lí hiān-chú-sî bô thang pó-chûn jīn-hô phian-chi̍p hāng-bo̍k. Lí ē-sái kā siong-koan pō·-hūn tah--ji̍p-khì 1-ê bûn-jī tóng-àn pó-chûn, āu-chhiú chiah koh kè-sio̍k.'''",
        "protectedpagewarning": "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái siu-kái.'''",
-       "templatesused": "Chit ia̍h iōng {{PLURAL:$1| ê pang-bô·| ê pang-bô·}} :",
+       "templatesused": "Chit ia̍h iōng {{PLURAL:$1| ê pang-bô·}} :",
        "templatesusedpreview": "Chit ê preview iōng chia ê pang-bô͘:",
        "templatesusedsection": "Chit ê section iōng chia ê pang-bô͘:",
        "template-protected": "(pó-hō͘)",
        "nohistory": "Chit ia̍h bô pian-chi̍p-sú.",
        "currentrev": "Hiān-chú-sî ê siu-tēng-pún",
        "revisionasof": "$1 ê siu-tēng-pún",
-       "previousrevision": "←Khah kū ê siu-tēng-pún",
-       "nextrevision": "Khah sin ê siu-tēng-pún→",
+       "previousrevision": "←Khah-kū ê siu-tēng-pún",
+       "nextrevision": "Khah-sin ê siu-tēng-pún→",
        "currentrevisionlink": "khoàⁿ siōng sin ê siu-tēng-pún",
        "cur": "taⁿ",
        "next": "下一个",
        "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",
        "searchprofile-advanced": "chìn-chi̍t-pō͘",
        "searchprofile-articles-tooltip": "Tī $1 chhoé",
        "searchprofile-images-tooltip": "Chhoé tóng-àn",
-       "searchprofile-everything-tooltip": "揣全部(包括討論頁)",
+       "searchprofile-everything-tooltip": "Chhiau choân-pō͘ (pau-koat thó-lūn-ia̍h)",
        "searchprofile-advanced-tooltip": "佇你家己設的名空間內底揣",
        "search-result-size": "$1 ({{PLURAL:$2|1 jī-goân|$2 jī-goân}})",
        "search-redirect": "(轉去 $1)",
        "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|goá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.",
        "action-edit": "Siu-kái chit ia̍h",
        "nchanges": "$1 {{PLURAL:$1|kái|kái}}",
        "recentchanges": "Chòe-kīn ê kái-piàn",
+       "recentchanges-summary": "Tī chiah wiki ia̍h tui-cha chòe-kīn ê kái-piàn.",
        "recentchanges-label-newpage": "Chit ê siu-kái ē sán-seng sin ia̍h",
        "recentchanges-label-minor": "Che sī sió siu-kái",
+       "recentchanges-label-bot": "Che sī ki-khì-lâng kái--ê",
        "rcnotefrom": "Ē-kha sī <b>$2</b> kàu taⁿ ê kái-piàn (ke̍k-ke hián-sī <b>$1</b> hāng).",
        "rclistfrom": "Hián-sī tùi $3 $2 kàu taⁿ ê sin kái-piàn",
        "rcshowhideminor": "$1 sió siu-kái",
+       "rcshowhidebots": "$1 機器儂",
        "rcshowhideliu": "$1 teng-ji̍p ê iōng-chiá",
        "rcshowhideanons": "$1 bû-bêng-sī",
        "rcshowhidemine": "$1 góa ê pian-chi̍p",
        "minoreditletter": "~",
        "newpageletter": "!",
        "boteditletter": "b",
+       "rc-change-size-new": "改了後;變做$1{{PLURAL:$1|位元}}",
        "recentchangeslinked": "Siong-koan ê kái-piàn",
        "recentchangeslinked-feed": "Siong-koan ê kái-piàn",
        "recentchangeslinked-toolbox": "Siong-koan ê kái-piàn",
+       "recentchangeslinked-summary": "這是有相接到指定頁(抑是指定分類的所有成員),而且最近家己頁的內容有改過的清單。\n遐的頁[[Special:Watchlist|佇你的監視清單]]會用<strong>粗體</strong> 標示。",
        "recentchangeslinked-page": "Ia̍h ê miâ:",
        "upload": "Kā tóng-àn chiūⁿ-bāng",
        "uploadbtn": "Kā tóng-àn chiūⁿ-bāng",
        "listfiles_count": "版本",
        "file-anchor-link": "Tóng-àn",
        "filehist": "Tóng-àn ê le̍k-sú",
+       "filehist-help": "揤 日期/時間;看彼時陣的檔案",
        "filehist-current": "hiān-chāi",
        "filehist-datetime": "Ji̍t-kî/ Sî-kan",
        "filehist-thumb": "細張圖",
+       "filehist-thumbtext": "$1版本的細圖",
        "filehist-user": "Iōng-chiá",
+       "filehist-dimensions": "寸尺",
+       "filehist-comment": "說明",
        "imagelinks": "tóng-àn sù-iōng ê chōng-hòng",
-       "linkstoimage": "ē-kha $1 ê ia̍h ū iōng tio̍h chit ê iáⁿ-siō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檔案說明]。",
        "mimesearch": "MIME chhiau-chhoē",
        "unwatchedpages": "Bô lâng kàm-sī ê ia̍h",
        "listredirects": "Lia̍t-chhut choán-ia̍h",
        "nbytes": "$1 {{PLURAL:$1|jī-goân|jī-goân}}",
        "ncategories": "$1 {{PLURAL:$1|ê lūi-pia̍t |ê lūi-pia̍t}}",
        "nlinks": "$1 ê liân-kiat",
-       "nmembers": "$1{{PLURAL:$1|ê sêng-oân|ê sêng-oân}}",
+       "nmembers": "$1{{PLURAL:$1|ê sêng-oân}}",
        "nrevisions": "$1 ê siu-tēng-pún",
        "lonelypages": "Ko·-ia̍h",
        "uncategorizedpages": "Bô lūi-pia̍t ê 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": "目地(標題抑是用者)",
        "undeleteviewlink": "Khoàⁿ",
        "namespace": "Miâ-khong-kan:",
        "invert": "Soán-hāng í-gōa",
+       "tooltip-invert": "勾起來的框;相關的名空間會先藏起來。",
+       "namespace_association": "相關的名空間",
+       "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 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": "Lí ē-sái kái chit ia̍h. Beh chhûn chìn-chiân, chhiáⁿ chhi̍h  sing-khoàⁿ-māi ê liú-á",
+       "tooltip-ca-edit": "Kái chit-ia̍h",
+       "tooltip-ca-addsection": "加新的一段",
        "tooltip-ca-viewsource": "Chit ia̍h pó-hō͘ tiâu leh.\nLí ē-sái khoàⁿ i ê goân-sú-bé.",
        "tooltip-ca-history": "Chit ia̍h ê chá-chêng pán-pún",
        "tooltip-ca-delete": "Thâi chit ia̍h",
        "tooltip-ca-watch": "共這頁加入去你的監視單",
        "tooltip-ca-unwatch": "Lí ê kàm-sī-toaⁿ soá tiàu chit ia̍h.",
        "tooltip-search": "Chhoé {{SITENAME}}",
+       "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",
        "tooltip-t-permalink": "Chi̍t ia̍h kái--koè pán-pún ê éng-kiú liân-kiat",
        "tooltip-ca-nstab-main": "khoàⁿ ia̍h ê loē-iông",
        "tooltip-ca-nstab-user": "Khoàⁿ iōng-chiá ê Ia̍h",
+       "tooltip-ca-nstab-special": "這是一个特殊頁,你袂使改這頁。",
        "tooltip-ca-nstab-image": "Khoàⁿ tóng-àn ia̍h",
        "tooltip-ca-nstab-category": "Khoàⁿ lūi-pia̍t ia̍h",
        "tooltip-minoredit": "記這是一个小改",
        "siteuser": "{{SITENAME}} iōng-chiá $1",
        "othercontribs": "Kin-kù $1 ê kòng-hiàn.",
        "siteusers": "{{SITENAME}} iōng-chiá $1",
+       "pageinfo-toolboxlink": "Ia̍h ê chu-sìn",
        "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": "← Khì chêng 1 ê diff",
-       "nextdiff": "Khì āu 1 ê diff →",
+       "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-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 像素",
        "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",
        "bydate": "chiàu ji̍t-kî",
+       "metadata": "元資料",
        "metadata-expand": "Hián-sī iù-chiat",
        "metadata-collapse": "Am iù-chiat",
+       "metadata-fields": "佇顯示圖片的頁,若掀開元資料,下跤的EXIF資料會儂看著。其他的元資料是先看無。\n* 廠商\n* 機型\n* 翕像的時陣\n* 曝光\n* 光圈\n* ISO 速率\n* 焦距\n* 作者\n* 版權\n* 說明\n* 緯度(GPS)\n* 經度(GPS)\n* 海拔(GPS)",
        "namespacesall": "choân-pō·",
        "monthsall": "choân-pō͘",
        "confirmemail": "Khak-jīn e-mail chū-chí",
        "table_pager_limit_submit": "Lâi-khì",
        "autosumm-blank": "Kā ia̍h ê loē-iông the̍h tiāu",
        "autoredircomment": "Choán khì [[$1]]",
-       "autosumm-new": "Sin ia̍h: $1",
+       "autosumm-new": "$1 ê ia̍h í-keng kiàn-li̍p",
        "watchlistedit-normal-submit": "Mài kàm-sī",
-       "watchlistedit-normal-done": "Í-keng ū $1 ia̍h ùi lí ê kám-sī-toaⁿ soá cháu:",
+       "watchlistedit-normal-done": "Í-keng uì lí ê kám-sī-toaⁿ soá {{PLURAL:$1|ia̍h}} cháu:",
        "watchlisttools-edit": "Khoàⁿ koh kái kàm-sī-toaⁿ",
        "watchlisttools-raw": "Kái chhiⁿ ê kàm-sī-toaⁿ",
        "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|Piau-chhiam]] chhoē mi̍h:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|个標籤}}]]:$2)",
+       "logentry-newusers-create": "已經{{GENDER:$2|開好}}用者口座 $1",
+       "searchsuggest-search": "Chhiau",
        "expandtemplates": "Khok-chhiong pang-bô͘",
        "expand_templates_input": "Su-ji̍p bûn-jī:",
        "expand_templates_output": "Kiat-kó:",
index a6fb249..295f11f 100644 (file)
        "passwordreset": "Riabbìa 'a password",
        "passwordreset-text-one": "Ghienche stu modulo pe' ricevere na mmasciata e-mail c' 'a password temporanea.",
        "passwordreset-text-many": "{{PLURAL:$1|Ghienche uno d' 'e campe pe' ricevere na password temporanea cu na mmasciata e-mail.}}",
-       "passwordreset-legend": "Riabbìa 'a password",
        "passwordreset-disabled": "'A funzione 'e riabbìo d' 'e password è stata stutata dint'a sta wiki.",
        "passwordreset-emaildisabled": "'E funzione e-mail songo state stutate dint'a sta wiki.",
        "passwordreset-username": "Nomme utente:",
        "resettokens": "Riabbìa 'e token",
        "resettokens-text": "Ccà se ponno riabbià 'e chiave ca permetessero l'acciesso a determinate date private associate a 'o cunto vuosto.\n\nL'aviste 'e ffà quanno l'avete spartuto pe' sbaglio cu cocche perzona o pure quanno 'o cunto d' 'o vuosto è stato compromesso.",
        "resettokens-no-tokens": "Nun ce stanno token 'a riabbià.",
-       "resettokens-legend": "Riabbìa 'e token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (valore 'e mmò: $2)",
        "resettokens-watchlist-token": "Token p' 'o feed web (Atom/RSS) d' 'e [[Special:Watchlist|cagnamiente a 'e paggene dint'a l'osservate spiciale tuoje]]",
        "yourdiff": "Differenze",
        "copyrightwarning": "Pe' piacere tenite a mmente ca tutte 'e contribbute a {{SITENAME}} songo cunziderate pubbrecate dint'e térmene d'uso d' 'a licienza $2 (vedite $1 pe n'avé cchiù dettaglie).\nSi nun vulite ca 'e testi vuoste fossero cagnate e distribuite 'a uno qualunque senza lémmeto, nun 'e mannate ccà.<br />\nMannanno stu testo dichiarate pùre, sott'a responsabilità vuosta, ch'è stato scritto 'a vuje perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera.\n'''Nun mannate materiale prutetto 'a copyright senz'avé autorizzaziona!'''",
        "copyrightwarning2": "Pe' piacere tenite a mmente ca tutte 'e contribbute a {{SITENAME}} se ponno cagnà, alterà, o distribbuì pe l'ati cuntribbuttòre.\n\nSi nun vulite ca 'e teste vuoste fossero cagnàte spenzieratamente, nun 'e mannate ccà.<br />\nMannanno stu testo dichiarate pùre, sott'a responsabilità vosta, ch'è stato scritto 'a vuje perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera (vedete $1 pe' n'avé dettaglie).\n'''Nun mannate materiale prutetto 'a copyright senza n'avé autorizzaziona!'''",
+       "editpage-cannot-use-custom-model": "'O modello 'e cuntenute 'e sta paggena nun se pò cagnà.",
        "longpageerror": "'''Errore: 'o testo mannato è luongo {{PLURAL:$1|1|$1}} kilobyte, ch'è cchiù grosso d' 'a diminziona massima cunzentita ({{PLURAL:$2|1|$2}} kilobyte).'''\n'O testo nun se pò sarvà.",
        "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:",
        "badsig": "Errore 'e firma nun standard, cuntrullate 'e tag HTML.",
        "badsiglength": "'A firma c'avite scigliuto è troppo luonga, chesta nun avesse 'a superà $1 {{PLURAL:$1|carattere|carattere}}.",
        "yourgender": "Comme nce referimmo a vvuje?",
-       "gender-unknown": "Preferisco 'e nun 'o ddicere",
+       "gender-unknown": "Quanno se stà a parlà 'e vuje, 'o software ausarrà sempe parole 'e genero neutrale pe ffà 'o nomme vuosto",
        "gender-male": "È riggistrato ncopp' 'a {{SITENAME}}",
        "gender-female": "È riggistrata ncopp' 'a {{SITENAME}}",
        "prefs-help-gender": "Mpizzà sta preferenza è ozzionale.\n'O software aúsa stu valore pe' se vutà a vuje e v'anummenà a l'ati utente ausanno 'o gennere grammatecale buono.\nCheste nfurmaziune sarranno pubbreche.",
        "uploaddisabledtext": "'E carreche 'e file so' state stutate.",
        "php-uploaddisabledtext": "'E càrreche 'e file pe' bbia d' 'o PHP so' state stutate. Cuntrullate 'a configurazione d' 'o file_uploads.",
        "uploadscripted": "Stu file cuntene codece HTML o script, ca se putesse nterpretà erroneamente 'a nu navigatóre web.",
-       "upload-scripted-pi-callback": "Nun se pò carrecà nu file ca tene struziune 'e prucesse xml-stylesheet",
+       "upload-scripted-pi-callback": "Nun se pò carrecà nu file ca tene struziune 'e prucesse XML-stylesheet",
        "uploaded-script-svg": "Truvato n'elemento pe script \"$1\" int' 'o file SVG carrecato.",
        "uploaded-hostile-svg": "Truvato nu CSS insecuro int'a l'elemente 'e stile d' 'o file SVG carrecate.",
        "uploaded-event-handler-on-svg": "Mpustà 'e parametre 'e gistore-evente <code>$1=\"$2\"</code> nun è premmesso dint' 'e file SVG.",
-       "uploaded-href-attribute-svg": "Ll'attribbute Href <code>&lt;$1 $2=\"$3\"&gt;</code> cu target non-local (e.g. http://, javascript:, ecc) nun so' premmesse int' 'e file SVG.",
+       "uploaded-href-attribute-svg": "Ll'attribbute href <code>&lt;$1 $2=\"$3\"&gt;</code> cu target non-local (e.g. http://, javascript:, ecc) nun so' premmesse int' 'e file SVG.",
+       "uploaded-href-unsafe-target-svg": "S'è truvato nu href a nu target ca nun era sicuro <code>&lt;$1 $2=\"$3\"&gt;</code> dint' 'o file SVG carrecato.",
        "uploaded-animate-svg": "Truvato 'o tag \"animate\" ca putesse stà a cagnà href, ausanno l'attribbuto \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> int' 'o file carrecato SVG.",
        "uploaded-setting-event-handler-svg": "Mpustà n'attributo event-handler è bluccato, truvato <code>&lt;$1 $2=\"$3\"&gt;</code> int' 'o fie carrecato SVG.",
        "uploaded-setting-href-svg": "Ausà 'o tag \"set\" pe' putè azzeccà attribbute \"href\" a l'elemento parente è bluccato.",
+       "uploaded-wrong-setting-svg": "D'ausà 'o tag \"set\" pe' putè azzeccà nu target remoto/date/script a n'attribbuto mò è bluccato. Truvato 'o code>&lt;set to=\"$1\"&gt;</code> dint' 'o file SVG carrecato.",
+       "uploaded-setting-handler-svg": "'o SVG ca mpustasse l'attribbuto \"handler\" cu nu remoto/date/script è bluccato. Truvato <code>$1=\"$2\"</code> dint' 'o file SVG carrecato.",
        "uploaded-remote-url-svg": "SVG ca mpustasse n'attribbuto 'e stile cu n'URL remota bluccata. Truvate <code>$1=\"$2\"</code> int' 'o file carrecato SVG.",
        "uploaded-image-filter-svg": "Truvato filtro immaggene cu n'URL: <code>&lt;$1 $2=\"$3\"&gt;</code> int' 'o file SVG carrecato.",
        "uploadscriptednamespace": "Stu file SVG cuntene nu namespace '$1' nun permesso.",
        "nmembers": "$1 {{PLURAL:$1|elemento|elemente}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membre}}",
        "nrevisions": "$1 {{PLURAL:$1|verzione|verziune}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visite}}",
        "nimagelinks": "Ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
        "ntransclusions": "ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
        "specialpage-empty": "Nun ce stanno risultate pe' stu report.",
        "rollback-success": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2.",
        "sessionfailure-title": "Sessione fallita",
        "sessionfailure": "Pare ca stanno probbleme cu 'a sessiona toja;\nst'azione è stata fermata pe' precauzione annanz' 'e cavall' 'e troia;\nPe' piacere turnate arreto, carrecate n'ata vota 'a paggena pe pruvate n'ata vota.",
+       "changecontentmodel": "Cagna 'o mudello 'e cuntenute 'e na paggena",
+       "changecontentmodel-legend": "Cagna 'o mudello 'e cuntenute",
+       "changecontentmodel-title-label": "Titulo d\"a paggena",
+       "changecontentmodel-model-label": "Mudello 'e cuntenute nuovo",
+       "changecontentmodel-reason-label": "Mutivo:",
+       "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-revertlink": "arrepiglia",
+       "logentry-contentmodel-change-revert": "arrepiglia",
        "protectlogpage": "Riggistro 'e prutezzione",
        "protectlogtext": "Ccà abbascio sta na lista 'e cagnamiente 'e pruteziune d' 'e paggene.\nVedite 'a [[Special:ProtectedPages|liste d' 'e paggene prutette]] pe n'avé na lista 'e l'operaziune 'e mo ncopp' 'a prutezzione d' 'e paggene.",
        "protectedarticle": "ha prutetto \"[[$1]]\"",
        "tooltip-pt-logout": "Jésce (logout)",
        "tooltip-pt-createaccount": "Pigliateve curaggio e criate n'utente e trasìte; ancora ca chisto nun s'avesse 'a ffà pe' fforza",
        "tooltip-ca-talk": "Vede e discussione rilative a chista paggena",
-       "tooltip-ca-edit": "Puo modifica chista paggena. Ppe favore usa 'o pulsante 'e anteprimma primma 'e salva",
+       "tooltip-ca-edit": "Cagna sta paggena",
        "tooltip-ca-addsection": "Cummincia 'na nova sezzione",
        "tooltip-ca-viewsource": "Chista paggena è prutetta, ma puo vere 'o codice sorgente",
        "tooltip-ca-history": "Vversione precedente 'e chista paggena",
        "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-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",
        "pageinfo-subpages-name": "Nummero 'e sottopaggene 'e sta paggena",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|nun redirect}})",
        "version-libraries": "Bibblioteche installate",
        "version-libraries-library": "Bibblioteca",
        "version-libraries-version": "Verziona",
+       "version-libraries-license": "Licienza",
+       "version-libraries-description": "Descrizzione",
+       "version-libraries-authors": "Auture",
        "redirect": "Rediretto 'a nu file, n'utente, na paggena o n'ID 'e na verziona",
        "redirect-legend": "Rediretto ca spuntasse a nu file o na paggena",
        "redirect-summary": "Sta pàggena speciale redireziona a nu file (dato 'o nomme d' 'o file), na pàggene (dato n'ID 'e verziona), o 'na pàggene utente (dato n'ID nummereca 'e l'utende). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "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' scarrecà 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! '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-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-group-khmer": "Khmer",
        "special-characters-title-endash": "trattino enne",
        "special-characters-title-emdash": "trattino emme",
-       "special-characters-title-minus": "segno meno"
+       "special-characters-title-minus": "segno meno",
+       "mw-widgets-titleinput-description-new-page": "'a pàggene nun esiste ancore",
+       "mw-widgets-titleinput-description-redirect": "redirezionate ncopp' a $1"
 }
index 4ed5b63..9543827 100644 (file)
@@ -61,7 +61,7 @@
        "tog-watchdefault": "Legg til sider og filer jeg endrer på i min overvåkingsliste",
        "tog-watchmoves": "Legg til sider og filer jeg flytter til min overvåkingsliste",
        "tog-watchdeletion": "Legg til sider og filer jeg sletter i min overvåkingsliste",
-       "tog-watchrollback": "Legg til sider jeg har utført tilbakestilling på i min overvåkningsliste",
+       "tog-watchrollback": "Legg til sider hvor jeg har utført tilbakestilling i min overvåkningsliste",
        "tog-minordefault": "Merk i utgangspunktet alle redigeringer som mindre",
        "tog-previewontop": "Vis forhåndsvisningen over redigeringsboksen",
        "tog-previewonfirst": "Vis forhåndsvisning når du begynner å redigere",
        "passwordreset": "Tilbakestilling av passord",
        "passwordreset-text-one": "Fyll ut skjemaet for å tilbakestille passordet",
        "passwordreset-text-many": "{{PLURAL:$1|Fyll inn ett av datafeltene for å tilbakestille passordet ditt via epost.}}",
-       "passwordreset-legend": "Nullstill passord",
        "passwordreset-disabled": "Nullstilling av passord er deaktivert på denne wikien.",
        "passwordreset-emaildisabled": "E-posttjenester er slått av på denne wikien.",
        "passwordreset-username": "Brukernavn:",
        "resettokens": "Nullstill merker",
        "resettokens-text": "Du kan nullstille nøklene som gir adgang til visse private data knyttet til din konto.\n\nOg du burde gjøre det hvis du har avslørt nøklene for noen.",
        "resettokens-no-tokens": "Det finnes ingen merker å nullstille.",
-       "resettokens-legend": "Nullstill merker",
        "resettokens-tokens": "Merker:",
        "resettokens-token-label": "$1 (aktuell verdi: $2)",
        "resettokens-watchlist-token": "Webmatenøkkel (Atom/RSS) for [[Special:Watchlist|endringer av sider på din overvåkningsliste]]",
        "creating": "Oppretter $1",
        "editingsection": "Redigerer $1 (avsnitt)",
        "editingcomment": "Redigerer $1 (ny seksjon)",
-       "editconflict": "Redigeringskonflikt: $1",
+       "editconflict": "Endringene dine kunne ikke lagres på grunn av en redigeringskonflikt. Vil {{GENDER:|du}} løse konflikten manuelt?",
        "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",
        "randomincategory-nopages": "Det finnes ingen sider i [[:Category:$1|$1]]-kategorien.",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Tilfeldig side i kategori",
+       "randomincategory-submit": "{{int:Go}}",
        "randomredirect": "Tilfeldig omdirigering",
        "randomredirect-nopages": "Det er ingen omdirigeringer i navnerommet $1.",
        "statistics": "Statistikk",
        "nmembers": "$1 {{PLURAL:$1|medlem|medlemmer}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|medlem|medlemmer}}",
        "nrevisions": "$1 {{PLURAL:$1|revisjon|revisjoner}}",
-       "nviews": "$1 {{PLURAL:$1|visning|visninger}}",
        "nimagelinks": "Brukt på $1 {{PLURAL:$1|side|sider}}",
        "ntransclusions": "brukt på $1 {{PLURAL:$1|side|sider}}",
        "specialpage-empty": "Denne siden er tom.",
        "deletedwhileediting": "'''Advarsel:''' Denne siden har blitt slettet etter at du begynte å redigere den!",
        "confirmrecreate": "«[[User:$1|$1]]» ([[User talk:$1|diskusjon]]) slettet siden etter at du begynte å redigere den, med begrunnelsen «$2». Vennligst bekreft at du vil gjenopprette siden.",
        "confirmrecreate-noreason": "Brukeren [[User:$1|$1]] ([[User talk:$1|diskusjon]]) slettet denne siden etter at du begynte å redigere. Bekreft at du virkelig ønsker å gjenopprette denne siden.",
-       "recreate": "Gjenopprett",
+       "recreate": "Siden har blitt slettet etter at du begynte å redigere. Trykk \"$1\" for å gjenopprette den.",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Vil du slette tjenerens mellomlagrede versjon (''cache'') av denne siden?",
        "confirm-purge-bottom": "Rensing av en side sletter mellomlageret og tvinger frem den nyeste versjonen.",
index 31b5867..8d2ef07 100644 (file)
                        "Steinsplitter",
                        "Macofe",
                        "बिप्लब आनन्द",
-                       "Nirjal stha"
+                       "Nirjal stha",
+                       "राम प्रसाद जोशी"
                ]
        },
        "tog-underline": "रेखाङ्कित लिङ्क:",
-       "tog-hideminor": "सामानà¥\8dय à¤¸à¤®à¥\8dपादनहरà¥\81लाई नयाँ परिवर्तनहरूबाट लुकाउने",
-       "tog-hidepatrolled": "à¤\97सà¥\8dतà¥\80 à¤\97रिà¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81लाई नयाँ परिवर्तनहरूबाट लुकाउने",
+       "tog-hideminor": "सामानà¥\8dय à¤¸à¤®à¥\8dपादनहरà¥\82लाई नयाँ परिवर्तनहरूबाट लुकाउने",
+       "tog-hidepatrolled": "à¤\97सà¥\8dतà¥\80 à¤\97रिà¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82लाई नयाँ परिवर्तनहरूबाट लुकाउने",
        "tog-newpageshidepatrolled": "गस्ती गरिएका पृष्ठहरूलाई नयाँ पृष्ठ सूचीबाट लुकाउने",
        "tog-extendwatchlist": "निगरानी सूचीलाई सबै परिवर्तनहरू देखाउने गरी बढाउने, हालैको परिवर्तनहरू बाहेक",
        "tog-usenewrc": "पृष्ठका भर्खरका परिवर्तन र अवलोकन सूचीको आधारमा सामूहिक परिवर्तनहरू",
@@ -39,7 +40,7 @@
        "tog-minordefault": "सबै सम्पादनहरूलाई पूर्वनिर्धारित रुपमा सामान्य चिनो लगाउने",
        "tog-previewontop": "सम्पादन सन्दुक अघि पूर्वरुप देखाउने",
        "tog-previewonfirst": "पहिलो सम्पादनमा पूर्वरुप देखाउने",
-       "tog-enotifwatchlistpages": "मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठ à¤\85थवा à¤«à¤¾à¤\87लहरà¥\81 परिवर्तन भएपछी मलाई ई-मेल गरियोस्",
+       "tog-enotifwatchlistpages": "मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठ à¤\85थवा à¤«à¤¾à¤\87लहरà¥\82 परिवर्तन भएपछी मलाई ई-मेल गरियोस्",
        "tog-enotifusertalkpages": "मेरो प्रयोगकर्ता वार्ता पृष्ठ परिवर्तन भएपछी मलाई ई-मेल गर्ने",
        "tog-enotifminoredits": "पृष्ठहरू र फाइलहरूमा सामान्य सम्पादन भएमा पनि मलाई ई-मेल गर्ने",
        "tog-enotifrevealaddr": "जानकारी इ-मेलहरूमा मेरो इ-मेल खुलाउने",
        "december-date": "डिसेम्बर $1",
        "pagecategories": "{{PLURAL:$1|श्रेणी|श्रेणीहरू}}",
        "category_header": "\"$1\" श्रेणीमा भएका लेखहरू",
-       "subcategories": "à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81",
+       "subcategories": "à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82",
        "category-media-header": "\"$1\" श्रेणीमा रहेका मिडियाहरू",
        "category-empty": "''यो श्रेणीमा हाल कुनै पृष्ठ या मिडियाहरु रहेका छैनन् ।''",
        "hidden-categories": "{{PLURAL:$1|लुकाइएको श्रेणी|लुकाइएका श्रेणीहरू}}",
        "hidden-category-category": "लुकाइएका श्रेणीहरू",
        "category-subcat-count": "{{PLURAL:$2|यो श्रेणीमा निम्न उपश्रेणीहरू मात्र छन्।|यो श्रेणीको निम्न {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणीहरू}},  $2 कुल मध्ये श्रेणीहरू छन् ।}}",
-       "category-subcat-count-limited": "यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81}} à¤\9b।",
+       "category-subcat-count-limited": "यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82}} à¤\9bनà¥\8d ।",
        "category-article-count": "{{PLURAL:$2|यो श्रेणीमा एक मात्र पृष्ठरहेको छ।|कुल $2 मध्ये यो श्रेणीमा {{PLURAL:$1|पृष्ठ|$1 पृष्ठहरू}} रहेका छन् । }}",
        "category-article-count-limited": "निम्न {{PLURAL:$1|पृष्ठ|$1 पृष्ठहरू}} यस श्रेणीमा रहेको ।",
-       "category-file-count": "{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन à¤«à¤¾à¤\87ल à¤®à¤¾à¤¤à¥\8dर à¤\9b à¥¤|निमà¥\8dन à¤¶à¥\8dरà¥\87णà¥\80मा {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\81}} , कुल  $2 मध्ये रहेको ।}}",
-       "category-file-count-limited": "निमà¥\8dन  {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\81}} यस श्रेणीमा रहेको ।",
+       "category-file-count": "{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन à¤«à¤¾à¤\87ल à¤®à¤¾à¤¤à¥\8dर à¤\9b à¥¤|निमà¥\8dन à¤¶à¥\8dरà¥\87णà¥\80मा {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} , कुल  $2 मध्ये रहेको ।}}",
+       "category-file-count-limited": "निमà¥\8dन  {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} यस श्रेणीमा रहेको ।",
        "listingcontinuesabbrev": "निरन्तरता...",
        "index-category": "क्रमाङ्कित पृष्ठहरू",
        "noindex-category": "क्रमाङ्कन नगरिएका पृष्ठहरू",
        "delete": "मेट्ने",
        "deletethispage": "यो पृष्ठ हटाउनुहोस्",
        "undeletethispage": "मेटेको पृष्ठ फिर्तागर्ने",
-       "undelete_short": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा  à¤®à¥\87à¤\9fिà¤\8fà¤\95à¥\8b à¤¸à¤®à¥\8dपादन|$1 à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81}} फर्काउने",
+       "undelete_short": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा  à¤®à¥\87à¤\9fिà¤\8fà¤\95à¥\8b à¤¸à¤®à¥\8dपादन|$1 à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82}} फर्काउने",
        "viewdeleted_short": "{{PLURAL:$1|मेटिएको सम्पादन |$1 मेटिएका सम्पादनहरू}}",
        "protect": "सुरक्षित राख्नुहोस्",
        "protect_change": "परिवर्तन",
        "jumpto": "यसमा जानुहोस्:",
        "jumptonavigation": "अन्वेषण",
        "jumptosearch": "खोज्नुहोस्",
-       "view-pool-error": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d , à¤¯à¤¸ à¤¸à¤®à¤¯à¤®à¤¾ à¤¸à¤°à¥\8dभरहरà¥\81मा à¤\95ारà¥\8dयभार à¤\89à¤\9aà¥\8dà¤\9a à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b।\nà¤\85ति à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो पृष्ठ पुन: हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।\n\n$1",
-       "generic-pool-error": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d , à¤¯à¤¸ à¤¸à¤®à¤¯à¤®à¤¾ à¤¸à¤°à¥\8dभरहरà¥\81मा à¤\95ारà¥\8dयभार à¤\89à¤\9aà¥\8dà¤\9a à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b।\nà¤\85ति à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो सामग्री  हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।",
+       "view-pool-error": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d , à¤¯à¤¸ à¤¸à¤®à¤¯à¤®à¤¾ à¤¸à¤°à¥\8dभरहरà¥\82मा à¤\95ारà¥\8dयभार à¤\89à¤\9aà¥\8dà¤\9a à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b à¥¤\nà¤\85ति à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो पृष्ठ पुन: हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।\n\n$1",
+       "generic-pool-error": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d , à¤¯à¤¸ à¤¸à¤®à¤¯à¤®à¤¾ à¤¸à¤°à¥\8dभरहरà¥\81मा à¤\95ारà¥\8dयभार à¤\89à¤\9aà¥\8dà¤\9a à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b।\nà¤\85ति à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो सामग्री  हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।",
        "pool-timeout": "समय सकियो बन्द गर्ने प्रतीक्षामा",
        "pool-queuefull": "प्रतीक्षा पङ्क्ति भरियो",
        "pool-errorunknown": "अज्ञात त्रुटि",
        "copyrightpage": "{{ns:project}}:प्रतिलिपी अधिकारहरू",
        "currentevents": "हालैका घटनाहरू",
        "currentevents-url": "Project:हालैका घटनाहरू",
-       "disclaimers": "à¤\85सà¥\8dविà¤\95ारà¥\8bà¤\95à¥\8dतिहरà¥\81",
+       "disclaimers": "à¤\85सà¥\8dविà¤\95ारà¥\8bà¤\95à¥\8dतिहरà¥\82",
        "disclaimerpage": "Project:सामान्य अस्वीकारोक्ति",
        "edithelp": "सम्पादन सहायता",
        "helppage-top-gethelp": "सहायता",
        "privacypage": "Project:गोपनीयता नीति",
        "badaccess": "अनुमतिमा त्रुटि",
        "badaccess-group0": "तपाईले अनुरोध गर्नुभएको कार्य गर्न तपाईलाई अनुमति दिइएको छैन।",
-       "badaccess-groups": "तपाà¤\88लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय  {{PLURAL:$2|समà¥\82ह |à¤\95à¥\81नà¥\88 à¤\8fà¤\95 à¤¸à¤®à¥\82ह}}: $1 à¤®à¤¾ à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81ले मात्र गर्नसक्छन ।",
+       "badaccess-groups": "तपाà¤\88à¤\82लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय  {{PLURAL:$2|समà¥\82ह |à¤\95à¥\81नà¥\88 à¤\8fà¤\95 à¤¸à¤®à¥\82ह}}: $1 à¤®à¤¾ à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82ले मात्र गर्नसक्छन ।",
        "versionrequired": "MediaWiki संस्करण $1 चाहिने",
        "versionrequiredtext": "यो पृष्ठ प्रयोग गर्नको लागि MediaWiki $1 संस्करण चाहिन्छ ।\nहेर्नुहोस्  [[Special:Version|version page]]",
        "ok": "हुन्छ",
        "backlinksubtitle": "← $1",
        "retrievedfrom": " \"$1\" बाट निकालिएको",
        "youhavenewmessages": "तपाईंको लागि ($2) मा  $1 छ ।",
-       "youhavenewmessagesfromusers": "तपाà¤\88à¤\82à¤\95à¥\8b à¤²à¤¾à¤\97ि  {{PLURAL:$3|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|$3 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81}} ($2) बाट $1",
+       "youhavenewmessagesfromusers": "तपाà¤\88à¤\82à¤\95à¥\8b à¤²à¤¾à¤\97ि  {{PLURAL:$3|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|$3 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82}} ($2) बाट $1",
        "youhavenewmessagesmanyusers": "तपाईँलाई धेरै प्रयोगकर्ताहरू($2) बाट $1 छ ।",
        "newmessageslinkplural": "{{PLURAL:$1|एउटा नयाँ सन्देश|999=नयाँ सन्देशहरू}}",
        "newmessagesdifflinkplural": "अन्तिम {{PLURAL:$1|परिवर्तन|999=परिवर्तनहरू}}",
        "hidetoc": "लुकाउनुहोस्",
        "collapsible-collapse": "खुम्च्याउने",
        "collapsible-expand": "फैलाउ",
-       "confirmable-confirm": "तपाà¤\88à¤\82 {{GENDER:$1|लिà¤\99à¥\8dà¤\97}} à¤¹à¥\8b?",
+       "confirmable-confirm": "à¤\95à¥\87 {{GENDER:$1|तपाà¤\88à¤\82}} à¤¸à¥\81निशà¥\8dà¤\9aित à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b ?",
        "confirmable-yes": "हो",
        "confirmable-no": "होइन",
        "thisisdeleted": "$1 हेर्ने या पूर्वरुपमा फर्काउने हो?",
        "nosuchaction": "यस्तो कार्य हैन",
        "nosuchactiontext": "URL ले खुलाएको कार्य मान्य छैन ।\nतपाईले URL गलत टाइपगर्नु भएको , वा गलत लिंक पछ्याउनु भएको हुनसक्छ ।\nयस{{SITENAME}}ले सफ्टवेयरमा भएको गल्ति देखाएको पनि हुनसक्छ ।",
        "nosuchspecialpage": "त्यस्तो विशेष पृष्ठ छैन",
-       "nospecialpagetext": "<strong>तपाà¤\88à¤\81लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठ à¤\85मानà¥\8dय à¤\9b à¥¤</strong>\n\nमानà¥\8dय à¤ªà¥\83षà¥\8dठहरà¥\81को सूची यहाँ [[Special:SpecialPages|{{int:specialpages}}]] उपलब्ध छ ।",
+       "nospecialpagetext": "<strong>तपाà¤\88à¤\81लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठ à¤\85मानà¥\8dय à¤\9b à¥¤</strong>\n\nमानà¥\8dय à¤ªà¥\83षà¥\8dठहरà¥\82को सूची यहाँ [[Special:SpecialPages|{{int:specialpages}}]] उपलब्ध छ ।",
        "error": "त्रुटि",
        "databaseerror": "डेटावेस त्रुटि",
        "databaseerror-text": "डेटाबेस क्वेरीमा खराबी देखा पर्‌यो ।\nयसले सफ्टवेयरमा त्रुटी रहेको इङ्गित गर्न सक्छ ।",
        "laggedslavemode": "<strong>चेतावनी:</strong> पृष्ठमा हालका अद्यतनहरू नहुनसक्छन् ।",
        "readonly": "डेटाबेस बन्द गरिएको छ",
        "enterlockreason": "ताल्चा मार्नुको कारण दिनुहोस्, साथै ताल्चा हटाउने समयको अवधि अनुमान लगाउनुहोस्।",
-       "readonlytext": "समà¥\8dभवतà¤\83 à¤¨à¤¿à¤¯à¤®à¤¿à¤¤ à¤¡à¥\87à¤\9fाबà¥\87स à¤°à¤\96-रà¤\96ाà¤\89à¤\95à¥\8b à¤\95ारण à¤\85हिलà¥\87लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¡à¥\87à¤\9fाबà¥\87स à¤ªà¥\8dरविषà¥\8dà¤\9fà¥\80 à¤° à¤\85नà¥\8dय à¤¸à¤\82शà¥\8bधनहरà¥\81  बन्द राखिएकोछ,, जसलाई पछिबाट सामान्य गरिनेछ। \nप्रबन्धक जसले यो बन्द गरेकाछन्, यो स्पष्टीकरण दिएकाछन्: $1",
+       "readonlytext": "समà¥\8dभवतà¤\83 à¤¨à¤¿à¤¯à¤®à¤¿à¤¤ à¤¡à¥\87à¤\9fाबà¥\87स à¤°à¤\96-रà¤\96ाà¤\89à¤\95à¥\8b à¤\95ारण à¤\85हिलà¥\87लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¡à¥\87à¤\9fाबà¥\87स à¤ªà¥\8dरविषà¥\8dà¤\9fà¥\80 à¤° à¤\85नà¥\8dय à¤¸à¤\82शà¥\8bधनहरà¥\82  बन्द राखिएकोछ,, जसलाई पछिबाट सामान्य गरिनेछ। \nप्रबन्धक जसले यो बन्द गरेकाछन्, यो स्पष्टीकरण दिएकाछन्: $1",
        "missing-article": "नाम \"$1\" $2 भएको भेटिनु पर्ने पृष्ठको पाठ डेटाबेसले  भेटाइएन, \n\nयस्तो प्राय: मिति नाघिसकेको भिन्न वा इतिहास वा कुनै मेटिसकेको पानाको लिंक पहिल्याउनाले हुन्छ ।\n\nयदि यस्तो भएको होइन भने सफ्टवेयरको त्रुटि पनि हुनसक्छ ।\nकृपया यसको url खुलाइ [[Special:ListUsers/sysop|प्रबन्धक]]लाई उजुरी गर्नुहोस्",
        "missingarticle-rev": "(संशोधन #: $1)",
        "missingarticle-diff": "(परि: $1, $2)",
        "actionthrottledtext": "स्पामबाट बच्ने तरिकाको रुपमा , तपाईँलाई यो कार्य थोरै समयमा धेरै पटक गर्नबाट सिमित गरिएको छ, र तपाईले आफ्नो सिमा पार गरिसक्नु भयो ।\nकृपया केही मिनेटहरु पछि पुन: प्रयास गर्नुहोस्  ।",
        "protectedpagetext": "यो पृष्ठ सम्पादन हुनबाट बचाउन सम्पादनमा तथा अन्यकार्यमा रोक लगाइएको छ।",
        "viewsourcetext": "तपाईँले यस पृष्ठको स्रोत हेर्न र प्रतिलिपी गर्न सक्नुहुन्छ ।",
-       "viewyourtext": "यस à¤ªà¥\83षà¥\8dठमा à¤°à¤¹à¥\87à¤\95ा '''तपाà¤\88à¤\81à¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81''' हेर्न या प्रतिलिपी गर्न सक्नुहुन्छ :",
+       "viewyourtext": "यस à¤ªà¥\83षà¥\8dठमा à¤°à¤¹à¥\87à¤\95ा '''तपाà¤\88à¤\81à¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82''' हेर्न या प्रतिलिपी गर्न सक्नुहुन्छ :",
        "protectedinterface": "यो पृष्ठले सफ्टवेयरको लागि अन्तरमोहडा पाठ प्रदान गर्दछ , र यसलाई दुरुपयोग हुनबाट बचाउन सुरक्षा प्रादन गरिएको छ।\nसम्पूर्ण विकिहरूका लागि अनुवादमा परिवर्तन गर्नको लागि [//translatewiki.net/ translatewiki.net], प्रयोग गर्नुहोस् ,  मिडियाविकि स्थानियकरण परियोजना ।",
        "editinginterface": "<strong>चेतावनी:</strong> तपाई यस पृष्ठलाई सम्पादन गर्नुहुँदैछ, जसले सफ्टवेयरको लागि \nइन्टरफेस सामग्रीहरू प्रदान गर्दछ।\nयस पृष्ठमा गरिएकोपरिवर्तनले यस विकिमा अरु प्रयोगकर्ताको इन्टरफेसको प्रदर्शनमा प्रभाव पार्नेछ ।",
        "translateinterface": "सबै विकिहरूको लागी अनुवाद जोड्न वा परिवर्तन गर्नका लागि मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ ट्रान्सलेटविकि.नेट]को प्रयोग गर्नुहोस।",
        "cascadeprotected": "यो पृष्ठ सम्पादन गर्नबाट सुरक्षित गरिएकोछ किनभनें {{PLURAL:$1|पृष्ठ |पृष्ठहरू}}मा सुरक्षित गर्नुका साथै प्रपात (\"cascading\") विकल्प खुल्ला राखिएको छ:\n$2",
-       "namespaceprotected": " '''$1'''  à¤¨à¥\87मसà¥\8dपà¥\87समा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 सम्पादन गर्ने अनुमति यहाँलाई छैन ।",
+       "namespaceprotected": " '''$1'''  à¤¨à¥\87मसà¥\8dपà¥\87समा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 सम्पादन गर्ने अनुमति यहाँलाई छैन ।",
        "customcssprotected": "तपाईलाई यस  पृष्ठ सम्पादन गर्ने अनुमति छैन, किनकी यसमा कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरु संग्रहित छन् ।",
        "customjsprotected": "तपाईलाई यस जाभास्कृप्ट पृष्ठ सम्पादन गर्ने अनुमति छैन, किनकी यसमा कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरु संग्रहित छन् ।",
        "mycustomcssprotected": "यस CSSपृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।",
        "passwordreset": "प्रवेशशव्द पुनः तय गर्ने",
        "passwordreset-text-one": "इमेल मार्फल अस्थायी पासवर्ड प्राप्त गर्नको लागी यस फारमलाई पूर्ण रूपमा भर्नुहोस् ।",
        "passwordreset-text-many": "{{PLURAL:$1|कृपया यहाँ मध्ये एउटा क्षेत्र भरि अस्थाई पासवर्ड इमेल मार्फत प्राप्त गर्नुहोस।}}",
-       "passwordreset-legend": "प्रवेशशव्द पुनः तय गर्ने",
        "passwordreset-disabled": "प्रवेश शव्द पुनः निर्धारण गर्ने व्यवस्था यस विकिमा निस्क्रिय पारिएको छ।",
        "passwordreset-emaildisabled": "इमेल सुविधा यस विकिमा निस्क्रिय बनाइएको छ ।",
        "passwordreset-username": "प्रयोगकर्ता नाम:",
        "changeemail-submit": "इमेल परिवर्तन गर्ने",
        "changeemail-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेशको निम्ति प्रयास गर्नुभएको छ।\nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "resettokens": "टोकन पूर्वरुपमा फर्काउने",
-       "resettokens-text": "जुन टोकन तपाईंको खातासँग सम्बद्ध केहि विशिष्ट व्यक्तिगत जानकारी प्रदान गर्छन, तपाईं त्यसलाई यहाँ रिसेट गर्न सक्नुहुन्छ।\n\nयदि तपाईं तिनलाई भुलवस कसैलाई देखाईदिनु भएको छ वा तपाईंको खाता ह्याक भइसकेको छ भने तपाईं यसलाई रिसेट गर्नुहोला।",
+       "resettokens-text": "जुन टोकन तपाईंको खातासँग सम्बद्ध केहि विशिष्ट व्यक्तिगत जानकारी प्रदान गर्छन, तपाईं त्यसलाई यहाँ रिसेट गर्न सक्नुहुन्छ।\n\nयदि तपाईंले तिनलाई भुलवस कसैलाई देखाईदिनु भएको छ वा तपाईंको खाता ह्याक भइसकेको छ भने तपाईं यसलाई रिसेट गर्नुहोला।",
        "resettokens-no-tokens": "पूर्वरुपमा फर्काउन कुनै पनि टोकन छैन ।",
-       "resettokens-legend": "टोकनहरू पूर्वरुपमा फर्काउने",
        "resettokens-tokens": "टोकनहरू:",
        "resettokens-token-label": "$1 (वर्तमान मूल्यः $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|तपाईंको ध्यानसूचीमा रहेका पृष्ठहरूमा भएको परिवर्तनहरू]]को वेब फिड (एटम/आरयसयस) निमित्त टोकन",
        "anoneditwarning": "<strong>चेतावनी:</strong> तपाईँले प्रवेश गर्नु भएको छैन । तपाईँको आइपि ठेगाना पृष्ठ सम्पादन इतिहासमा दर्ता गरिने छ र यो सबैले हेर्न सक्छन । यदि तपाईं <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउने] गर्नुभयो भने तपाईंद्वारा गरिएको सम्पादन तपाईंको प्रयोगकर्तानाममा जोडिनेछ।",
        "anonpreviewwarning": "''तपाईंले प्रवेश गर्नु भएको छैन। संग्रह (Save) गरेको खण्डमा पृष्ठको इतिहासमा तपाईंको IP ठेगाना अंकित गरिनेछ।''",
        "missingsummary": "'''यादगर्नुहोस् :''' तपाईले सम्पादन सारांश दिनुभएको छैन ।\nयदि तपाईले संग्रहगर्नुहोस्  थिच्नुभयो भने , सारांश बिना नै संग्रहित गरिने छ ।",
-       "selfredirect": "<strong>चेतावनी:</strong> तपाईं यस पृष्ठलाई आफुमा पुनः निर्देशित गर्दै हुनुहुन्छ।\nहुनसक्छ तपाई अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गर्दैहुनुहुन्छ, वा गलत पृष्ठको सम्पादन गर्दैहुनुहुन्छ।\nतपाईं पुन एकपटक \"{{int:savearticle}}\" क्लिक गर्नुहुन्छ, पुन:निर्देशित त्यसै पनि बनाइनेछ।",
+       "selfredirect": "<strong>चेतावनी:</strong> तपाईं यस पृष्ठलाई आफुमा पुनः निर्देशित गर्दै हुनुहुन्छ।\nहुनसक्छ तपाईं अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गर्दै हुनुहुन्छ, वा गलत पृष्ठको सम्पादन गर्दै हुनुहुन्छ।\nतपाईं पुनः एकपटक \"{{int:savearticle}}\" क्लिक गर्नुहुन्छ, पुनः निर्देशित त्यसै पनि बनाइनेछ।",
        "missingcommenttext": "कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।",
        "missingcommentheader": "'''याद गर्नुहोस् :''' तपाईँले टिप्पणीमा विषय /शीर्ष पंक्ति  दिनुभएको छैन ।\nतपाईँले फेरि \"{{int:savearticle}}\"  थिच्नु भएमा , तपाईको सम्पादन यसै रुपमा संग्रहित हुनेछ ।",
        "summary-preview": "सारांश पूर्वालोकन:",
        "whitelistedittext": "पाना सम्पादन गर्न तपाँईले $1 गर्नु पर्दछ।",
        "confirmedittext": "तपाईंले पृष्ठ संपादन गर्नअघि आफ्नो ई-मेल ठेगानाको पुष्टि गर्नुपर्छ।\nकृपया ई-मेल ठेगाना तयार गरी [[Special:Preferences|प्रयोगकर्ता अभिरूचि]] मार्फत मंजुर गराउनुहोस्।",
        "nosuchsectiontitle": "सेक्सन फेला परेन",
-       "nosuchsectiontext": "तपाà¤\88à¤\82 à¤¤à¥\8dयसà¥\8dतà¥\8b à¤\96णà¥\8dडà¤\95à¥\8b à¤¸à¤\82पादन à¤\97रà¥\8dनà¥\87 à¤ªà¥\8dरयास à¤\97रà¥\8dनà¥\81à¥\8dभयो जो अस्तित्वमा छैन।\nयो सारिएको अथवा मेटाइएको हुनुपर्छ जब तपाईं यस पृष्ठलाई हेर्नुहुँदैथियो।",
+       "nosuchsectiontext": "तपाà¤\88à¤\82 à¤¤à¥\8dयसà¥\8dतà¥\8b à¤\96णà¥\8dडà¤\95à¥\8b à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤ªà¥\8dरयास à¤\97रà¥\8dनà¥\81भयो जो अस्तित्वमा छैन।\nयो सारिएको अथवा मेटाइएको हुनुपर्छ जब तपाईं यस पृष्ठलाई हेर्नुहुँदैथियो।",
        "loginreqtitle": "प्रवेशगर्नु जरुरी छ।",
        "loginreqlink": "प्रवेश (लग ईन)",
        "loginreqpagetext": "अरु पृष्ठहेर्न तपाईले $1 गर्नुपर्छ ।",
        "accmailtext": "जथाभावीरूपमा सृजना गरिएको प्रवेशशब्द प्रयोगकर्ता [[User talk:$1|$1]] को  $2 मा पठाइएको छ।\n\nयो नयाँ खाताको प्रवेशशब्द  ''[[Special:ChangePassword|change password]]'' मा प्रवेश गरेर परिवर्तन गर्न सकिन्छ ।",
        "newarticle": "(नयाँ)",
        "newarticletext": "तपाईँले अहिले सम्म नभएको पृष्ठको लिंङ्क पहिल्याउनु भएको छ।\nयो पृष्ठ निर्माण गर्न तलको कोष्ठमा टाइप गर्नुहोस्  ।(थप जानकारीको लागि [$1 help page] हेर्नुहोस् )।\nयहाँ त्यत्तिकै आइपुग्नु भएको हो भने , ब्राउजरको  '''back''' बटन थिच्नुहोस ।",
-       "anontalkpagetext": "----''यà¥\8b à¤µà¤¾à¤°à¥\8dतालाप à¤ªà¥\83षà¥\8dठ à¤\85à¤\9cà¥\8dà¤\9eात à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤¹à¥\8b à¤\9cसलà¥\87 à¤\85हिलà¥\87समà¥\8dम à¤\96ाता à¤¬à¤¨à¤¾à¤\8fà¤\95à¥\88 à¤\9bà¥\88न, à¤\85थवा à¤\9cसलà¥\87 à¤¯à¤¸ à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤\89पयà¥\8bà¤\97 à¤\97रà¥\8dदà¥\88न।\nयस à¤\95ारण à¤¹à¤¾à¤®à¥\80लà¥\87 à¤\89सलाà¤\88 à¤\89सà¤\95à¥\8b à¤\86à¤\87 à¤ªà¥\80 (IP) à¤ à¥\87à¤\97ानालà¥\87 à¤\9aिनà¥\8dन à¤¸à¤\95à¥\8dà¤\9bà¥\8cà¤\82। \nयसà¥\8dतà¥\8b à¤\86à¤\87 à¤ªà¥\80 (IP) à¤ à¥\87à¤\97ाना à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81à¤\95à¥\8b à¤¸à¤¾à¤\9dा à¤¹à¥\81नसà¤\95à¥\8dà¤\9b।\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\85à¤\9cà¥\8dà¤\9eात à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b à¤° à¤¤à¤ªà¤¾à¤\88à¤\82मथि à¤\85à¤\9aाहिà¤\81दà¥\8b à¤\9fिपà¥\8dपणà¥\80 à¤­à¤\8fà¤\95à¥\8b à¤\85नà¥\81भव à¤\97रà¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤­à¤¨à¥\87à¤\82 भविष्यमा अन्य अज्ञात प्रयोगकर्तासितको भ्रमबाट बाँच्न कृपया [[Special:UserLogin/signup|खाता खोल्नुहोस्]] अथवा [[Special:UserLogin|प्रवेश गर्नुहोस्]] ''",
-       "noarticletext": "यस à¤²à¥\87à¤\96मा à¤\85हिलà¥\87 à¤\95à¥\87हि à¤ªà¤¨à¤¿ à¤ªà¤¾à¤  à¤\9bà¥\88न à¥¤\nतपाà¤\88लà¥\87 à¤\85नà¥\8dय à¤ªà¥\83षà¥\8dठमा [[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c]] à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¤ªà¥\83षà¥\8dठ à¤¸à¤\82बà¤\82धित à¤¢à¤¡à¥\8dडामा à¤\96à¥\8bà¤\9c],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  à¤¯à¤¸à¥\88 à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¤\82पादन गर्ने]</span>.",
-       "noarticletext-nopermission": "यस à¤²à¥\87à¤\96मा à¤\85हिलà¥\87 à¤\95à¥\87हि à¤ªà¤¨à¤¿ à¤ªà¤¾à¤  à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\82लà¥\87 à¤\85नà¥\8dय à¤ªà¥\83षà¥\8dठमा [[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c]] à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b,\nà¤\85थवा <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|पà¥\83षà¥\8dठ={{FULLPAGENAMEE}}}} à¤¸à¤®à¥\8dबनà¥\8dधित à¤²à¤\97हरà¥\81 खोज्न सक्नुहुनेछ ]</span> तर तपाईंलाई नयाँ पृष्ठ बनाउने अधिकार छैन।",
+       "anontalkpagetext": "----''यà¥\8b à¤µà¤¾à¤°à¥\8dतालाप à¤ªà¥\83षà¥\8dठ à¤\85à¤\9cà¥\8dà¤\9eात à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤¹à¥\8b à¤\9cसलà¥\87 à¤\85हिलà¥\87समà¥\8dम à¤\96ाता à¤¬à¤¨à¤¾à¤\8fà¤\95à¥\88 à¤\9bà¥\88न, à¤\85थवा à¤\9cसलà¥\87 à¤¯à¤¸ à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤\89पयà¥\8bà¤\97 à¤\97रà¥\8dदà¥\88न।\nयस à¤\95ारण à¤¹à¤¾à¤®à¥\80लà¥\87 à¤\89सलाà¤\88 à¤\89सà¤\95à¥\8b à¤\86à¤\87 à¤ªà¥\80 (IP) à¤ à¥\87à¤\97ानालà¥\87 à¤\9aिनà¥\8dन à¤¸à¤\95à¥\8dà¤\9bà¥\8cà¤\82। \nयसà¥\8dतà¥\8b à¤\86à¤\87 à¤ªà¥\80 (IP) à¤ à¥\87à¤\97ाना à¤§à¥\87रà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82à¤\95à¥\8b à¤¸à¤¾à¤\9dा à¤¹à¥\81नसà¤\95à¥\8dà¤\9b।\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\85à¤\9cà¥\8dà¤\9eात à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b à¤° à¤¤à¤ªà¤¾à¤\88à¤\82माथि à¤\85à¤\9aाहिà¤\81दà¥\8b à¤\9fिपà¥\8dपणà¥\80 à¤­à¤\8fà¤\95à¥\8b à¤\85नà¥\81भव à¤\97रà¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤­à¤¨à¥\87 भविष्यमा अन्य अज्ञात प्रयोगकर्तासितको भ्रमबाट बाँच्न कृपया [[Special:UserLogin/signup|खाता खोल्नुहोस्]] अथवा [[Special:UserLogin|प्रवेश गर्नुहोस्]] ''",
+       "noarticletext": "यस à¤²à¥\87à¤\96मा à¤\85हिलà¥\87 à¤\95à¥\87हि à¤ªà¤¨à¤¿ à¤ªà¤¾à¤  à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\82लà¥\87 à¤\85नà¥\8dय à¤ªà¥\83षà¥\8dठमा [[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c]] à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dबनà¥\8dधित à¤¢à¤¡à¥\8dडामा à¤\96à¥\8bà¤\9c],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  à¤¯à¤¸à¥\88 à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¤®à¥\8dपादन गर्ने]</span>.",
+       "noarticletext-nopermission": "यस à¤²à¥\87à¤\96मा à¤\85हिलà¥\87 à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¤¾à¤  à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\82लà¥\87 à¤\85नà¥\8dय à¤ªà¥\83षà¥\8dठमा [[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c]] à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b,\nà¤\85थवा <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|पà¥\83षà¥\8dठ={{FULLPAGENAMEE}}}} à¤¸à¤®à¥\8dबनà¥\8dधित à¤²à¤\97हरà¥\82 खोज्न सक्नुहुनेछ ]</span> तर तपाईंलाई नयाँ पृष्ठ बनाउने अधिकार छैन।",
        "missing-revision": "\"{{FULLPAGENAME}}\" पृष्ठको अवतरण #$1 रहेको छैन।\n\nसामान्य रूपमा यसो एउटा हटाइएको पृष्ठको पुरानो लिङ्कमा क्लिक गर्दा हुन्छ।\nअधिक जानकारीको लागि तपाईं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाएको लग] हेर्न सक्नुहुन्छ।",
        "userpage-userdoesnotexist": "प्रयोगकर्ताको खाता  \"<nowiki>$1</nowiki>\" दर्ता गरिएको छैन ।\nतपाईँले पृष्ठ निर्माण/सम्पादन गर्न चाहनु भएको भए जाँच गर्नुहोस् ।",
        "userpage-userdoesnotexist-view": "प्रयोगकर्ता खाता \"$1\" दर्ता गरिएको छैन।",
        "userjspreview": "<strong>याद राख्नुहोस तपाईँले आफ्नो प्रयोगकर्ता जाभास्क्रिप्टको पूर्वावलोकन मात्र हेरिरहनु भएको छ।\nयसलाइ अहिले सम्म सङ्ग्रह गरिएको छैन!</strong>",
        "sitecsspreview": "<strong>याद राख्नुहोस् तपाईँले केवल विश्वव्यापी सियसयसको पूर्वावलोकन मात्र अवलोकन गर्नुभएको छ।\nयसलाई अहिलेसम्म सङ्ग्रह गरिएको छैन!</strong>",
        "sitejspreview": "<strong>याद राख्नुहोस तपाईँले केवल जाभास्क्रिप्ट कोडको पूर्वावलोकन मात्र हेरिरहनु भएको छ।\nयसलाई अहिले सम्म सङ्ग्रह गरिएको छैन!</strong>",
-       "userinvalidcssjstitle": "<strong>à¤\9aà¥\87तावनà¥\80:</strong> à¤¯à¤¹à¤¾à¤\81 à¤\95à¥\81नà¥\88पनि \"$1\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96à¥\8bल à¤\9bà¥\88न।\nपà¥\8dरà¤\9aलित .css à¤¤à¤¥à¤¾ .js à¤ªà¥\83षà¥\8dठहरà¥\81ले निम्नपद शीर्षक प्रयोग गर्छन्, जस्तै {{ns:user}}:Foo/Vector.css को सट्टामा {{ns:user}}:Foo/vector.css",
+       "userinvalidcssjstitle": "<strong>à¤\9aà¥\87तावनà¥\80:</strong> à¤¯à¤¹à¤¾à¤\81 à¤\95à¥\81नà¥\88पनि \"$1\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96à¥\8bल à¤\9bà¥\88न।\nपà¥\8dरà¤\9aलित .css à¤¤à¤¥à¤¾ .js à¤ªà¥\83षà¥\8dठहरà¥\82ले निम्नपद शीर्षक प्रयोग गर्छन्, जस्तै {{ns:user}}:Foo/Vector.css को सट्टामा {{ns:user}}:Foo/vector.css",
        "updated": "नवीन",
        "note": "'''सूचना:'''",
        "previewnote": "'''याद राख्नुहोस् यो केवल पूर्वावलोकन मात्र हो; तपाईंका परिवर्तनहरू संग्रहित भएका छैनन्!'''",
        "yourtext": "तपाईंका पाठहरु",
        "storedversion": "संग्रहित पुनरावलोकन",
        "nonunicodebrowser": "<strong>चेतावनी: तपाईंको ब्राउजर युनिकोडलाई स्वीकार गर्दैन।</strong> \nतपाईंद्वारा सहि रुपले पृष्ठ सम्पादनको लागि: गैर-एयससिआइआइ क्यारेक्टर हेक्जाडेसिमल कोड (hexadecimal) मा देखाइनेछ।",
-       "editingold": "<strong>चेतावनी: तपाईं यस पृष्ठको अति पुरनो अप्रचलित संशोधनलाई सम्पादन गर्नुहुँदैछ।<strong>\nयदि तपाईंले यस परिवर्तनलाई सङ्ग्रह गर्नु भयो भने यस पछिका संशोधनहरू नष्ट हुनेछन्।",
+       "editingold": "<strong>à¤\9aà¥\87तावनà¥\80: à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¯à¤¸ à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤\85ति à¤ªà¥\81रानà¥\8b à¤\85पà¥\8dरà¤\9aलित à¤¸à¤\82शà¥\8bधनलाà¤\88 à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\81हà¥\81à¤\81दà¥\88à¤\9b।<strong>\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤¯à¤¸ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनलाà¤\88 à¤¸à¤\99à¥\8dà¤\97à¥\8dरह à¤\97रà¥\8dनà¥\81 à¤­à¤¯à¥\8b à¤­à¤¨à¥\87 à¤¯à¤¸ à¤ªà¤\9bिà¤\95ा à¤¸à¤\82शà¥\8bधनहरà¥\82 à¤¨à¤·à¥\8dà¤\9f à¤¹à¥\81नà¥\87à¤\9bनà¥\8d।",
        "yourdiff": "भिन्नताहरु",
        "copyrightwarning": "कृपया ध्यान दिनुहोस् यस {{SITENAME}}मा दिइएका योगदानहरू $2को अनुसार सम्पादन र पुनर्वितरणकोलागि खुला मानिनेछ (विवरणकोलागि $1 हेर्नुहोस्) । यदि तपाईंको लेखलाई सम्पादन अथवा पुनः वितरण गराउन चाहनुहुन्न भने कृपया यहाँ तपाईंको लेख प्रस्तुत नगर्नुहोस् ।<br />       \nयदि तपाईं किटानसाथ भन्नुहुन्छ कि कुनै लेख मैले लेखेको हो अथवा सार्वजनिक ज्ञानक्षेत्र अथवा मुक्त संसाधनबाट लिइएको हो, '''यस्तो लेख कपिराइटबिना यहाँ नराख्नुहोस्!'''",
-       "copyrightwarning2": "à¤\95à¥\83पया à¤§à¥\8dयान à¤¦à¤¿à¤¨à¥\81हà¥\8bसà¥\8d à¤¯à¤¸ {{SITENAME}}मा à¤¦à¤¿à¤\87à¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\81लाà¤\88 à¤\85नà¥\8dय à¤¯à¥\8bà¤\97दाताहरà¥\81दà¥\8dवारा à¤¸à¤®à¥\8dपादन à¤\97रिनà¥\87à¤\9b, à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रिनà¥\87à¤\9b à¤\85थवा à¤¹à¤\9fाà¤\87नà¥\87à¤\9b। à¤¯à¤¦à¤¿  à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤²à¥\87à¤\96लाà¤\88 à¤¨à¤¿à¤°à¥\8dदयता à¤ªà¥\82रà¥\8dवà¤\95 à¤¸à¤®à¥\8dपादन à¤\97रà¥\87à¤\95à¥\8b à¤\9aाहनà¥\81हà¥\81नà¥\8dन à¤­à¤¨à¥\87à¤\82 à¤¤à¥\8dयà¥\8b à¤¯à¤¹à¤¾à¤\81 à¤¨à¤¦à¤¿à¤¨à¥\81हà¥\8bसà¥\8d।<br />\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\95िà¤\9fानसाथ à¤­à¤¨à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤\95ि à¤¯à¥\8b à¤²à¥\87à¤\96 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\86फà¥\88 लेखेको हो अथवा सार्वजनिक ज्ञानक्षेत्र अथवा मुक्त संसाधनबाट लिइएको हो (विवरणकोलागि हेर्नुहोस् $1 ). \n'''कपीराइट भएको रचना अनुमति बिना  यहाँ नदिनुहोस्!'''",
+       "copyrightwarning2": "à¤\95à¥\83पया à¤§à¥\8dयान à¤¦à¤¿à¤¨à¥\81हà¥\8bसà¥\8d à¤¯à¤¸ {{SITENAME}}मा à¤¦à¤¿à¤\87à¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82लाà¤\88 à¤\85नà¥\8dय à¤¯à¥\8bà¤\97दानà¤\95रà¥\8dताहरà¥\82दà¥\8dवारा à¤¸à¤®à¥\8dपादन à¤\97रिनà¥\87à¤\9b, à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रिनà¥\87à¤\9b à¤\85थवा à¤¹à¤\9fाà¤\87नà¥\87à¤\9b। à¤¯à¤¦à¤¿ à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤²à¥\87à¤\96लाà¤\88 à¤¨à¤¿à¤°à¥\8dदयता à¤ªà¥\82रà¥\8dवà¤\95 à¤¸à¤®à¥\8dपादन à¤\97रà¥\87à¤\95à¥\8b à¤\9aाहनà¥\81हà¥\81नà¥\8dन à¤­à¤¨à¥\87 à¤¤à¥\8dयà¥\8b à¤¯à¤¹à¤¾à¤\81 à¤¨à¤¦à¤¿à¤¨à¥\81हà¥\8bसà¥\8d।<br />\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\95िà¤\9fानसाथ à¤­à¤¨à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤\95ि à¤¯à¥\8b à¤²à¥\87à¤\96 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\86फà¥\88लà¥\87 लेखेको हो अथवा सार्वजनिक ज्ञानक्षेत्र अथवा मुक्त संसाधनबाट लिइएको हो (विवरणकोलागि हेर्नुहोस् $1 ). \n'''कपीराइट भएको रचना अनुमति बिना  यहाँ नदिनुहोस्!'''",
        "longpageerror": "'''त्रुटि: तपाईंले बुझाएको पाठ {{PLURAL:$1|one किलोबाइट|$1 किलोबाइट}} लामो छ, जो अधिकतम {{PLURAL:$2|one किलोबाइट|$2 किलोबाइट}} भन्दा लामो छ।'''\nयो संग्रहित हुन सक्तैन।",
-       "readonlywarning": "<strong>चेतावनी: तथ्याक मर्मतको निम्ति बन्द गरिएकोछ, यस कारण तपाईं आफ्नो सम्पादन अहिले सङ्ग्रह गर्न सक्नुहुन्न।</strong>\n\nयदि तपाईं चाहनुहुन्छ भने अहिले यहाँ भएका पाठलाई कट गरि कतै टेक्स्ट फाइलमा पेस्ट गरेर सङ्ग्रह गर्न सक्नुहुन्छ।\n\nप्रवन्धक जसले यो बन्द गरेको छ उसले यस्तो विवरण दिएको छ: $1",
-       "protectedpagewarning": "<strong>सà¥\82à¤\9aना: à¤¯à¤¸ à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¤¯à¤¸à¤\95ारण à¤ªà¥\8dरवनà¥\8dधनà¤\95à¥\8b à¤µà¤¿à¤¶à¥\87षाधिà¤\95ार à¤ªà¥\8dरापà¥\8dत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81ले मात्र यसलाई सम्पादन गर्न सक्छन् ।</strong>\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइएको छ:",
+       "readonlywarning": "<strong>à¤\9aà¥\87तावनà¥\80: à¤¤à¤¥à¥\8dयाà¤\99à¥\8dà¤\95 à¤®à¤°à¥\8dमतà¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dति à¤¬à¤¨à¥\8dद à¤\97रिà¤\8fà¤\95à¥\8bà¤\9b, à¤¯à¤¸ à¤\95ारण à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\86फà¥\8dनà¥\8b à¤¸à¤®à¥\8dपादन à¤\85हिलà¥\87 à¤¸à¤\99à¥\8dà¤\97à¥\8dरह à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन।</strong>\n\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\9aाहनà¥\81हà¥\81नà¥\8dà¤\9b à¤­à¤¨à¥\87 à¤\85हिलà¥\87 à¤¯à¤¹à¤¾à¤\81 à¤­à¤\8fà¤\95ा à¤ªà¤¾à¤ à¤²à¤¾à¤\88 à¤\95à¤\9f à¤\97रि à¤\95तà¥\88 à¤\9fà¥\87à¤\95à¥\8dसà¥\8dà¤\9f à¤«à¤¾à¤\87लमा à¤ªà¥\87सà¥\8dà¤\9f à¤\97रà¥\87र à¤¸à¤\99à¥\8dà¤\97à¥\8dरह à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b।\n\nपà¥\8dरवनà¥\8dधà¤\95 à¤\9cसलà¥\87 à¤¯à¥\8b à¤¬à¤¨à¥\8dद à¤\97रà¥\87à¤\95à¥\8b à¤\9b à¤\89सलà¥\87 à¤¯à¤¸à¥\8dतà¥\8b à¤µà¤¿à¤µà¤°à¤£ à¤¦à¤¿à¤\8fà¤\95à¥\8b à¤\9b: $1",
+       "protectedpagewarning": "<strong>सà¥\82à¤\9aना: à¤¯à¤¸ à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¤¯à¤¸à¤\95ारण à¤ªà¥\8dरवनà¥\8dधà¤\95à¤\95à¥\8b à¤µà¤¿à¤¶à¥\87षाधिà¤\95ार à¤ªà¥\8dरापà¥\8dत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82ले मात्र यसलाई सम्पादन गर्न सक्छन् ।</strong>\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइएको छ:",
        "semiprotectedpagewarning": "<strong>सूचना:</strong> यो पृष्ठलाई सुरक्षित गरिएको हुँदा दर्ता भएका प्रयोगकर्ताहरूले मात्र यसलाई सम्पादन गर्न सक्छन् ।\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइएको छ:",
        "cascadeprotectedwarning": "<strong>चेतावनी:</strong> यस पृष्ठलाई सुरक्षित गरिएको छ यसकारण संशोधन प्रवन्धनको विशेषाधिकार प्राप्त प्रयोगकर्ताले मात्र सम्पादन गर्न सक्नेछन् किन भने यो {{PLURAL:$1|पृष्ठ|पृष्ठहरू}}को सुरक्षित निम्न सूचीमा सुरक्षित छ:",
        "titleprotectedwarning": "<strong>चेतावनी: यो पृष्ठलाई सुरक्षित गरिएको छ र यसलाई सृजना गर्न  [[Special:ListGroupRights|विशेषाधिकार]] चाहिन्छ।</strong>\nसन्दर्भको लागि नवीनतम लग प्रविष्टि तल दिइएको छ:",
        "templatesused": "यस पृष्ठमा प्रयोग भएका {{PLURAL:$1|Template|ढाँचाहरू}} :",
        "templatesusedpreview": "यस पृष्ठमा प्रयोग भएका {{PLURAL:$1|Template|ढाँचाहरू}} :",
-       "templatesusedsection": "{{PLURAL:$1|ढाँचा प्रयोग गरिएको छ|ढाँचाहरु प्रयोग गरिएका छन्}} यस खण्डमा:",
+       "templatesusedsection": "यस खण्डमा {{PLURAL:$1|ढाँचा प्रयोग गरिएको छ|ढाँचाहरू प्रयोग गरिएका छन्}}",
        "template-protected": "(सुरक्षित)",
        "template-semiprotected": "(अर्ध-सुरक्षित)",
        "hiddencategories": "यो पृष्ठ निम्न {{PLURAL:$1|1 लुकाइएको श्रेणी|$1 लुकाइएका श्रेणीहरू}}को सदस्य हो :",
        "permissionserrorstext": "तपाईँलाई यसको लागि अनुमति छैन ,निम्न {{PLURAL:$1|कारण|कारणहरु}}ले गर्दा:",
        "permissionserrorstext-withaction": "$2 को लागि तपाईँलाई अनुमति छैन , निम्न {{PLURAL:$1|कारणले|कारणहरुले}} गर्दा :",
        "recreate-moveddeleted-warn": "'''चेतावनी: तपाईं अघिबाट मेटिएको पृष्ठ पुनर्निर्माण गर्नुहुँदैछ'''\n\nतपाईंको विचारमा के यो उचित छ कि यसको सम्पादन जारी राखियोस्, \nयस पृष्ठको मेटिएको र सारिएको लग सुविधाको निम्ति यहाँ दिइएकोछ :",
-       "moveddeleted-notice": "पृष्ठ मेटिएको छ।\nमेटिएका तथा सारिएका पृष्ठहरुको सूची तल सन्दर्भको लागि दिइएको छ।",
+       "moveddeleted-notice": "पृष्ठ मेटिएको छ ।\nमेटिएका तथा सारिएका पृष्ठहरूको सूची तल सन्दर्भको लागि दिइएको छ ।",
        "log-fulllog": "पूरा लग हेर्नुहोस्",
        "edit-hook-aborted": "हुकले सम्पादन बन्द गरिदियो ।\nयसले कुनै कारण दिएन ।",
        "edit-gone-missing": "पृष्ठ अद्यतन गर्न सकिएन\nयो मेटिएको जस्तो देखिन्छ ।",
        "content-failed-to-parse": "$1 को लागि $2 सामग्रीलाई पार्स गर्न विफल, त्रुटि: $3",
        "invalid-content-data": "अमान्य सामग्री डेटा",
        "content-not-allowed-here": "सामग्री \"$1\"  [[$2]] पृष्ठमा राख्न अनुमती छैन ।",
-       "editwarning-warning": "यस à¤ªà¥\83षà¥\8dठबाà¤\9f à¤¬à¤¾à¤¹à¤¿à¤° à¤\9cाà¤\81दा à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¦à¥\8dवारा à¤\97रिà¤\8fà¤\95à¥\8b à¤\95à¥\81नà¥\88 à¤\95à¥\8bà¤\88 à¤ªà¤¨à¤¿ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¤°à¤¾à¤\89नà¥\87à¤\9b।\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤²à¤\97 à¤\87न à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\9b à¤­à¤¨à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¯à¤¸ à¤¸à¥\82à¤\9aनालाà¤\88 à¤¦à¥\87à¤\96ाà¤\89न à¤\86फà¥\8dनà¥\8b à¤\85भिरà¥\82à¤\9aà¥\80हरà¥\82à¤\95à¥\8b \"{{int:prefs-editing}}\" à¤­à¤¾à¤\97मा à¤\97à¤\8fर à¤¬à¤¨à¥\8dद à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b।",
+       "editwarning-warning": "यà¥\8b à¤ªà¥\83षà¥\8dठबाà¤\9f à¤¬à¤¾à¤¹à¤¿à¤° à¤\9cाà¤\81दा à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¦à¥\8dवारा à¤\97रिà¤\8fà¤\95à¥\8b à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¤°à¤¾à¤\89नà¥\87à¤\9b।\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤²à¤\97 à¤\87न à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\9b à¤­à¤¨à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¯à¤¸ à¤¸à¥\82à¤\9aनालाà¤\88 à¤¦à¥\87à¤\96ाà¤\89न à¤\86फà¥\8dनà¥\8b à¤\85भिरà¥\82à¤\9aà¥\80हरà¥\82à¤\95à¥\8b \"{{int:prefs-editing}}\" à¤­à¤¾à¤\97मा à¤\97à¤\8fर à¤¬à¤¨à¥\8dद à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b।",
        "editpage-notsupportedcontentformat-title": "सामग्री प्रकार समर्थित छैन",
        "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मोडलद्वारा समर्थित छैन।",
        "content-model-wikitext": "विकिपाठ",
        "content-model-javascript": "जाभास्क्रिप्ट",
        "content-json-empty-object": "खाली वस्तु",
        "content-json-empty-array": "खाली एरे",
-       "duplicate-args-category": "ढाँचाको यस खण्डमा पृष्ठहरू दोहो तर्कहरू प्रयोग गरि रहेका छन्",
+       "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": "'''चेतावनी:''' यस पृष्टका अति धेरै संख्याका महँगा पार्सर फंक्सन कल्स (expensive parser function calls)  छन्।\nयसमा $2 भन्दा कम {{PLURAL:$2|कल|कल्स}} हुनुपर्छ,  यहाँ {{PLURAL:$1|अहिले $1 कल छ|अहिले $1 कल्स छ्न्}}.",
        "expensive-parserfunction-category": "अति धेरै मेहनत पर्ने '''पार्सर फङ्सन कल'''हरू भएका पृष्ठहरू",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' समेट्नुपर्ने टेम्प्लेट(नमुना) आकार अति ठूलो छ।\nकेही टेम्प्लेटहरु(नमुनाहरु) समेटिने छैनन् ।",
-       "post-expand-template-inclusion-category": "पà¥\83षà¥\8dठहरà¥\81 à¤\9cहाà¤\81  à¤¸à¤®à¥\87à¤\9fिà¤\8fà¤\95à¥\8b à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f à¤\86à¤\95ार हुनुपर्ने भन्दा बढि छ ।",
+       "post-expand-template-inclusion-category": "यसà¥\8dता à¤ªà¥\83षà¥\8dठहरà¥\82 à¤\9cहाà¤\81 à¤¢à¤¾à¤\81à¤\9aा (à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f) à¤°à¤¾à¤\96à¥\8dनà¥\87 à¤¸à¤¿à¤®à¤¾ हुनुपर्ने भन्दा बढि छ ।",
        "post-expand-template-argument-warning": "'''चेतावनी:''' यो पृष्ठकमा कम्तिमा एक टेम्प्लेट मान रहेको छ जसको धेरै ठूलो बढोत्तरी आकार रहेको छ।\nयस्ता मानहरु हटाइएका छन् ।",
        "post-expand-template-argument-category": "मेटिएका ढाँचाहरूसँग सम्बन्ध रहेका पृष्ठहरू",
        "parser-template-loop-warning": "ढाँचागत ग़ाँठो पर्‍यो : [[$1]]",
        "last": "अघिल्लो",
        "page_first": "पहिलो",
        "page_last": "अन्तिम",
-       "histlegend": "à¤\85à¤\82तर à¤\9aयन:सà¤\82शà¥\8bधनहरà¥\81à¤\95à¥\8b à¤¤à¥\81लनाà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤°à¥\87डियà¥\8b à¤¬à¤\95à¥\8dसमा à¤\95à¥\8dलिà¤\95 à¤\97रà¥\87र à¤\8fणà¥\8dà¤\9fर à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d à¤\85थवा à¤¤à¤² à¤¦à¤¿à¤\8fà¤\95à¥\8b à¤¬à¤\9fनमा à¤¥à¤¿à¤\9aà¥\8dनà¥\81हà¥\8bसà¥\8d <br />\nलिà¤\9cà¥\87à¤\82ड: (à¤\9aालà¥\82): '''({{int:cur}})''' = à¤\85वतरणà¤\95à¥\8b à¤¬à¥\80à¤\9aमा à¤\85à¤\82तर, '''({{int:last}})''' = à¤ªà¤¹à¤¿à¤²à¤¾à¤\95ा à¤\85वतरणà¤\95à¥\8b à¤¬à¥\80à¤\9aमा à¤\85à¤\82तर, '''{{int:minoreditletter}}''' = सानो परिवर्तन।",
+       "histlegend": "à¤\85नà¥\8dतर à¤\9aयन:सà¤\82शà¥\8bधनहरà¥\82à¤\95à¥\8b à¤¤à¥\81लनाà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤°à¥\87डियà¥\8b à¤¬à¤¾à¤\95समा à¤\95à¥\8dलिà¤\95 à¤\97रà¥\87र à¤\87णà¥\8dà¤\9fर à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d à¤\85थवा à¤¤à¤² à¤¦à¤¿à¤\8fà¤\95à¥\8b à¤¬à¤\9fनमा à¤¥à¤¿à¤\9aà¥\8dनà¥\81हà¥\8bसà¥\8d <br />\nलिà¤\9cà¥\87à¤\82ड: (à¤\9aालà¥\82): '''({{int:cur}})''' = à¤\85वतरणà¤\95à¥\8b à¤¬à¥\80à¤\9aमा à¤\85नà¥\8dतर, '''({{int:last}})''' = à¤ªà¤¹à¤¿à¤²à¤¾à¤\95ा à¤\85वतरणà¤\95à¥\8b à¤¬à¥\80à¤\9aमा à¤\85नà¥\8dतर, '''{{int:minoreditletter}}''' = सानो परिवर्तन।",
        "history-fieldset-title": "इतिहासको विचरण गर्ने",
        "history-show-deleted": "मेटिएका मात्र",
        "histfirst": "पुरानो",
        "histlast": "नयाँ",
-       "historysize": "({{PLURAL:$1|१ à¤¬à¤¾à¤\87à¤\9f |$1 à¤¬à¤¾à¤\87à¤\9fहरà¥\81}})",
+       "historysize": "({{PLURAL:$1|१ à¤¬à¤¾à¤\87à¤\9f |$1 à¤¬à¤¾à¤\87à¤\9fहरà¥\82}})",
        "historyempty": "(खाली)",
        "history-feed-title": "पुनरावलोकन इतिहास",
        "history-feed-description": "विकीमा यो पृष्ठको पुनरावलोकन इतिहास",
        "rev-deleted-text-permission": "यस पृष्ठको पुनरावलोकन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटिएको लगमा पाउन सकिन्छ]।",
        "rev-suppressed-text-permission": "यो पृष्ठ संशोधनलाई <strong>दमन</strong> गरिएको छ । \nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} दमन लग]मा पाउन सकिन्छ ।",
        "rev-deleted-text-unhide": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} को मेटिएको लगमा पाउन सकिन्छ].\nयदि चाहनु भयो भनें [$1 संशोधन हेर्न] सक्नुहुन्छ।",
-       "rev-suppressed-text-unhide": "यस पृष्ठको पुनरावलोकन '''दमन''' गरिएको छ ।\nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} दमन लग] पाउन सकिन्छ ।\nयदि तपाई अगाडि बढ्न चाहनु हुन्छ भने पनि तपाईले  [$1 यि संशोधनहरु हेर्न] पाउनु हुनेछ ।",
+       "rev-suppressed-text-unhide": "यस पृष्ठको पुनरावलोकन '''दमन''' गरिएको छ ।\nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} दमन लग] पाउन सकिन्छ ।\nयदि तपाईं अगाडि बढ्न चाहनु हुन्छ भने पनि तपाईंले  [$1 यि संशोधनहरू हेर्न] पाउनु हुनेछ ।",
        "rev-deleted-text-view": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nतपाईंले हेर्न सक्नुहुन्छ; [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} मेटिएको लगमा विवरण पाउन सकिन्छ]।",
        "rev-suppressed-text-view": "यस पृष्ठको पुनरावलोकन <strong>थिचिएको छ</strong>।\nप्रबन्धकको हैसियतले हेर्न सक्नुहुन्छ; [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को थिचिएको लगमा विवरण पाउन सकिन्छ]",
        "rev-deleted-no-diff": "तपाईंले यसको भिन्नता पाउन सक्नुहुन्न किनभने यस पृष्ठको पुनरावलोकन <strong>मेटाइएको छ</strong>'।\nयसको विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटाइएको लगमा पाउन सक्नुहुन्छ]।",
        "revdelete-text-file": "हटाइएको फाइल अवतरण फाइल इतिहासमा देखाइनेछ तर तिनको सामग्री सार्वजनिक रूपले देखाइने छैन।",
        "logdelete-text": "हटाइएको प्रवेश घटनाहरू अहिले पनि लगमा देखाइनेछ तर तिनको सामग्रीको केहि भागलाई सार्वजनिक रूपले हेर्न सकिने छैन।",
        "revdelete-text-others": "अन्य प्रवन्धकहरू अहिले पनि लुकाइएको सामग्रीको उपयोग गर्नका लागि अझै अतिरिक्त प्रतिबन्ध सेट गरिरहेका छन्, जब सम्म यो अ-नष्ट गर्न सक्षम हुनेछ।",
-       "revdelete-confirm": "पà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dनà¥\81स कि तपाईं यो कार्य गर्न चाहनुहुन्छ, तपाईं यसको परिणाम देखि अवगत हुनुहुन्छ, र तपाईं यो [[{{MediaWiki:Policy-url}}|नीति]] अनुसार गर्दै हुनुहुन्छ।",
+       "revdelete-confirm": "पà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d कि तपाईं यो कार्य गर्न चाहनुहुन्छ, तपाईं यसको परिणाम देखि अवगत हुनुहुन्छ, र तपाईं यो [[{{MediaWiki:Policy-url}}|नीति]] अनुसार गर्दै हुनुहुन्छ।",
        "revdelete-suppress-text": "लुकाउने प्रयोग <strong>मात्रै</strong> यी परिस्थितिमा हुनु पर्नेछ:\n* सम्भावित अपमानजनक जानकारी\n* अनुपयुक्त निजी जानकारी\n*: <em>घरको ठेगाना वा टेलिफोन नम्बर, राष्ट्रिय पहिचान नम्बर आदि।</em>",
        "revdelete-legend": "दृष्टि बन्देज मिलाउने",
        "revdelete-hide-text": "पुनरावलोकन पाठ",
        "revdelete-modify-no-access": "  $2समय र $1 मिति भएको वस्तु परिवर्तन गर्न सकिएन यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई परिवर्तन गर्न तपाईसँग अनुमती छैन ।",
        "revdelete-modify-missing": "आइडी  $1 रहेको वस्तु परिवर्तन गर्दा त्रुटी भएको छ: यस वस्तु डेटावेसबाट हराइरहेको छ !",
        "revdelete-no-change": "'''चेतावनी:''' $2, $1मिति भइको वस्तुको पहिले नै अनुरोध गरे अनुसारको दृश्य सेटिङ्गहरु छन् ।",
-       "revdelete-concurrent-change": " $2, $1 मिति गरिएको वस्तु परिवर्तन गर्न सकिएन: यसको स्थितीले तपाईले परिवर्तन गर्नलाग्नुहुँदा कोहीअरुले न परिवर्तन गरेजस्तो देखाउँछ\nकृपया लगहरु हेर्नुहोला ।",
+       "revdelete-concurrent-change": " $2, $1 मिति गरिएको वस्तु परिवर्तन गर्न सकिएन: यसको स्थितीले तपाईले परिवर्तन गर्नलाग्नुहुँदा कोहीअरुले नै परिवर्तन गरेजस्तो देखाउँछ\nकृपया लगहरू हेर्नुहोला ।",
        "revdelete-only-restricted": "$2, $1 मिति भएको वस्तु लुकाउदा त्रुटी भएको छ:तपाईले वस्तुहरुलाई प्रवन्धकहरुको दृष्टीबाट दमन गर्न सक्नुहुन्न अझ कुनै पनि अरु दृष्टी विकल्पहरु नछानीकन।",
        "revdelete-reason-dropdown": "मेटाउनका सामान्य कारणहरु\n** कपीराइट उल्लंघन\n** अनुचित व्यक्तिगत जानकारी\n** अनुचित प्रयोगकर्ता नाम\n** संभावित अपमानजनक जानकारी",
        "revdelete-otherreason": "अन्य/थप कारण:",
        "suppressionlogtext": "मेट्न र रोक्नका निमित्त निम्न सुची रहेको छ जसमा प्रवन्धकबाट लुकाइएका सामग्री समेत रहेका छन।\nकृपया हाल प्रयोगमा रहेका रोक र रोकावटको सुचीका लागि [[Special:BlockList|रोक सुची]] हेर्नुहोला।",
        "mergehistory": "पृष्ठ इतिहासहरु मिसाउने",
        "mergehistory-header": "यो पृष्ठ एक स्रोत पृष्ठको इतिहास कुनै अन्य पृष्ठमा मिलाउनको लागि हो।\nसुनिश्चित गर्नुस कि यो परिवर्तन पृष्ठ इतिहासमा निरन्तरता प्रदान गर्न सकोस।",
-       "mergehistory-box": "दà¥\81à¤\88 à¤ªà¥\83षà¥\8dठहरà¥\81को पुनरावलोकन जोड्नुहोस् :",
+       "mergehistory-box": "दà¥\81à¤\88 à¤ªà¥\83षà¥\8dठहरà¥\82को पुनरावलोकन जोड्नुहोस् :",
        "mergehistory-from": "स्रोत पृष्ठ:",
        "mergehistory-into": "गन्तब्य पृष्ठ :",
        "mergehistory-list": "जोड्न मिल्ने इतिहास सम्पादन",
        "mergehistory-merge": "[[:$1]]को निम्न अवतरण [[:$2]]मा समाविष्ट गर्न सकिनेछ।\nदिइएको समय वा त्यस भन्दा पहिले भएको अवतरणहरूलाई एकत्रित गर्नका लागि  रेडियो बटनको प्रयोग गर्नुहोस।\nन्याभिगेसन लिङ्कहरूको प्रयोग पछी यो कलम आफ्नो पुरानै स्थितिमा आउनेछ।",
-       "mergehistory-go": "à¤\9cà¥\8bडà¥\8dन à¤®à¤¿à¤²à¥\8dनà¥\87 à¤¸à¤®à¥\8dपादनहरà¥\81",
+       "mergehistory-go": "à¤\9cà¥\8bडà¥\8dन à¤®à¤¿à¤²à¥\8dनà¥\87 à¤¸à¤®à¥\8dपादनहरà¥\82",
        "mergehistory-submit": "पुनरावलोकहरु जोड्नुहोस्",
        "mergehistory-empty": "कुनै पनि पुनरावलोकनहरु जोड्न मिल्दैन ।",
-       "mergehistory-success": "$3 {{PLURAL:$3|सà¤\82सà¥\8dà¤\95रण|सà¤\82सà¥\8dà¤\95रणहरà¥\81}}  [[:$1]]बाट सफलतापूर्वक [[:$2]]मा थपियो ।",
+       "mergehistory-success": "$3 {{PLURAL:$3|सà¤\82सà¥\8dà¤\95रण|सà¤\82सà¥\8dà¤\95रणहरà¥\82}}  [[:$1]]बाट सफलतापूर्वक [[:$2]]मा थपियो ।",
        "mergehistory-fail": "इतिहास जोड्न सकिएन कृपया पृष्ठको नाम र समयमान जाँच गर्नुहोस्।",
        "mergehistory-fail-toobig": "इतिहास समाहित गर्न सम्भव छैन किनभने अवतरण सिमा $1 भन्दा बढी {{PLURAL:$1|अवतरण|अवतरणहरू}} लाई स्थानान्तरित गर्नु पर्छ।",
        "mergehistory-no-source": "स्रोत पृष्ठ $1 अस्तित्वमा छैन ।",
        "diff-empty": "(कुनै भिन्नता छैन)",
        "diff-multi-sameuser": "(यस प्रयोगकर्ताद्वारा {{PLURAL:$1|गरिएको बीचको एउटा अवतरण देखाइएन|गरिएको बीचको $1 अवतरण देखाइएन}})",
        "diff-multi-otherusers": "({{PLURAL:$2|एक अन्य प्रयोगकर्ता|$2 प्रयोगकर्ताहरू}} द्वारा {{PLURAL:$1|गरिएको बीचको एक अवतरण देखाइएन|गरिएको बीचको $1 अवतरण देखाइएन}})",
-       "diff-multi-manyusers": "($2 {{PLURAL:$2|भनà¥\8dदा à¤\85धिà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|भनà¥\8dदा à¤\85धिà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81}}दà¥\8dवारा {{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤®à¤§à¥\8dयवरà¥\8dतà¥\80 à¤¸à¤\82शà¥\8bधन|$1 à¤®à¤§à¥\8dयवरà¥\8dतà¥\80 à¤¸à¤\82शà¥\8bधनहरà¥\81}} नदेखाइएको)",
+       "diff-multi-manyusers": "($2 {{PLURAL:$2|भनà¥\8dदा à¤\85धिà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|भनà¥\8dदा à¤\85धिà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82}}दà¥\8dवारा {{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤®à¤§à¥\8dयवरà¥\8dतà¥\80 à¤¸à¤\82शà¥\8bधन|$1 à¤®à¤§à¥\8dयवरà¥\8dतà¥\80 à¤¸à¤\82शà¥\8bधनहरà¥\82}} नदेखाइएको)",
        "difference-missing-revision": "यस अन्तर {{PLURAL:$2|को एक अवतरण|को $2 अवतरण}} ($1)  {{PLURAL:$2|भेटिएन|खोज्न सकिएन}}।\n\nयो सामान्य रूपमा एउटा हताइएको पृष्ठको अवतरणहरूमा अन्तर खोज्दा हुन्छ । अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाइएको लग]मा हेर्न सकिन्छ।",
        "searchresults": "खोज नतिजाहरू",
        "searchresults-title": " \"$1\"को लागि खोज नतिजाहरु",
        "searchprofile-everything": "सब थोक",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मा खोज्ने",
-       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\81 खोज्ने",
+       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\82 खोज्ने",
        "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत )",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
-       "search-result-size": "$1 ({{PLURAL:$2|1 à¤¶à¤µà¥\8dद|$2 à¤¶à¤µà¥\8dदहरà¥\81}})",
-       "search-result-category-size": "{{PLURAL:$1|à¤\8fà¤\95 à¤¸à¤¦à¤¸à¥\8dय|$1 à¤¸à¤¦à¤¸à¥\8dयहरà¥\81}} ({{PLURAL:$2|1 à¤\89पशà¥\8dरà¥\87णà¥\80|$2  à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81}}, {{PLURAL:$3|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$3 à¤«à¤¾à¤\87लहरà¥\81}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 à¤¶à¤¬à¥\8dद|$2 à¤¶à¤¬à¥\8dदहरà¥\82}})",
+       "search-result-category-size": "{{PLURAL:$1|à¤\8fà¤\95 à¤¸à¤¦à¤¸à¥\8dय|$1 à¤¸à¤¦à¤¸à¥\8dयहरà¥\82}} ({{PLURAL:$2|1 à¤\89पशà¥\8dरà¥\87णà¥\80|$2  à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82}}, {{PLURAL:$3|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$3 à¤«à¤¾à¤\87लहरà¥\82}})",
        "search-redirect": "(जाने $1)",
        "search-section": "(खण्ड $1)",
        "search-category": "(श्रेणी $1)",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> मा बाट <strong>$1</strong> परिणाम|<strong>$3</strong> मा बाट परिणाम <strong>$1 - $2</strong>}}",
        "search-nonefound": "तपाईँको क्वेरीसँग मेल खाने नतिजाहरू भेटिएनन्",
        "powersearch-legend": "उन्नत खोज",
-       "powersearch-ns": "नà¥\87मसà¥\8dपà¥\87सà¥\87à¤\9cहरà¥\81मा खोज्ने :",
+       "powersearch-ns": "नà¥\87मसà¥\8dपà¥\87सà¥\87à¤\9cहरà¥\82मा खोज्ने :",
        "powersearch-togglelabel": "जाँच्ने :",
        "powersearch-toggleall": "सबै",
        "powersearch-togglenone": "कुनै पनि होइन",
        "searchdisabled": "{{SITENAME}} खोज निस्क्रिय पारिएको छ ।\nहाललाई तपाईले गूगलद्वारा खोज्न सक्नुहुन्छ ।\nयाद गर्नुहोस् उनीहरुको {{SITENAME}}को सूची सामग्री पुरानो भएको हुनसक्छ ।",
        "search-error": "खोज्ने क्रममा समस्या देखियोः $1",
        "preferences": "रोजाइहरू",
-       "mypreferences": "पà¥\8dराथमिà¤\95ताहरà¥\81",
+       "mypreferences": "पà¥\8dराथमिà¤\95ताहरà¥\82",
        "prefs-edits": "सम्पादन संख्या:",
        "prefsnologintext2": "आफ्नो अभिरूचीहरू परिवर्तन गर्नका लागि प्रवेश गर्नुहोस।",
        "prefs-skin": "काँचुली",
        "prefs-editwatchlist-edit": "आफ्नो अवलोकनसूचीमा रहेको शीर्षकलाई देखाउने तथा हटाउने",
        "prefs-editwatchlist-raw": "कच्चा अवलोकनसूची सम्पादन गर्ने",
        "prefs-editwatchlist-clear": "तपाईंको अवलोकनसूची मेट्नुहोस",
-       "prefs-watchlist-days": "निà¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤¦à¥\87à¤\96ाà¤\89न à¤¦à¤¿à¤¨à¤¹à¤°à¥\81:",
+       "prefs-watchlist-days": "निà¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤¦à¥\87à¤\96ाà¤\89न à¤¦à¤¿à¤¨à¤¹à¤°à¥\82:",
        "prefs-watchlist-days-max": "धेरैमा $1 {{PLURAL:$1|दिन|दिन}}",
        "prefs-watchlist-edits": "उच्चतम परिवर्तन संख्या बढाइएको निगरानी सूचीमा  देखाउनको लागि :",
        "prefs-watchlist-edits-max": "उच्चतम संख्या : १०००",
        "searchresultshead": "खोज",
        "stub-threshold": "<a href=\"#\" class=\"stub\">ठूटो</a> को लागि थ्रेसहोल्ड स्वरूपण (बाइट):",
        "stub-threshold-disabled": "निष्क्रिय",
-       "recentchangesdays": "हालà¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमा à¤¦à¥\87à¤\96ाà¤\89नà¥\87 à¤¦à¤¿à¤¨à¤¹à¤°à¥\81:",
+       "recentchangesdays": "हालà¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमा à¤¦à¥\87à¤\96ाà¤\89नà¥\87 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82:",
        "recentchangesdays-max": "अधिकतम $1 {{PLURAL:$1|दिन|दिन}}",
        "recentchangescount": "पूर्व निर्धारितरुपमा देखाउनुपर्ने सम्पादनहरू :",
        "prefs-help-recentchangescount": "यसमा हालका परि्वर्तनहरु , पृष्ठ इतिहासहरु , र लग समाविष्ठ छन् ।",
        "prefs-searchoptions": "खोज्ने",
        "prefs-namespaces": "नेमस्पेसेज",
        "default": "पूर्वनिर्धारित",
-       "prefs-files": "फाà¤\87लहरà¥\81",
+       "prefs-files": "फाà¤\87लहरà¥\82",
        "prefs-custom-css": "अनुकुलित CSS",
        "prefs-custom-js": "अनुकुलित JS",
        "prefs-common-css-js": "साझा CSS/जाभा स्क्रिप्ट सबै त्वचा(स्किन)को लागि:",
        "userrights-conflict": "प्रयोगकर्ताको अधिकार परिवर्तनमा मतभेद भयो ! कृपया तपाईको परिवर्तन पुनरावलोकन तथा पुष्टि गर्नु होस् ।",
        "userrights-removed-self": "तपाईले सफलतापूर्वक आफ्नो अधिकारहरूलाई मेटाउनु भयो । त्यस कारण तपाई अब यो पृष्ठ हेर्न सक्नु हुने छैन् ।",
        "group": "समूह :",
-       "group-user": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81",
-       "group-autoconfirmed": "सà¥\8dवत à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤\97रिà¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81",
+       "group-user": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
+       "group-autoconfirmed": "सà¥\8dवत à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤\97रिà¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
        "group-bot": "बोटहरू",
        "group-sysop": "प्रवन्धकहरू",
        "group-bureaucrat": "प्रशासकहरू",
        "right-createaccount": "नयाँ प्रयोगकर्ता खाता सृजना गर्नुहोस्।",
        "right-minoredit": "सम्पादनलाई सामान्य चिनो लगाउने",
        "right-move": "पृष्ठहरू सार्ने",
-       "right-move-subpages": "तिनà¥\80हरà¥\81à¤\95à¥\8b à¤¸à¤¹-पà¥\83षà¥\8dठसहित à¤ªà¥\83षà¥\8dठहरà¥\81 सार्ने",
-       "right-move-rootuserpages": "मà¥\82ल(root) à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\81 सार्ने",
+       "right-move-subpages": "तिनà¥\80हरà¥\82à¤\95à¥\8b à¤¸à¤¹-पà¥\83षà¥\8dठसहित à¤ªà¥\83षà¥\8dठहरà¥\82 सार्ने",
+       "right-move-rootuserpages": "मà¥\82ल(root) à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\82 सार्ने",
        "right-move-categorypages": "श्रेणी पृष्ठ सार्नुहोस",
-       "right-movefile": "फाà¤\87लहरà¥\81 सार्ने",
+       "right-movefile": "फाà¤\87लहरà¥\82 सार्ने",
        "right-suppressredirect": "पृष्ठ सार्दा स्रोत पृष्ठबाट पठाउने लिंक नबनाउने",
-       "right-upload": "फाà¤\87लहरà¥\81 उर्ध्वभरण गर्ने",
+       "right-upload": "फाà¤\87लहरà¥\82 उर्ध्वभरण गर्ने",
        "right-reupload": "रहेका फाइललाई अधिलेखन गर्ने",
        "right-reupload-own": "आफैले अपलोड  गर्नुभएको रहिआएको फाइल अधिलेखन गर्ने",
-       "right-reupload-shared": "साà¤\9dा à¤®à¤¿à¤¡à¤¿à¤¯à¤¾ à¤­à¤£à¥\8dडारमा à¤¸à¥\8dथानियरà¥\81पमा à¤«à¤¾à¤\87लहरà¥\81 अधिक्रमण गर्ने",
+       "right-reupload-shared": "साà¤\9dा à¤®à¤¿à¤¡à¤¿à¤¯à¤¾ à¤­à¤£à¥\8dडारमा à¤¸à¥\8dथानियरà¥\81पमा à¤«à¤¾à¤\87लहरà¥\82 अधिक्रमण गर्ने",
        "right-upload_by_url": "URL बाट फाइल उर्ध्वभरण गर्ने",
        "right-purge": "साइटको क्याश( cache) निश्चित नगरिकनै पर्ज(Purge) गर्ने",
        "right-autoconfirmed": "आइपी दर सीमाले असर नपार्ने",
        "right-apihighlimits": "API खोजको लागि उच्च सीमा प्रयोग गर्नुहोस्",
        "right-writeapi": "लेखन API प्रयोग गर्ने",
        "right-delete": "पृष्ठहरू मेट्ने",
-       "right-bigdelete": "लामो इतिहासहरु भएको पृष्ठहरु मेट्ने",
+       "right-bigdelete": "लामो इतिहास भएको पृष्ठहरू मेट्ने",
        "right-deletelogentry": "विशेष लग प्रविष्टी मेटाउने तथा पुनःल्याउने",
-       "right-deleterevision": "à¤\96à¥\81लाà¤\87à¤\8fà¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\81 मेटाउने र मेटाएको रद्द गर्ने",
+       "right-deleterevision": "à¤\96à¥\81लाà¤\87à¤\8fà¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\82 मेटाउने र मेटाएको रद्द गर्ने",
        "right-deletedhistory": "मेटाइएको इतिहास प्रविष्टीहरु हेर्ने, तिनीहरुसँग सम्बद्ध पाठ बिना",
-       "right-deletedtext": "मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤¸à¤\82शà¥\8bधन à¤¬à¥\80à¤\9aà¤\95ा à¤®à¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤ªà¤¾à¤  à¤° à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 हेर्ने",
+       "right-deletedtext": "मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤¸à¤\82शà¥\8bधन à¤¬à¥\80à¤\9aà¤\95ा à¤®à¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤ªà¤¾à¤  à¤° à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 हेर्ने",
        "right-browsearchive": "मेटिएका पृष्ठहरू खोज्ने",
        "right-undelete": "मेटेको पृष्ठ फिर्तागर्ने",
        "right-suppressrevision": "कुनै पनि प्रयोगकर्ताबाट भएको विशेष पृष्ठ संशोधनलाई‍ देखाउने, लुकाउने तथा पुनः देखाउने",
        "right-viewsuppressed": "कुनै प्रयोगकर्ताबाट लुकाइएका संशोधनलाई देखाउनु होस्",
-       "right-suppressionlog": "वà¥\8dयà¤\95à¥\8dतिà¤\97त à¤²à¤\97हरà¥\81 हेर्ने",
-       "right-block": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाà¤\88 à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनबाà¤\9f à¤°à¥\8bà¤\95à¥\8dनà¥\81हà¥\8bस",
+       "right-suppressionlog": "वà¥\8dयà¤\95à¥\8dतिà¤\97त à¤²à¤\97हरà¥\82 हेर्ने",
+       "right-block": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाà¤\88 à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनबाà¤\9f à¤°à¥\8bà¤\95à¥\8dनà¥\81हà¥\8bसà¥\8d",
        "right-blockemail": "एक प्रयोगकर्तालाई इमेल पठाउनबाट रोक्ने",
        "right-hideuser": "एक प्रयोगकर्ता नाम रोक्ने, सार्वजनिकहुनबाट लुकाउने",
        "right-ipblock-exempt": "IP रोक,स्वत: रोक तथा स्तर रोक कटेर जाने",
        "right-proxyunbannable": "प्रोक्सिको स्वत: रोक कटेर जाने",
        "right-unblockself": "आफैंलाई खुल्ला गर्नुहोस्",
        "right-protect": "सुरक्षास्तरहरू परिवर्तन गर्ने र क्यासकेड-सुरक्षित पृष्ठहरूलाई सम्पादन गर्ने",
-       "right-editprotected": "\"{{int:protect-level-sysop}}\" à¤\95à¥\8b à¤¹à¥\88सियतलà¥\87 à¤¸à¥\81रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\81 सम्पादन गर्ने",
+       "right-editprotected": "\"{{int:protect-level-sysop}}\" à¤\95à¥\8b à¤¹à¥\88सियतलà¥\87 à¤¸à¥\81रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\82 सम्पादन गर्ने",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" अनुरूप सुरक्षित गरिएको पृष्ठहरूलाई सम्पादन गर्नुहोस्",
        "right-editcontentmodel": "पृष्ठको सामग्री नमुना सम्पादन",
        "right-editinterface": "प्रयोगकर्ता अन्तरमोहडा सम्पादन गर्ने",
-       "right-editusercssjs": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤° JS à¤«à¤¾à¤\87लहरà¥\81 सम्पादन गर्ने",
-       "right-editusercss": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤«à¤¾à¤\87लहरà¥\81 सम्पादन गर्ने",
-       "right-edituserjs": "पà¥\8dरयà¥\8bà¤\95रà¥\8dताà¤\95à¥\8b  JS à¤«à¤¾à¤\87लहरà¥\81 à¤¸à¤®à¥\8dपादनगर्ने",
+       "right-editusercssjs": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤° JS à¤«à¤¾à¤\87लहरà¥\82 सम्पादन गर्ने",
+       "right-editusercss": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤«à¤¾à¤\87लहरà¥\82 सम्पादन गर्ने",
+       "right-edituserjs": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\95रà¥\8dताà¤\95à¥\8b à¤\9cाभासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤«à¤¾à¤\87लहरà¥\82 à¤¸à¤®à¥\8dपादन गर्ने",
        "right-editmyusercss": "तपाईँको आफ्नो CSS फाइलहरू सम्पादन गर्नुहोस्",
        "right-editmyuserjs": "तपाईँको आफ्नो जाभा स्क्रिप्ट फाइलहरू सम्पादन गर्ने",
        "right-viewmywatchlist": "तपाईँको निगरानी सुची हेर्नुहोस्",
        "right-viewmyprivateinfo": "आफ्नो व्यक्तिगत डेटा हेर्नुहोस (उदाहरण इमेल ठेगाना, सहि नाम)",
        "right-editmyprivateinfo": "आफ्नो निजी जानकारी (जस्तैः इमेल ठेगाना, बास्तविक नाम) सम्पादन गर्नुहोस्",
        "right-editmyoptions": "तपाईँका अभिरुचीहरू सम्पादन गर्नुहोस्",
-       "right-rollback": "पà¤\9bिलà¥\8dलà¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤¸à¤®à¥\8dपादनहरà¥\81à¤\95à¥\8b छरितो रुपमा पछाडि पर्काउने",
-       "right-markbotedits": "पà¤\9bाडि à¤«à¤°à¥\8dà¤\95ाà¤\89नà¥\87 à¤¸à¤®à¥\8dपादनहरà¥\81लाई बोट सम्पादनकारुपमा चिनो लगाउने",
+       "right-rollback": "पà¤\9bिलà¥\8dलà¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤¸à¤®à¥\8dपादनहरà¥\82लाà¤\88 छरितो रुपमा पछाडि पर्काउने",
+       "right-markbotedits": "पà¤\9bाडि à¤«à¤°à¥\8dà¤\95ाà¤\89नà¥\87 à¤¸à¤®à¥\8dपादनहरà¥\82लाई बोट सम्पादनकारुपमा चिनो लगाउने",
        "right-noratelimit": "दर सीमाले  असर नपार्ने",
-       "right-import": "à¤\85रà¥\81 à¤µà¤¿à¤\95िबाà¤\9f à¤ªà¥\83षà¥\8dठहरà¥\81 आयात गर्ने",
+       "right-import": "à¤\85रà¥\81 à¤µà¤¿à¤\95िबाà¤\9f à¤ªà¥\83षà¥\8dठहरà¥\82 आयात गर्ने",
        "right-importupload": "फाइल अपलोडबाट पृष्ठ आयात गर्ने",
-       "right-patrol": "à¤\85रà¥\81à¤\95à¥\8b à¤¸à¤®à¥\8dपादनहरà¥\81लाई पट्रोल(गस्ती) गरिएको रुपमा चिनो लगाउने",
-       "right-autopatrol": "à¤\86फà¥\8dनà¥\8b à¤¸à¤®à¥\8dपादनहरà¥\81 à¤ªà¤\9fà¥\8dरà¥\8bल(गस्ती) गरिएको रुपमा सम्पादन गर्ने",
+       "right-patrol": "à¤\85रà¥\81à¤\95à¥\8b à¤¸à¤®à¥\8dपादनहरà¥\82लाई पट्रोल(गस्ती) गरिएको रुपमा चिनो लगाउने",
+       "right-autopatrol": "à¤\86फà¥\8dनà¥\8b à¤¸à¤®à¥\8dपादनहरà¥\82 à¤ªà¤\9fà¥\8dरà¥\8bल (गस्ती) गरिएको रुपमा सम्पादन गर्ने",
        "right-patrolmarks": "हालका सम्पादन पट्रोल(गस्ती) चिनो लगाउने",
-       "right-unwatchedpages": "निà¤\97रानà¥\80 à¤¨à¤\97रिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81à¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80हेर्ने",
+       "right-unwatchedpages": "निà¤\97रानà¥\80 à¤¨à¤\97रिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82à¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80 हेर्ने",
        "right-mergehistory": "पृष्ठका इतिहासहरु बुझाउने",
        "right-userrights": "प्रयोगकर्ताका अधिकारहरु सम्पादन गर्ने",
-       "right-userrights-interwiki": "à¤\85रà¥\81 à¤µà¤¿à¤\95िहरà¥\81मा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81को अधिकार सम्पादन गर्ने",
+       "right-userrights-interwiki": "à¤\85रà¥\81 à¤µà¤¿à¤\95िहरà¥\82मा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82को अधिकार सम्पादन गर्ने",
        "right-siteadmin": "डेटाबेसको ताल्चामार्ने र ताल्चाखोल्ने",
-       "right-override-export-depth": "à¤\97हिराà¤\87 à¥« à¤¸à¤®à¥\8dमà¤\95à¥\8b à¤²à¤¿à¤\82à¤\95 à¤\97रिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 सहित निर्यात गर्ने",
-       "right-sendemail": "à¤\85नà¥\8dय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाà¤\88 à¤\87मà¥\87ल à¤\97रà¥\8dने",
+       "right-override-export-depth": "à¤\97हिराà¤\87 à¥« à¤¸à¤®à¥\8dमà¤\95à¥\8b à¤²à¤¿à¤\82à¤\95 à¤\97रिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 सहित निर्यात गर्ने",
+       "right-sendemail": "à¤\85नà¥\8dय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाà¤\88 à¤\87मà¥\87ल à¤ªà¤ à¤¾à¤\89ने",
        "right-passwordreset": "पासवर्ड परिवर्तन गर्ने ईमेलहरु हेर्नुहोस",
        "right-managechangetags": "डाटाबेसबाट [[Special:Tags|tags]] बनाउने र हटाउने",
        "right-applychangetags": "एकको परिवर्तन सहित [[Special:Tags|tags]] लागु गर्ने",
        "action-history": "यस पृष्ठको इतिहास हेर्ने",
        "action-minoredit": "यस सम्पादनलाई साधारणको रुपमा चिनो लगाउने",
        "action-move": "यो पृष्ठलाई सर्ने",
-       "action-move-subpages": "यà¥\8b à¤ªà¥\83षà¥\8dठ à¤° à¤¯à¤¸à¤\95ा à¤¸à¤¹ à¤ªà¥\83षà¥\8dठहरà¥\81लाà¤\88 à¤¸र्ने",
+       "action-move-subpages": "यà¥\8b à¤ªà¥\83षà¥\8dठ à¤° à¤¯à¤¸à¤\95ा à¤¸à¤¹ à¤ªà¥\83षà¥\8dठहरà¥\82लाà¤\88 à¤¸à¤¾र्ने",
        "action-move-rootuserpages": "मूल प्रयोगकर्ता पृष्ठहरू सार्ने",
        "action-move-categorypages": "श्रेणी पृष्ठ सार्ने",
        "action-movefile": "यो फाइल सार्ने",
        "action-importupload": "पृष्ठहरू फाइल उर्ध्वभरणबाट आयात गर्ने",
        "action-patrol": "अरुको सम्पादनलाई निगरानीको चिन्ह लगाउने",
        "action-autopatrol": "तपाईंको सम्पादनलाई गश्त रुपमा दाग दिनुहोस्",
-       "action-unwatchedpages": "à¤\85वलà¥\8bà¤\95न à¤¨à¤\97रिà¤\8fà¤\95ा  à¤ªà¥\83षà¥\8dठहरà¥\81को सूची हेर्ने",
+       "action-unwatchedpages": "à¤\85वलà¥\8bà¤\95न à¤¨à¤\97रिà¤\8fà¤\95ा  à¤ªà¥\83षà¥\8dठहरà¥\82को सूची हेर्ने",
        "action-mergehistory": "यस पृष्ठको इतिहासलाई मिसाउने",
        "action-userrights": "सबै प्रयोगकर्ताका अधिकारहरु सम्पादन गर्ने",
-       "action-userrights-interwiki": "à¤\85रà¥\81 à¤µà¤¿à¤\95िà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81को प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
+       "action-userrights-interwiki": "à¤\85रà¥\81 à¤µà¤¿à¤\95िà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82को प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
        "action-siteadmin": "डेटाबेस बन्दगर्ने वा खोल्ने",
        "action-sendemail": "इमेलहरु पठाउने",
        "action-editmywatchlist": "तपाईँको निगरानी सुची सम्पादन गर्नुहोस",
        "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म गस्ती गरिएको छैन",
        "recentchanges-label-plusminus": "यति बाइटहरू संख्याले पृष्ठको आकार परिवर्तन भएको छ",
        "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] यो पनि हेर्नुहोस्)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाँ पृष्ठहरूको सूची]] यो पनि हेर्नुहोस्)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "rcnotefrom": "तल <strong>$2</strong> देखि (<strong>$1</strong> सम्म) {{PLURAL:$5|भएका परिवर्तनहरू देखाइएको छ|भएका परिवर्तनहरू देखाइन्छ}}।",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउनु",
        "rcshowhidebots": "$1 बोटहरू",
        "rcshowhidebots-show": "देखाउनुहोस्",
        "rcshowhidebots-hide": "लुकाउनुहोस्",
-       "rcshowhideliu": "$1 à¤¦à¤°à¥\8dता à¤\97रà¥\87à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81",
+       "rcshowhideliu": "$1 à¤¦à¤°à¥\8dता à¤\97रà¥\87à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
        "rcshowhideliu-show": "देखाउनुहोस्",
        "rcshowhideliu-hide": "लुकाउनुहोस्",
        "rcshowhideanons": "$1 अज्ञात प्रयोगकर्ता",
        "rcshowhideanons-show": "देखाउनुहोस्",
        "rcshowhideanons-hide": "लुकाउनुहोस्",
-       "rcshowhidepatr": "$1 à¤ªà¤\9fà¥\8dरà¥\8bल à¤\97रिà¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81",
+       "rcshowhidepatr": "$1 à¤ªà¤\9fà¥\8dरà¥\8bल à¤\97रिà¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82",
        "rcshowhidepatr-show": "देखाउनुहोस्",
        "rcshowhidepatr-hide": "लुकाउनुहोस्",
-       "rcshowhidemine": "$1 à¤®à¥\87रा à¤¸à¤®à¥\8dपादनहरà¥\81",
+       "rcshowhidemine": "$1 à¤®à¥\87रा à¤¸à¤®à¥\8dपादनहरà¥\82",
        "rcshowhidemine-show": "देखाउनुहोस्",
        "rcshowhidemine-hide": "लुकाउनुहोस्",
-       "rclinks": "पà¤\9bिलà¥\8dला $1 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 à¤ªà¤\9bिलà¥\8dला $2 à¤¦à¤¿à¤¨à¤¹à¤°à¥\81मा<br />$3",
+       "rclinks": "पà¤\9bिलà¥\8dला $1 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 à¤ªà¤\9bिलà¥\8dला $2 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82मा<br />$3",
        "diff": "भिन्न",
        "hist": "इतिहास",
        "hide": "लुकाउनुहोस्",
        "boteditletter": "बो",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 निगरानी गर्दै{{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ताहरु}}]",
-       "rc_categories": "शà¥\8dरà¥\87णà¥\80हरà¥\81मा सीमित (\"|\" ले छुट्याउनुहोस्)",
+       "rc_categories": "शà¥\8dरà¥\87णà¥\80हरà¥\82मा सीमित (\"|\" ले छुट्याउनुहोस्)",
        "rc_categories_any": "कुनै",
        "rc-change-size": "$1",
        "rc-change-size-new": "परिवर्तनपछि $1 {{PLURAL:$1|बाइट|बाइट}}",
        "recentchangeslinked-feed": "सम्बन्धित परिवर्तनहरू",
        "recentchangeslinked-toolbox": "सम्बन्धित परिवर्तनहरू",
        "recentchangeslinked-title": "\"$1\" सँग सम्बन्धित परिवर्तन",
-       "recentchangeslinked-summary": "यà¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ (वा à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤¶à¥\8dरà¥\87णà¥\80)सित à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤­à¤°à¥\8dà¤\96रà¥\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठà¤\95à¥\8b  à¤¹à¥\8b। [[Special:Watchlist|तपाà¤\88à¤\81à¤\95à¥\8b à¤§à¥\8dयानसà¥\82à¤\9aà¥\80]]à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 <strong>गाढा अक्षरमा</strong> छन्।",
+       "recentchangeslinked-summary": "यà¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ (वा à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤¶à¥\8dरà¥\87णà¥\80)सित à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤­à¤°à¥\8dà¤\96रà¥\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठà¤\95à¥\8b  à¤¹à¥\8b। [[Special:Watchlist|तपाà¤\88à¤\81à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80]]à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 <strong>गाढा अक्षरमा</strong> छन्।",
        "recentchangeslinked-page": "पृष्ठ नाम:",
-       "recentchangeslinked-to": "यसà¤\95à¥\8b à¤¸à¤\9fà¥\8dà¤\9fा à¤¯à¥\8b à¤ªà¥\83षà¥\8dठसà¤\81à¤\97 à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81को परिवर्तन देखाउने",
+       "recentchangeslinked-to": "यसà¤\95à¥\8b à¤¸à¤\9fà¥\8dà¤\9fा à¤¯à¥\8b à¤ªà¥\83षà¥\8dठसà¤\81à¤\97 à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82को परिवर्तन देखाउने",
        "upload": "फाइल उर्ध्वभरण",
-       "uploadbtn": "फाà¤\87लहरà¥\81 उर्ध्वभरण गर्ने",
+       "uploadbtn": "फाà¤\87लहरà¥\82 उर्ध्वभरण गर्ने",
        "reuploaddesc": "उर्ध्वभरण रद्द गर्ने र उर्ध्वभरण फारमतिर जाने",
        "upload-tryagain": "संशोधित फाइल विवरण बुझाउने",
        "uploadnologin": "प्रवेश (लग ईन) नगरिएको",
        "upload_directory_missing": "उर्ध्वभरण डाइरेक्टरी ($1) हराइरहेको छ र वेवसर्भरले नयाँ डाइरेक्टरी निर्माणगर्न असमर्थ भयो ।",
        "upload_directory_read_only": "उर्ध्व भरण डाइरेक्टरी ($1) वेवसर्भर द्वारा लेख्य छैन ।",
        "uploaderror": "उर्ध्वभरण त्रुटि",
-       "upload-recreate-warning": "'''à¤\9aà¥\87तावनà¥\80: à¤¤à¥\8dयस à¤¨à¤¾à¤®à¤®à¤¾ à¤°à¤¹à¥\87à¤\95ा à¤«à¤¾à¤\87लहरà¥\81 à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤¯à¤¾ à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤\9b।'''\n\nयस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤° à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤²à¤\97 à¤¤à¤ªà¤¾à¤\88को सहजताको लागि दिइएको छ।",
+       "upload-recreate-warning": "'''à¤\9aà¥\87तावनà¥\80: à¤¤à¥\8dयस à¤¨à¤¾à¤®à¤®à¤¾ à¤°à¤¹à¥\87à¤\95ा à¤«à¤¾à¤\87लहरà¥\82 à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤¯à¤¾ à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤\9b।'''\n\nयस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤° à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤²à¤\97 à¤¤à¤ªà¤¾à¤\88à¤\82को सहजताको लागि दिइएको छ।",
        "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|alt text]]</nowiki></code>''' 200 पिक्सलको देब्रेपट्टि मार्जिन गरेर फाइलको बर्णनसहित प्रयोग गर्न\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' फाइल नदेखाई सिंधै फाइलसित लिङ्क गरी प्रयोग गर्न",
        "upload-permitted": "अनुमति पाएका फाइल {{PLURAL:$2|प्रकार|प्रकारहरू}}:$1।",
        "upload-preferred": "चाहिएका पाएका फाइल {{PLURAL:$2|प्रकार|प्रकारहरू}}:$1।",
        "unknown-error": "एउटा अज्ञात त्रुटि भयो।",
        "tmp-create-error": "अस्थायी फाइल सृजना गर्न सकिएन।",
        "tmp-write-error": "अस्थायी फाइल लेख्दै गर्दा त्रुटि।",
-       "large-file": "यà¥\8b à¤¸à¤¿à¤«à¤¾à¤°à¤¿à¤¸ à¤\97रिनà¥\8dà¤\9b à¤\95ि à¤«à¤¾à¤\87लहरà¥\81  $1 भन्दा ठूला हुनु हुँदैन;\nयो फाइल $2 छ।",
+       "large-file": "यà¥\8b à¤¸à¤¿à¤«à¤¾à¤°à¤¿à¤¸ à¤\97रिनà¥\8dà¤\9b à¤\95ि à¤«à¤¾à¤\87लहरà¥\82  $1 भन्दा ठूला हुनु हुँदैन;\nयो फाइल $2 छ।",
        "largefileserver": "उर्ध्वभरण गरिएको फाइल सर्भरमा निर्धारित सीमा भन्दा ठूलो छ।",
        "emptyfile": "तपाईले उर्ध्वभरण गर्नुभएको फाइल रित्तो छ।\nयो फाइलनाम गलत राखिएको कारणले भएको हुनसक्छ\nयो फाइल साच्चै उर्ध्वभरण गर्नेकुरामा निश्चित हुनुहोस् ।",
        "windows-nonascii-filename": "विशेष वर्ण सहितका फाइलनामहरु यस विकिद्वारा समर्थित छैनन् ।",
-       "fileexists": "यो नामको फाइल पहिले नैं छ, यदि तपाईं परिवर्तन गर्ने कुरामा सुनिश्चित हुनुहुन्न भने कृपया <strong>[[:$1]]</strong> जाँच गर्नुहोस्।\n[[$1|thumb]]",
+       "fileexists": "यो नामको फाइल पहिले नैं छ, यदि तपाईं परिवर्तन गर्ने कुरामा सुनिश्चित हुनुहुन्न भने कृपया <strong>[[:$1]]</strong> जाँच गर्नुहोस्।\n[[$1|thumb]]",
        "filepageexists": "यस फाइलको लागि विवरण पृष्ठ पहिले नै <strong>[[:$1]]</strong> बनाइ सकिएको छ, तर यस नामको कुनै फाइल अहिले उपस्थित छैन। \nतपाईं जुन विवरण दिनुहुन्छ त्यो विवरण पृष्ठमा देखिंदैन। \nतपाईंको आफ्नो विवरणलाई त्यहाँ राख्न म्यानुअली सम्पादन गर्नु पर्नेछ।\n[[$1|thumb]]",
        "fileexists-extension": "यहि नामको एउटा फाइल पहिलेदेखि नैं छ: [[$2|thumb]]\n* उर्ध्वभरण हुँदै गरेको फाइलको नाम: <strong>[[:$1]]</strong>\n* पहिलेदेखि नैं भएको फाइलको नाम: <strong>[[:$2]]</strong>\nकृपया अर्कै नाम रोज्नुहोस्।",
        "fileexists-thumbnail-yes": "यो फाइल ठुलो चित्रको सानो आकार ''(थम्बनेल)'' जस्तो देखिन्छ। [[$1|thumb]]\n<strong>[[:$1]]</strong> फाइललाई हेर्ने।\nयदि जाँच गरिएको फाइल यसै आकारको छ भने सानो आकारको फाइल अपलोड गर्ने आवश्यकता छैन।",
        "upload-description": "फाइल वर्णन",
        "upload-options": "उर्ध्वभरण विकल्पहरु",
        "watchthisupload": "यो पृष्ठ निगरानी गर्नुहोस्",
-       "filewasdeleted": "यस नामको एक फाइल पहिले पनि अपलोड गरे पछि हटाई सकिएको छ।\nपुन अपलोड गर्नु पूर्व तपाईं $1 लाई राम्रो सँग जाँच गर्नुहोला।",
+       "filewasdeleted": "यस नामको एक फाइल पहिले पनि अपलोड गरे पछि हटाई सकिएको छ।\nपुनः अपलोड गर्नु पूर्व तपाईं $1 लाई राम्रोसँग जाँच गर्नुहोला।",
        "filename-bad-prefix": "तपाईं जुन फाइल अपलोड गर्दै हुनुहुन्छ त्यसको नाम <strong>\"$1\"</strong>बाट शुरू हुन्छ, जुन डिजिटल क्यामराद्वारा दिइएको नाम हो।\nकृपया यस फाइलको लागि कुनै दोश्रो अधिक जानकारीयुक्त नाम छान्नुहोस्।",
        "upload-success-subj": "उर्ध्वभरण सफल",
        "upload-success-msg": "[$2]बाट त्पाईंको उर्ध्वभरण सफल भयो। त्यो यहाँ पाउन सकिनेछ: [[:{{ns:file}}:$1]]",
        "uploadstash": "उर्ध्वभरण स्टाश",
        "uploadstash-summary": "यो पृष्ठ ती फाइलहरूलाई पहुँच प्रदान गर्छ जुन अपलोड गरिएको छ ‍‌‍‌(वा अपलोड प्रक्रियामा रहेको छ) तर विकिमा अहिले पनि प्रकासित गरिएको छैन। यो फाइलहरू अपलोड गरेको प्रयोगकर्ता वाहेक कसैको लागि पनि उपलब्ध छैन।",
        "uploadstash-clear": "स्टाश गरिएका फाइल हटाउने",
-       "uploadstash-nofiles": "तपाà¤\88à¤\95ा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤¸à¥\8dà¤\9fाश à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81 छैनन् ।",
+       "uploadstash-nofiles": "तपाà¤\88à¤\82à¤\95ा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤¸à¥\8dà¤\9fाश à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82 छैनन् ।",
        "uploadstash-badtoken": "दिइएको कार्य असफलभयो , तपाईको सम्पादन अधिकार समाप्त भयो । पुन: प्रयास गर्नुहोस् ।",
        "uploadstash-errclear": "फाइल हटाउने कार्य असफल भयो ।",
-       "uploadstash-refresh": "फाà¤\87लहरà¥\81à¤\95à¥\8b à¤¸à¥\81à¤\9aà¥\80 à¤¤à¤¾à¤\9cा à¤ªर्ने",
+       "uploadstash-refresh": "फाà¤\87लहरà¥\82à¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¤à¤¾à¤\9cा à¤\97र्ने",
        "invalid-chunk-offset": "अमान्य चंक अफसेट",
        "img-auth-accessdenied": "पहुँच अस्वीकार",
        "img-auth-nopathinfo": "PATH_INFO छैन। तपाईंको सर्भरले यो जानकारी पठाउन सेट गरिएको छैन। यो सिजिआइ-आधारित हुन् सक्छ र img_auth लाई स्वीकार गर्दैन। https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization हेर्नुहोस।",
        "upload_source_url": "(तपाईंद्वारा छानिएको फाइल एक मान्य, सार्वजनिक रूपले उपलब्ध युआरयलबाट)",
        "upload_source_file": "(तपाईँले आफ्नो कम्प्युटरबाट छानेको फाइल)",
        "listfiles-delete": "मेट्ने",
-       "listfiles-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\95ा à¤¸à¤¬à¥\88 à¤«à¤¾à¤\87लहरà¥\81 à¤¦à¥\87à¤\96ाà¤\89à¤\81à¤\9b।",
+       "listfiles-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\95ा à¤¸à¤¬à¥\88 à¤«à¤¾à¤\87लहरà¥\82 à¤¦à¥\87à¤\96ाà¤\89à¤\81à¤\9b ।",
        "listfiles_search_for": "मिडिया नामको लागि खोज्नुहोस:",
        "listfiles-userdoesnotexist": "प्रयोगकर्ता खाता \"$1\" दर्ता गरिएको छैन।",
        "imgfile": "फाइल",
        "listfiles_user": "प्रयोगकर्ता",
        "listfiles_size": "आकार",
        "listfiles_description": "वर्णन",
-       "listfiles_count": "सà¤\82सà¥\8dà¤\95रणहरà¥\81",
+       "listfiles_count": "सà¤\82सà¥\8dà¤\95रणहरà¥\82",
        "listfiles-show-all": "चित्रहरूको पुरानो संस्करण समावेश गर्ने",
        "listfiles-latestversion": "हालको संस्करण",
        "listfiles-latestversion-yes": "हो",
        "filehist-filesize": "फाइल आकार",
        "filehist-comment": "टिप्पणी",
        "imagelinks": "फाइलको प्रयोगहरु",
-       "linkstoimage": "यस à¤«à¤¾à¤\87लमा à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$1|पà¥\83षà¥\8dठ à¤\9cà¥\8bडिनà¥\8dà¤\9b|$1 à¤ªà¥\83षà¥\8dठहरà¥\81 à¤\9cà¥\8bडिनà¥\8dà¤\9bन}}:",
+       "linkstoimage": "यस à¤«à¤¾à¤\87लमा à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$1|पà¥\83षà¥\8dठ à¤\9cà¥\8bडिनà¥\8dà¤\9b|$1 à¤ªà¥\83षà¥\8dठहरà¥\82 à¤\9cà¥\8bडिनà¥\8dà¤\9bनà¥\8d}}:",
        "linkstoimage-more": "$1 भन्दा अधिक {{PLURAL:$1|पृष्ठ लिङ्क|पृष्ठ लिङ्कहरू}} यस फाइलसँग जोडिएको छ। \nनिम्नलिखित सूची फाइलसँग {{PLURAL:$1|पहिलो पृष्ठ लिङ्क|पहिलो $1 पृष्ठ लिङ्कहरू}} जोडिने देखाउँछ।\n[[Special:WhatLinksHere/$2|पूर्ण सूची]] पनि उपलब्ध छ।",
        "nolinkstoimage": "यो फाईलसंग लिंकभएको कुनै पृष्ठ छैन.",
        "morelinkstoimage": "हेर्नुहोस् [[Special:WhatLinksHere/$1|थप लिंकहरु]] यो फाइलको।",
        "filedelete-reason-otherlist": "अरु कारण",
        "filedelete-reason-dropdown": "*मेट्नुका सामान्य कारणहरु\n** कपी राइट उल्लघन\n** सारिएको फाइल",
        "filedelete-edit-reasonlist": "मेट्नका कारण संपादन गर्नुहोस्।",
-       "filedelete-maintenance": "रà¤\96रà¤\96ाव à¤\9aलिरहà¥\87à¤\95à¥\8b à¤¹à¥\81à¤\81दा à¤\85सà¥\8dथायà¥\80 à¤°à¥\81पमा à¤«à¤¾à¤\87लहरà¥\81 मेटाउने र मेटाइएकोलाई पुनर्बहाली गर्न निष्क्रिय गरिएकोछ।",
+       "filedelete-maintenance": "रà¤\96रà¤\96ाव à¤\9aलिरहà¥\87à¤\95à¥\8b à¤¹à¥\81à¤\81दा à¤\85सà¥\8dथायà¥\80 à¤°à¥\81पमा à¤«à¤¾à¤\87लहरà¥\82 मेटाउने र मेटाइएकोलाई पुनर्बहाली गर्न निष्क्रिय गरिएकोछ।",
        "filedelete-maintenance-title": "फाइल मेट्न सकिएन",
        "mimesearch": "MIME खोज",
-       "mimesearch-summary": "MIME-पà¥\8dरà¤\95ार à¤\85नà¥\81सार à¤«à¤¾à¤\87लहरà¥\81 खोज्न यस पृष्ठको प्रयोग गर्न सकिन्छ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
+       "mimesearch-summary": "MIME-पà¥\8dरà¤\95ार à¤\85नà¥\81सार à¤«à¤¾à¤\87लहरà¥\82 खोज्न यस पृष्ठको प्रयोग गर्न सकिन्छ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
        "mimetype": "MIME प्रकार:",
        "download": "डाउनलोड",
        "unwatchedpages": "ध्यान नदिइएका पृष्ठहरू",
        "randomincategory-nopages": "यस [[:Category:$1|$1]] श्रेणीमा कुनै पनि पृष्ठ छैन् ।",
        "randomincategory-category": "श्रेणी:",
        "randomincategory-legend": "श्रेणीमा अनियमित पृष्ठ",
+       "randomincategory-submit": "जाउ",
        "randomredirect": "कुनै एउटा अनुप्रेषितमा जाने",
        "randomredirect-nopages": "\"$1\" नामस्थानमा अनुप्रेषित छैन।",
        "statistics": "तथ्यांक",
-       "statistics-header-pages": "पà¥\83षà¥\8dठहरà¥\81को तथ्याङ्क",
-       "statistics-header-edits": "समà¥\8dपादनहरà¥\81को तथ्याङ्क",
+       "statistics-header-pages": "पà¥\83षà¥\8dठहरà¥\82को तथ्याङ्क",
+       "statistics-header-edits": "समà¥\8dपादनहरà¥\82को तथ्याङ्क",
        "statistics-header-users": "प्रयोगकर्ता तथ्याङ्कहरू",
        "statistics-header-hooks": "अन्य तथ्याङ्कहरु",
        "statistics-articles": "सामग्री पृष्ठहरू",
        "statistics-pages": "पृष्ठहरू",
        "statistics-pages-desc": "विकिका सबै पृष्ठहरू, वार्तापका पृष्ठहरूसमेत, रिडाइरेक्ट, इत्यादि ।",
-       "statistics-files": "à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81",
+       "statistics-files": "à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82",
        "statistics-edits": "{{SITENAME}} स्थापना भए देखिको पृष्ठ सम्पादन",
        "statistics-edits-average": "प्रतिपृष्ठ औसत सम्पादन",
-       "statistics-users": "दरà¥\8dताà¤\97रिà¤\8fà¤\95à¥\8b [[Special:ListUsers|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81]]",
-       "statistics-users-active": "सà¤\95à¥\83य à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81",
-       "statistics-users-active-desc": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 à¤\9cà¥\8b{{PLURAL:$1|बितà¥\87à¤\95à¥\8b à¤\8fà¤\95 à¤¦à¤¿à¤¨|बितà¥\87à¤\95ा $1 à¤¦à¤¿à¤¨à¤¹à¤°à¥\81}}दà¥\87à¤\96ि  à¤\9cà¥\8b सक्रिय छन्",
+       "statistics-users": "दरà¥\8dताà¤\97रिà¤\8fà¤\95ा [[Special:ListUsers|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82]]",
+       "statistics-users-active": "सà¤\95à¥\83य à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
+       "statistics-users-active-desc": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 à¤\9cà¥\8b{{PLURAL:$1|बितà¥\87à¤\95à¥\8b à¤\8fà¤\95 à¤¦à¤¿à¤¨|बितà¥\87à¤\95ा $1 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82}}दà¥\87à¤\96ि सक्रिय छन्",
        "pageswithprop": "पृष्ठ विवरण सहितको पृष्ठहरू",
        "pageswithprop-legend": "पृष्ठ विवरण सहितको पृष्ठहरू",
        "pageswithprop-text": "यस पृष्ठ पृष्ठ गुणको उपयोग गरिरहेको पृष्ठहरूलाई सूचीबद्ध गर्दछ।",
        "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पà¥\83षà¥\8dठमा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रिà¤\8fà¤\95à¥\8b|पà¥\83षà¥\8dठहरà¥\81मा प्रयोग गरिएका}}",
+       "ntransclusions": "$1 {{PLURAL:$1पà¥\83षà¥\8dठमा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रिà¤\8fà¤\95à¥\8b|पà¥\83षà¥\8dठहरà¥\82मा प्रयोग गरिएका}}",
        "specialpage-empty": "यो पृष्ठ खाली छ।",
        "lonelypages": "अनाथ पृष्ठहरू",
        "lonelypagestext": "निम्नलिखित पृष्ठ देखि न त कुनै {{SITENAME}}को अन्य पृष्ठ जोडिएको छ र न त कुनै अन्य पृष्ठ ट्रान्सक्ल्युडेड नै छ।",
        "uncategorizedpages": "श्रेणीकरण नभएका पृष्ठहरू",
        "uncategorizedcategories": "श्रेणीकरण नभएका श्रेणीहरू",
-       "uncategorizedimages": "शà¥\8dरà¥\87णà¥\80à¤\95रण à¤¨à¤­à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81",
+       "uncategorizedimages": "शà¥\8dरà¥\87णà¥\80à¤\95रण à¤¨à¤­à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82",
        "uncategorizedtemplates": "श्रेणीकरण नभएका टेम्प्लेटहरु",
        "unusedcategories": "प्रयोग नभएका श्रेणीहरू",
-       "unusedimages": "पà¥\8dरयà¥\8bà¤\97 à¤¨à¤­à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81",
+       "unusedimages": "पà¥\8dरयà¥\8bà¤\97 à¤¨à¤­à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82",
        "wantedcategories": "माग भएका श्रेणीहरू",
        "wantedpages": "खोजिएका पृष्ठहरू",
        "wantedpages-summary": "जुन अनुपस्थित पृष्ठहरूको सूचीमा त्यससँग जोडिएको धेरै लिङ्कहरू छन् वाहेक त्यस पृष्ठहरू जसमा मात्रै अनुप्रेषित लिङ्कहरू जोडिन्छ। अनुपस्थित पृष्ठहरूको सूचीको लागि जसमा मात्रै अनुप्रेषित लिङ्कहरू जोडिन्छ, हेर्नुहोस [[{{#special:BrokenRedirects}}|टुटेको अनुप्रेषणहरूको सूची]]।",
        "wantedpages-badtitle": "नतिजा सूचीमा अमान्य शीर्षक:$1",
-       "wantedfiles": "माà¤\97 à¤­à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81",
+       "wantedfiles": "माà¤\97 à¤­à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82",
        "wantedfiletext-cat": "निम्न फाइलहरू प्रयोगमा छन् तर यहाँ छैन । वाह्य भन्डारहरूको फाइलहरू उपस्थित भए पनि सूचीमा हुन सक्छ। यस्तो कुनै पनि गलत प्रविष्टिहरू <del>काटिएको हुनेछ</del>। साथै, जुन पृष्ठ यस फाइलको प्रयोग गरिरहेको छ तर यहाँ छैन, त्यसको सूची [[:$1]]मा छ।",
        "wantedfiletext-cat-noforeign": "निम्नलिखित फाइल प्रयोगमा छ तर यहाँ छैन। यस अतिरिक्त, पृष्ठ जुन यस गैर-अवस्थित फाइलहरूलाई सङ्ग्रह गरेका छन् त्यसको सूची [[:$1]]मा छ।",
        "wantedfiletext-nocat": "निम्न फाइलहरू प्रयोगमा छन् तर यहाँ छैन । वाह्य भण्डारहरूको फाइलहरू उपस्थित भए पनि सूचीमा हुन सक्छ। यस्तो कुनै पनि गलत प्रविष्टिहरू <del>काटिएको हुनेछ</del>।",
        "mostimages": "सबैभन्दा बढि लिंक भएको चित्र",
        "mostinterwikis": "सबैभन्दा धेरै इन्टरविकि भएका पृष्ठहरू",
        "mostrevisions": "सबैभन्दा बढी संशोधित लेखहरू",
-       "prefixindex": "पà¥\8dरिफिà¤\95à¥\8dस à¤¸à¤¹à¤¿à¤¤à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81",
+       "prefixindex": "पà¥\8dरिफिà¤\95à¥\8dस à¤¸à¤¹à¤¿à¤¤à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82",
        "prefixindex-namespace": "उपसर्ग सहितका सम्पूर्ण पृष्ठहरू ($1 नेमस्पेस)",
        "prefixindex-strip": "सूचीमा स्ट्रिप उपसर्ग",
        "shortpages": "छोटा पृष्ठहरू",
        "longpages": "लामा पृष्ठहरू",
        "deadendpages": "म्याद सकिेएका पृष्ठहरू",
-       "deadendpagestext": "निमà¥\8dन à¤ªà¥\83षà¥\8dठहरà¥\81 {{SITENAME}}मा à¤°à¤¹à¥\87à¤\95ा à¤\85रà¥\81 à¤ªà¥\83षà¥\8dठहरà¥\81सँग जोडिदैनन् ।",
+       "deadendpagestext": "निमà¥\8dन à¤ªà¥\83षà¥\8dठहरà¥\82 {{SITENAME}}मा à¤°à¤¹à¥\87à¤\95ा à¤\85रà¥\81 à¤ªà¥\83षà¥\8dठहरà¥\82सँग जोडिदैनन् ।",
        "protectedpages": "संरक्षित पृष्ठहरू",
        "protectedpages-indef": "नखुलेको सुरक्षा मात्र",
        "protectedpages-summary": "यो पृष्ठ ती सबै पृष्ठहरूको सूची दिन्छ जुन अब सुरक्षित छन्। ती सबै शीर्षकहरूको सूची जान्नका लागि जुन बनाउनबाट सुरक्षित गरिएका छन्, हेर्नुहोस [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]।",
        "protectedpages-cascade": "लामबद्ध सुरक्षाहरु मात्रा",
        "protectedpages-noredirect": "अनुप्रेषण लुकाउने",
-       "protectedpagesempty": "दिà¤\87à¤\8fà¤\95à¥\8b à¤ªà¥\8dयारामिà¤\9fर à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रि à¤¸à¥\81रà¤\95à¥\8dषा à¤\97रिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 छैनन् ।",
+       "protectedpagesempty": "दिà¤\87à¤\8fà¤\95à¥\8b à¤ªà¥\8dयारामिà¤\9fर à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रि à¤¸à¥\81रà¤\95à¥\8dषा à¤\97रिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 छैनन् ।",
        "protectedpages-timestamp": "समय चिन्ह",
        "protectedpages-page": "पृष्ठ",
        "protectedpages-expiry": "सकिनेछ",
        "listusers-editsonly": "सम्पादन गरेका प्रयोगकर्तामात्र देखाउने",
        "listusers-creationsort": "सृजना मिति अनुसार क्रमवद्ध गर्ने",
        "listusers-desc": "घट्दो क्रमबध्द अनुसार मिलाउने",
-       "usereditcount": "$1 {{PLURAL:$1|समà¥\8dपादन|समà¥\8dपादनहरà¥\81}}",
+       "usereditcount": "$1 {{PLURAL:$1|समà¥\8dपादन|समà¥\8dपादनहरà¥\82}}",
        "usercreated": " $1को $2 मा {{GENDER:$3|सृजना}} गरिएको",
        "newpages": "नयाँ पृष्ठहरू",
        "newpages-username": "प्रयोगकर्ता नाम:",
        "booksources-invalid-isbn": "यो आइएसबीएन सहि छैन; मूल स्रोतबाट नक्कल गर्दा भएको त्रुटिको जाँच गर्नुहोस।",
        "specialloguserlabel": "निष्पादक:",
        "speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोगकर्ता)",
-       "log": "लà¤\97हरà¥\81",
-       "all-logs-page": "सबà¥\88 à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤²à¤\97हरà¥\81",
+       "log": "लà¤\97हरà¥\82",
+       "all-logs-page": "सबà¥\88 à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤²à¤\97हरà¥\82",
        "alllogstext": "{{SITENAME}}को सबै उपलब्ध लगहरूको प्रविष्टिहरूको मिल्दो जुल्दो प्रदर्शन। \nतपाईं अझै विस्तारको लागि लगको प्रकार, प्रयोगकर्ता नाम (अक्षर संवेदनशील), वा प्रभावित पृष्ठ (अक्षर संवेदनशील) छान्न सक्नुहुन्छ।",
        "logempty": "लगमा मिल्ने वस्तु भेटिएन ।",
        "log-title-wildcard": "पाठबाट सुरुहुने शीर्षकहरु खोज्नुहोस्",
        "allarticles": "सबै लेखहरू",
        "allinnamespace": "सबै पृष्ठहरू ($1 नेमस्पेस)",
        "allpagessubmit": "जाने",
-       "allpagesprefix": "यà¥\80 à¤¸à¥\81रà¥\81à¤\95ा à¤\85à¤\95à¥\8dषरसहितà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 हेर्ने:",
+       "allpagesprefix": "यà¥\80 à¤¸à¥\81रà¥\81à¤\95ा à¤\85à¤\95à¥\8dषरसहितà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 हेर्ने:",
        "allpagesbadtitle": "दिएको पृष्ठ शीर्षक अमान्य, खाली वा गलत रुपमा अन्तर भाषा वा अन्तर विकी सम्बन्ध गरिएको थियो।  \nयसमा शीर्षकमा प्रयोग गर्न नमिल्ने एक वा बढी अक्षरहरू रहेका हुनसक्छन् ।",
        "allpages-bad-ns": "{{SITENAME}} को नामस्थान छैन \"$1\" ।",
        "allpages-hide-redirects": "अनुप्रेषण लुकाउने",
        "linksearch-error": "मूलनामको सुरुमा मात्र वाइल्डकार्ड देखापर्न सक्छ।",
        "listusersfrom": "प्रयोगहरु देखाउन शुरु हुने यहाँ:",
        "listusers-submit": "देखाउनुहोस्",
-       "listusers-noresult": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 भेटिएनन्।",
+       "listusers-noresult": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 भेटिएनन्।",
        "listusers-blocked": "(प्रतिबन्धित)",
-       "activeusers": "सà¤\95à¥\8dरिय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81को सूची",
-       "activeusers-intro": "यà¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¤à¥\80 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81को हो जसले विगत $1 {{PLURAL:$1|दिन| दिन}}मा  गतिविधि देखाएकाछन्।",
-       "activeusers-count": "विà¤\97त {{PLURAL:$3|दिनमा|$3 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82मा}}  $1 {{PLURAL:$1|समà¥\8dपादन à¤\97रियà¥\8b|समà¥\8dपादनहरà¥\81 गरिए}}",
-       "activeusers-from": "यहाà¤\81बाà¤\9f à¤¸à¥\81रà¥\81 à¤¹à¥\81नà¥\87 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 देखाउनुहोस्:",
+       "activeusers": "सà¤\95à¥\8dरिय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82को सूची",
+       "activeusers-intro": "यà¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¤à¥\80 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82को हो जसले विगत $1 {{PLURAL:$1|दिन| दिन}}मा  गतिविधि देखाएकाछन्।",
+       "activeusers-count": "विà¤\97त {{PLURAL:$3|दिनमा|$3 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82मा}}  $1 {{PLURAL:$1|समà¥\8dपादन à¤\97रियà¥\8b|समà¥\8dपादनहरà¥\82 गरिए}}",
+       "activeusers-from": "यहाà¤\81बाà¤\9f à¤¸à¥\81रà¥\81 à¤¹à¥\81नà¥\87 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 देखाउनुहोस्:",
        "activeusers-hidebots": "बोटहरु लुकाउने",
-       "activeusers-hidesysops": "पà¥\8dरबनà¥\8dधà¤\95हरà¥\81 लुकाउने",
-       "activeusers-noresult": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 भेटिएनन्।",
+       "activeusers-hidesysops": "पà¥\8dरवनà¥\8dधà¤\95हरà¥\82 लुकाउने",
+       "activeusers-noresult": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 भेटिएनन्।",
        "listgrouprights": "प्रयोगकर्ता समूह अधिकार",
        "listgrouprights-summary": "निम्न सूची यस विकिमा परिभाषित समूहहरु र तिनीहरुले प्रयोगगर्न सक्ने संबद्ध  अधिकारहरुको हो।\nयसमा निजी अधिकारहरुको बारेमा [[{{MediaWiki:Listgrouprights-helppage}}|अतिरिक्त सूचना]] हुनसक्छ।",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">प्रदान गरिएका अधिकारहरू</span>\n* <span class=\"listgrouprights-revoked\">फिर्ता गरिएका अधिकारहरू</span>",
        "trackingcategories-nodesc": "कुनै विवरण उपलब्ध छैन।",
        "trackingcategories-disabled": "श्रेणी अक्षम गरियो",
        "mailnologin": "ईमेल पठाउने ठेगाना नै भएन ।",
-       "mailnologintext": "तपाà¤\88लà¥\87 à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाà¤\88 à¤\88मà¥\87ल à¤ªà¤ à¤¾à¤\89नà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\86फà¥\81 à¤ªà¤¹à¤¿à¤²à¥\87 [[Special:UserLogin|पà¥\8dरवà¥\87श(लà¤\97à¤\87न)à¤\97रà¥\87à¤\95à¥\8b]] à¤¹à¥\81नà¥\81परà¥\8dà¤\9b à¤° [[Special:Preferences|à¤\86फà¥\8dनà¥\8b à¤°à¥\8bà¤\9cाà¤\87हरà¥\81मा]] एउटा वैध ईमेल ठेगाना भएको हुनुपर्छ।",
+       "mailnologintext": "तपाà¤\88à¤\82लà¥\87 à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाà¤\88 à¤\88मà¥\87ल à¤ªà¤ à¤¾à¤\89नà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\86फà¥\81 à¤ªà¤¹à¤¿à¤²à¥\87 [[Special:UserLogin|पà¥\8dरवà¥\87श(लà¤\97à¤\87न)à¤\97रà¥\87à¤\95à¥\8b]] à¤¹à¥\81नà¥\81परà¥\8dà¤\9b à¤° [[Special:Preferences|à¤\86फà¥\8dनà¥\8b à¤°à¥\8bà¤\9cाà¤\87हरà¥\82मा]] एउटा वैध ईमेल ठेगाना भएको हुनुपर्छ।",
        "emailuser": "यो प्रयोगकर्तालाई ई-मेल पठाउनुहोस्",
        "emailuser-title-target": "{{GENDER:$1|प्रयोगकर्ता}}लाई इमेल गर्ने",
        "emailuser-title-notarget": "प्रयोगकर्तालाई इमेल गर्नुहोस्",
        "emailpage": "प्रयोगकर्तालाई इमेल गर्नुहोस्",
-       "emailpagetext": "तल दिइएको फर्मले तपाईं यस {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्नुहुन्छ। तपाईं जुन ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता अभिरूचीहरू]]मा दिनुभएको थियो त्यो यस इमेललाई \"पठाउने\" को रूपमा आउनेछ, अतः प्राप्तकर्ता तपाईंलाई सिधै जवाफ दिनसक्छ।",
+       "emailpagetext": "तल दिइएको फर्मले तपाईं यस {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्नुहुन्छ। तपाईंले जुन ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता अभिरूचीहरू]]मा दिनुभएको थियो त्यो यस इमेललाई \"पठाउने\" को रूपमा आउनेछ, अतः प्राप्तकर्ता तपाईंलाई सिधै जवाफ दिनसक्छ।",
        "defemailsubject": "{{SITENAME}} प्रयपोगकर्ता \"$1\" बाट इमेल",
        "usermaildisabled": "प्रयोगकर्ता इमेल निरस्त गरिएको",
        "usermaildisabledtext": "यस विकिमा तपाईं अरु प्रयोगकर्तालाई ई-मेल पठाउन सक्नुहुन्न",
        "watching": "निगरानी गर्दै...",
        "unwatching": "निगरानीबाट हटाउँदै...",
        "watcherrortext": "\"$1\"को लागि तपाइँको निगरानी सुची परिवर्तन गर्ने क्रममा यौटा त्रुटी भएको छ।",
-       "enotif_reset": "सबà¥\88 à¤ªà¥\83षà¥\8dठहरà¥\81 भनी दाग दिने",
+       "enotif_reset": "सबà¥\88 à¤ªà¥\83षà¥\8dठहरà¥\82 भनी दाग दिने",
        "enotif_impersonal_salutation": "{{SITENAME}} प्रयोगकर्ता",
        "enotif_subject_deleted": "{{SITENAME}} पृष्ठ $1 $2 ले {{GENDER:$2|मेटाउनु}} भयो ।",
        "enotif_subject_created": "{{SITENAME}} पृष्ठ $1 $2 ले {{GENDER:$2|बनाउनु}} भयो ।",
        "enotif_lastvisited": "अघिल्लो हेराइपछिका सबै परिवर्तनहरुको निम्ति हेर्नुहोस्: $1",
        "enotif_lastdiff": "यस परिवर्तनको निम्ति यो $1 हेर्नुहोस्",
        "enotif_anon_editor": "अज्ञात  प्रयोगकर्ता  $1",
-       "enotif_body": "पà¥\8dरिय $WATCHINGUSERNAME,\n\n\n{{SITENAME}}à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ $PAGETITLE  $PAGEEDITDATE à¤\95à¥\8b à¤¦à¤¿à¤¨ $PAGEEDITORदà¥\8dवारा $CHANGEDORCREATED, \nहालà¤\95à¥\8b à¤¸à¤\82शà¥\8bधनà¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dति à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d  $PAGETITLE_URL à¥¤\n\n$NEWPAGE\n\nसमà¥\8dपादà¤\95à¤\95à¥\8b à¤¸à¤¾à¤°à¤¾à¤\82श: $PAGESUMMARY $PAGEMINOREDIT\n\nसमà¥\8dपादà¤\95सित à¤¸à¤®à¥\8dपरà¥\8dà¤\95 à¤°à¤¾à¤\96à¥\8dनà¥\81हà¥\8bसà¥\8d:\nमà¥\87ल: $PAGEEDITOR_EMAIL\nविà¤\95ि: $PAGEEDITOR_WIKI\n\nतपाà¤\88à¤\82 à¤¯à¤¸ à¤ªà¥\83षà¥\8dठमा à¤¨à¤\97à¤\8fसमà¥\8dम à¤\85ब à¤\89सà¥\8b à¤\95à¥\81नà¥\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¤\8fà¤\95ा à¤\96णà¥\8dडमा à¤\95à¥\81नà¥\88 à¤¸à¥\82à¤\9aना à¤¦à¤¿à¤¨à¥\87à¤\9bà¥\88न।\nतपाà¤\88à¤\82à¤\95ा à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤¨à¤¿à¤\97रानà¥\80 à¤ªà¥\83षà¥\8dठहरà¥\81को लागि तपाईंले सूचना पताकालाई निगरानी सूचीमा पुनर्बहाली गर्न सक्नुहुन्छ। \n\n             तपाईंको मित्र {{SITENAME}} सूचना प्रणाली\n--\nइमेल सूचना व्यवस्था परिवर्तन गर्न, जानुहोस्\n{{canonicalurl:{{#special:Preferences}}}}\n\nनिगरानी सूची व्यवस्थित गर्न, जानुहोस्\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nनिगरानी सूची मेट्न, जानुहोस्\n$UNWATCHURL\n\nप्रतिक्रिया र अन्य सहयोगको निम्ति:\n$HELPPAGE",
+       "enotif_body": "पà¥\8dरिय $WATCHINGUSERNAME,\n\n\n{{SITENAME}}à¤\95à¥\8b à¤ªà¥\83षà¥\8dठ $PAGETITLE  $PAGEEDITDATE à¤\95à¥\8b à¤¦à¤¿à¤¨ $PAGEEDITORदà¥\8dवारा $CHANGEDORCREATED, \nहालà¤\95à¥\8b à¤¸à¤\82शà¥\8bधनà¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dति à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d  $PAGETITLE_URL à¥¤\n\n$NEWPAGE\n\nसमà¥\8dपादà¤\95à¤\95à¥\8b à¤¸à¤¾à¤°à¤¾à¤\82श: $PAGESUMMARY $PAGEMINOREDIT\n\nसमà¥\8dपादà¤\95सित à¤¸à¤®à¥\8dपरà¥\8dà¤\95 à¤°à¤¾à¤\96à¥\8dनà¥\81हà¥\8bसà¥\8d:\nमà¥\87ल: $PAGEEDITOR_EMAIL\nविà¤\95ि: $PAGEEDITOR_WIKI\n\nतपाà¤\88à¤\82 à¤¯à¤¸ à¤ªà¥\83षà¥\8dठमा à¤¨à¤\97à¤\8fसमà¥\8dम à¤\85ब à¤\89सà¥\8b à¤\95à¥\81नà¥\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¤\8fà¤\95ा à¤\96णà¥\8dडमा à¤\95à¥\81नà¥\88 à¤¸à¥\82à¤\9aना à¤¦à¤¿à¤¨à¥\87à¤\9bà¥\88न।\nतपाà¤\88à¤\82à¤\95ा à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤¨à¤¿à¤\97रानà¥\80 à¤ªà¥\83षà¥\8dठहरà¥\82को लागि तपाईंले सूचना पताकालाई निगरानी सूचीमा पुनर्बहाली गर्न सक्नुहुन्छ। \n\n             तपाईंको मित्र {{SITENAME}} सूचना प्रणाली\n--\nइमेल सूचना व्यवस्था परिवर्तन गर्न, जानुहोस्\n{{canonicalurl:{{#special:Preferences}}}}\n\nनिगरानी सूची व्यवस्थित गर्न, जानुहोस्\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nनिगरानी सूची मेट्न, जानुहोस्\n$UNWATCHURL\n\nप्रतिक्रिया र अन्य सहयोगको निम्ति:\n$HELPPAGE",
        "created": "बनाइएको",
        "changed": "परिवर्तन भइसकेको",
        "deletepage": "पृष्ठ मेट्नुहोस्",
        "deletereasonotherlist": "अरु कारण",
        "deletereason-dropdown": "*मेट्नका सामान्य कारणहरु\n** स्प्याम\n** हुल्याहापन(Vandalism) \n** प्रतिलिपी अधिकार उल्लंघन\n** लेखकको अनुरोध\n** टुटेको अनुप्रेषण",
        "delete-edit-reasonlist": "मेट्नुको कारण सम्पादन गर्नुहोस्",
-       "delete-toobig": "यà¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤®à¥\8dपादन à¤\87तिहास à¤§à¥\87रà¥\88 à¤°  $1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95|पà¥\81नरावलà¥\8bà¤\95हरà¥\81}}भनà¥\8dदा à¤¬à¤¢à¥\80 à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b।\n {{SITENAME}}मा à¤¦à¥\81रà¥\8dà¤\98à¤\9fनाà¤\95à¥\8b à¤\95ारणलà¥\87 à¤\97डबडà¥\80 à¤\86à¤\89नसà¤\95à¥\8dनà¥\87 à¤\95à¥\81रालाà¤\88 à¤°à¥\8bà¤\95à¥\8dन à¤¯à¤¸à¥\8dता à¤ªà¥\83षà¥\8dठहरà¥\81लाई मेट्नबाट निषेध गरिएको छ ।",
+       "delete-toobig": "यà¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤®à¥\8dपादन à¤\87तिहास à¤§à¥\87रà¥\88 à¤°  $1 {{PLURAL:$1|पà¥\81नरावलà¥\8bà¤\95|पà¥\81नरावलà¥\8bà¤\95हरà¥\82}}भनà¥\8dदा à¤¬à¤¢à¥\80 à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b।\n {{SITENAME}}मा à¤¦à¥\81रà¥\8dà¤\98à¤\9fनाà¤\95à¥\8b à¤\95ारणलà¥\87 à¤\97डबडà¥\80 à¤\86à¤\89नसà¤\95à¥\8dनà¥\87 à¤\95à¥\81रालाà¤\88 à¤°à¥\8bà¤\95à¥\8dन à¤¯à¤¸à¥\8dता à¤ªà¥\83षà¥\8dठहरà¥\82लाई मेट्नबाट निषेध गरिएको छ ।",
        "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": "यो पृष्ठलाई सुरक्षित गरिएकोले तपाईले यसलाई मेटाउन सक्नु हुन्न ।",
        "deleting-backlinks-warning": "'''चेतावनी:''' जुन पृष्ठ तपाईं हटाउन गइरहनु भएको छ त्यससँग [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठहरू]] जोडिन्छ अथवा त्यसलाई ट्रान्सक्लयुड गर्छ।",
-       "rollback": "समà¥\8dपादनहरà¥\81  à¤ªà¤\9bाडि à¤²à¤¾ने",
+       "rollback": "समà¥\8dपादनहरà¥\82 à¤ªà¤\9bाडि à¤²à¤¿ने",
        "rollbacklink": "पहिलेको रुपमा फर्काउने",
        "rollbacklinkcount": "रोल्ब्याक $1 {{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
        "rollbacklinkcount-morethan": "$1 भन्दा बढी {{PLURAL:$1|सम्पादन|सम्पादनहरू}} रोलब्याक गर्ने",
        "cantrollback": "फर्काउन सकिंदैन;\nअन्तिम योगदान कर्ता मात्र यस पृष्ठका लेखक थिए।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा गरिएको [[:$1]] पछिल्लो सम्पादनलाई फेरी पुरानै स्थितिमा ल्याउन सकिंदैन;\nकसैले यस बीचमै वा यस पृष्ठलाई फेरी सम्पादित गरिसकेको छ वा पहिले नै यस पृष्ठलाई पुरानो स्थितिमा ल्याई सकिएको छ।\n\nयस पृष्ठको अन्तिम सम्पादन [[User:$3|$3]] ([[User talk:$3|वार्ता]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ले गरेओ हो।",
        "editcomment": "सम्पादन सारांश : \"''$1''\" ।",
-       "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|वारà¥\8dतालाप]])दà¥\8dवारा [[User:$1|$1]]दà¥\8dवारा à¤\97रिà¤\8fà¤\95à¥\8b à¤ªà¤\9bिलà¥\8dलà¥\8b à¤¸à¤\82शà¥\8bधनतरà¥\8dफ à¤\89लà¥\8dà¤\9fाà¤\87à¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81",
+       "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|वारà¥\8dतालाप]])दà¥\8dवारा [[User:$1|$1]]दà¥\8dवारा à¤\97रिà¤\8fà¤\95à¥\8b à¤ªà¤\9bिलà¥\8dलà¥\8b à¤¸à¤\82शà¥\8bधनतरà¥\8dफ à¤\89लà¥\8dà¤\9fाà¤\87à¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82",
        "revertpage-nouser": "(सदस्य नाम हटाइएको छ) को सम्पादनहरूलाई हटाएर {{GENDER:$1|[[User:$1|$1]]}} ले अन्तिम अवतरणमा पूर्ववत गर्यो।",
-       "rollback-success": "$1दà¥\8dवारा à¤\89लà¥\8dà¤\9fाà¤\87à¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81;\nपछिल्लो संशोधनमा $2द्वारा परिवर्तन गरि पुनः फर्काइएको।",
+       "rollback-success": "$1दà¥\8dवारा à¤\89लà¥\8dà¤\9fाà¤\87à¤\8fà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82;\nपछिल्लो संशोधनमा $2द्वारा परिवर्तन गरि पुनः फर्काइएको।",
        "sessionfailure-title": "सत्र त्रुटी",
        "sessionfailure": "यस्तो लागदैछ कि तपाईंको लगइन सत्रसँग कुनै समस्या छ। सत्र अपहरणबाट बचाउन को लागि सावधानीको रूपमा तपाईंको यो क्रियाकलाप रद्द गरिएको छ। कृपया पछाडी जानुहोस र पृष्ठलाई पुनः लोड गर्नुहोस, अनि फेरी प्रयास गर्नुहोला।",
        "protectlogpage": "सुरक्षण लग",
        "protect-locked-dblock": "डेटाबेसमा सक्रिय बन्देज भएको कारणले सुरक्षा स्तरमा कुनै परिवर्तन गर्न सकिंदैन।\nपृष्ठ <strong>$1</strong> को वर्तमान स्थिति यो छ:",
        "protect-locked-access": "तपाईँको खातालाई पृष्ठको सुरक्षा स्तरहरू परिवर्तन गर्ने अनुमति छैन ।\n'''$1''पृष्ठको हालको स्थिति  निम्न छ :",
        "protect-cascadeon": "हालमा यो पृष्ठ सुरक्षित गरिएको छ किन कि यसमा निम्न {{PLURAL:$1|पृष्ठ, जसको|पृष्ठहरू, जसको}} सुरक्षामा व्यापकता कायम गरिएको छ। \nतपाईंले पृष्ठको सुरक्षा स्तर परिवर्तन गर्न सक्नुहुनेछ तर यसले व्यापक सुरक्षालाई केहि असर पार्ने छैन।",
-       "protect-default": "सबà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाई अनुमति दिने",
+       "protect-default": "सबà¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाई अनुमति दिने",
        "protect-fallback": "\"$1\" वर्गमा भएका प्रयोगकर्ताहरूलाई अनुमति दिने",
-       "protect-level-autoconfirmed": "नयाà¤\81 à¤¤à¤¥à¤¾ à¤¦à¤°à¥\8dता à¤­à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाई अनुमति दिने",
+       "protect-level-autoconfirmed": "नयाà¤\81 à¤¤à¤¥à¤¾ à¤¦à¤°à¥\8dता à¤­à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाई अनुमति दिने",
        "protect-level-sysop": "प्रबन्धकहरुलाई मात्र अनुमति दिने",
        "protect-summary-cascade": "लाममा राख्ने",
        "protect-expiring": "$1 (UTC) मा सकिने छ ।",
        "protect-expiring-local": "समाप्ति समय $1",
        "protect-expiry-indefinite": "अनिश्चित काल",
-       "protect-cascade": "यà¥\8b à¤ªà¥\83षà¥\8dठमा à¤¸à¤\82लà¤\97à¥\8dन à¤¸à¥\81रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\81(लामबद्द सुरक्षा)",
+       "protect-cascade": "यà¥\8b à¤ªà¥\83षà¥\8dठमा à¤¸à¤\82लà¤\97à¥\8dन à¤¸à¥\81रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\82(लामबद्द सुरक्षा)",
        "protect-cantedit": "तपाईँ यस पृष्ठको सुरक्षा स्तर परिवर्तन गर्न सक्नुहुन्न , किन कि तपाईँलाई यसको सम्पादनको अनुमति छैन ।",
        "protect-othertime": "अरु समय :",
        "protect-othertime-op": "अरु समय",
        "restriction-level": "प्रतिबन्ध स्तरः",
        "minimum-size": "न्यूनतम आकार",
        "maximum-size": "अधिकतम आकार:",
-       "pagesize": "(बाà¤\87à¤\9fहरà¥\81)",
+       "pagesize": "(बाà¤\87à¤\9fहरà¥\82)",
        "restriction-edit": "सम्पादन गर्ने",
        "restriction-move": "सार्ने",
        "restriction-create": "सृजना गर्ने",
        "restriction-level-autoconfirmed": "अल्पसुरक्षित",
        "restriction-level-all": "कुनै स्तर",
        "undelete": "मेटिएका पृष्ठहरू हेर्नुहोस्",
-       "undeletepage": "मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 हेर्ने अनि पुनर्स्थापित गर्ने",
+       "undeletepage": "मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 हेर्ने अनि पुनर्स्थापित गर्ने",
        "undeletepagetitle": "'''[[:$1|$1]]का मेटाइएका पुनरावलोकनहरु यसभित्र  छन् '''।",
        "viewdeletedpage": "मेटिएका पृष्ठहरू हेर्नुहोस्",
        "undeletepagetext": "निम्नलिखित {{PLURAL:$1|पृष्ठ मेटिएकोछ तर पूरालेखभित्रै छ|$1 पृष्ठ मेटिएकाछन् तर पूरालेखभित्रै छन्}} र पुनर्स्थापित गर्न सकिन्छ।\nपूरालेखको समय-समयमा सफाई गर्न सकिन्छ।",
        "undelete-fieldset-title": "पुनरावलोकनहरु  पूर्वावस्थामा ल्याउनुहोस्",
        "undeleteextrahelp": "यस पृष्ठक पुरै इतिहास पूर्वरुपमा फर्काउनको लागि  छनोट सन्दुकहरुलाई नछानी '''''{{int:undeletebtn}}''''' मा क्लिक गर्नुहोस।\nअनुकुल पूर्वरुपमा फर्काउने कार्य गर्न छनौट चाहिएका संस्करणक सन्दुकहरुलाई छानेर '''''{{int:undeletebtn}}'''''मा क्लिक गर्नुहोस।",
-       "undeleterevisions": "$1 {{PLURAL:$1|सà¤\82शà¥\8bधन|सà¤\82शà¥\8bधनहरà¥\81}} संग्रहित",
-       "undeletehistory": "यदि à¤\95à¥\81नà¥\88 à¤ªà¥\83षà¥\8dà¤\9fलाà¤\88 à¤ªà¥\81न: à¤¸à¥\8dथापन à¤\97राà¤\89नà¥\81 à¤­à¤¯à¥\8b à¤­à¤¨à¥\87 à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\81 à¤\87तिहासमा à¤ªà¥\81न:सà¥\8dथापन à¤¹à¥\81नà¥\87à¤\9bनà¥\8d à¥¤\nयदि à¤¯à¤¸à¥\88 à¤¨à¤¾à¤®à¤¬à¤¾à¤\9f  à¤¨à¤¯à¤¾à¤\81 à¤ªà¥\83षà¥\8dठ à¤¨à¤¿à¤°à¥\8dमाण à¤­à¥\88सà¤\95à¥\87à¤\95à¥\8b à¤\9bनà¥\8d à¤­à¤¨à¥\87 à¤ªà¥\81न: à¤¸à¥\8dथापित à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\81 पूर्व इतिहासको रुपमा स्थापित हुनेछन् ।",
-       "undeleterevdel": "मà¥\87à¤\9fà¥\8dनà¥\87 à¤\95ाम à¤°à¤¦à¥\8dद à¤\97रिनà¥\87 à¤\95ारà¥\8dय à¤\97रिनà¥\87 à¤\9bà¥\88न à¤¯à¤¦à¤¿ à¤¯à¥\8b à¤®à¤¾à¤¥à¤¿à¤²à¥\8dलà¥\8b à¤ªà¥\83षà¥\8dठ à¤¬à¤¨à¥\8dà¤\9b  à¤¯à¤¾ à¤«à¤¾à¤\87ल à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\81 à¤\86à¤\82शिà¤\95 à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤\9bनà¥\8d à¤­à¤¨à¥\87।\nतà¥\8dयस à¤\85वसà¥\8dथामा à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤\9bनà¥\8cà¤\9fमा à¤\85नà¥\8dतिम à¤®à¥\87à¤\9fिà¤\8fà¤\95à¥\8b à¤¨à¤¯à¤¾à¤\81 à¤¸à¤\82सà¥\8dà¤\95रण à¤¨à¤²à¥\81à¤\95ाà¤\89नà¥\87मा à¤\9aिनलो लगाउनु पर्छ ।",
+       "undeleterevisions": "$1 {{PLURAL:$1|सà¤\82शà¥\8bधन|सà¤\82शà¥\8bधनहरà¥\82}} संग्रहित",
+       "undeletehistory": "यदि à¤\95à¥\81नà¥\88 à¤ªà¥\83षà¥\8dà¤\9fलाà¤\88 à¤ªà¥\81न: à¤¸à¥\8dथापन à¤\97राà¤\89नà¥\81 à¤­à¤¯à¥\8b à¤­à¤¨à¥\87 à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\82 à¤\87तिहासमा à¤ªà¥\81न:सà¥\8dथापन à¤¹à¥\81नà¥\87à¤\9bनà¥\8d à¥¤\nयदि à¤¯à¤¸à¥\88 à¤¨à¤¾à¤®à¤¬à¤¾à¤\9f  à¤¨à¤¯à¤¾à¤\81 à¤ªà¥\83षà¥\8dठ à¤¨à¤¿à¤°à¥\8dमाण à¤­à¥\88सà¤\95à¥\87à¤\95à¥\8b à¤\9b à¤­à¤¨à¥\87 à¤ªà¥\81न: à¤¸à¥\8dथापित à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\82 पूर्व इतिहासको रुपमा स्थापित हुनेछन् ।",
+       "undeleterevdel": "यदि à¤¯à¥\8b à¤®à¤¾à¤¥à¤¿à¤²à¥\8dलà¥\8b à¤ªà¥\83षà¥\8dठ à¤¬à¤¨à¥\8dà¤\9b  à¤¯à¤¾ à¤«à¤¾à¤\87ल à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\82 à¤\86à¤\82शिà¤\95 à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤\9bनà¥\8d à¤­à¤¨à¥\87 à¤®à¥\87à¤\9fà¥\8dनà¥\87 à¤\95ाम à¤°à¤¦à¥\8dद à¤\97रिनà¥\87 à¤\9bà¥\88न।\nतà¥\8dयस à¤\85वसà¥\8dथामा à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤\9bनà¥\8cà¤\9fमा à¤\85नà¥\8dतिम à¤®à¥\87à¤\9fिà¤\8fà¤\95à¥\8b à¤¨à¤¯à¤¾à¤\81 à¤¸à¤\82सà¥\8dà¤\95रण à¤¨à¤²à¥\81à¤\95ाà¤\89नà¥\87मा à¤\9aिनो लगाउनु पर्छ ।",
        "undeletehistorynoadmin": "यस पृष्ठ मेटिएको छ।\nमेटिनाको कारण निम्न जानकारीहरुमा खुलाइएको छ र मेटिनु अगिका योगदानकर्ताहरुको नाम पनि \nमेटिएका पृष्ठको पूरा पाठ प्रवन्धकहरुलाई मात्र उपलब्ध हुन्छ ।",
-       "undelete-revision": "Deleted revision of $1 (as of $4, at $5) by $3:\n\n$3द्वारा $1को ($4को  समय $5 मा) मेटाइएका संशोधनहरु :",
+       "undelete-revision": "$3द्वारा $1को ($4को  समय $5 मा) मेटाइएका संशोधनहरू :",
        "undeleterevision-missing": "अमान्य या मेटिएको संस्करण ।\nखराब लिन्क पनि सक्छ  या संस्करण पुन: स्थापना गरिएको या अभिलेखबाट हटाइएको हुनसक्छ ।",
        "undelete-nodiff": "कुनै पनि पुरानो पुनरावलोकनहरु भेटिएन ।",
        "undeletebtn": "पूर्वावस्थामा ल्याउनुहोस्",
        "undeleteviewlink": "अवलोकन",
        "undeleteinvert": " चयन उल्ट्याउने",
        "undeletecomment": "कारण :",
-       "undeletedrevisions": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¸à¤\82शà¥\8bधन|$1 à¤¸à¤\82शà¥\8bधनहरà¥\81}} पुनर्स्थापित गरियो",
-       "undeletedrevisions-files": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¸à¤\82शà¥\8bधन|$1 à¤¸à¤\82शà¥\8bधनहरà¥\81}} à¤° {{PLURAL:$2|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$2 à¤«à¤¾à¤\87लहरà¥\81}} पुनर्स्थापित गरियो",
-       "undeletedfiles": "{{PLURAL:$1|१ à¤«à¤¾à¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\81 }} पूर्वस्थितिमा ल्याइयो",
+       "undeletedrevisions": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¸à¤\82शà¥\8bधन|$1 à¤¸à¤\82शà¥\8bधनहरà¥\82}} पुनर्स्थापित गरियो",
+       "undeletedrevisions-files": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¸à¤\82शà¥\8bधन|$1 à¤¸à¤\82शà¥\8bधनहरà¥\82}} à¤° {{PLURAL:$2|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$2 à¤«à¤¾à¤\87लहरà¥\82}} पुनर्स्थापित गरियो",
+       "undeletedfiles": "{{PLURAL:$1|१ à¤«à¤¾à¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82 }} पूर्वस्थितिमा ल्याइयो",
        "cannotundelete": "मेटाएको रद्द गर्ने काम असफल भयो:\n$1",
        "undeletedpage": "'''$1लाई पूर्वावस्थामा ल्याइयो'''\nभर्खरै मेटाइएको रिकर्डहरु र पुनर्स्थापनाहरु हेर्न [[Special:Log/delete|मेटाइएको लग]]मा जानुहोस्।",
-       "undelete-header": "भरà¥\8dà¤\96र à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81 हेर्न [[Special:Log/delete|मेटाइएका लग]]मा जानुहोस्।",
+       "undelete-header": "भरà¥\8dà¤\96र à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 हेर्न [[Special:Log/delete|मेटाइएका लग]]मा जानुहोस्।",
        "undelete-search-title": "मेटिएका पृष्ठहरू खोज्नुहोस्",
        "undelete-search-box": "मेटिएका पृष्ठहरू खोज्नुहोस्",
-       "undelete-search-prefix": "बाà¤\9f à¤¸à¥\81रà¥\81 à¤¹à¥\81नà¥\87  à¤ªà¥\83षà¥\8dठहरà¥\81 देखाउनुहोस :",
+       "undelete-search-prefix": "बाà¤\9f à¤¸à¥\81रà¥\81 à¤¹à¥\81नà¥\87  à¤ªà¥\83षà¥\8dठहरà¥\82 देखाउनुहोस :",
        "undelete-search-submit": "खोजी गर्नुहोस्",
-       "undelete-no-results": "मà¥\87à¤\9fिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81à¤\95à¥\8b à¤\85भिलà¥\87à¤\96मा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤®à¤¿à¤²à¥\8dदà¥\8b à¤ªà¥\83षà¥\8dठहरà¥\81 भेटिएन ।",
+       "undelete-no-results": "मà¥\87à¤\9fिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82à¤\95à¥\8b à¤\85भिलà¥\87à¤\96मा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤®à¤¿à¤²à¥\8dदà¥\8b à¤ªà¥\83षà¥\8dठहरà¥\82 भेटिएन ।",
        "undelete-filename-mismatch": " $1 समय छाप भएको मेटिएको संस्करण पुन: स्थापना गर्न सकिएन : फाइलनाम अमिल्दो",
        "undelete-bad-store-key": " $1 समय छाप भएको मेटिएको संस्करण पुन: स्थापना गर्न सकिएन : फाइल मेट्नु अगि नै हराएको थियो",
        "undelete-cleanup-error": "प्रोगमा नआएको \"$1\" अभिलेख फाइल मेट्दा त्रुटी",
        "undelete-show-file-submit": "हो",
        "namespace": "नामस्थान:",
        "invert": "रोजाइ उल्टाउने",
-       "tooltip-invert": "à¤\9bानिà¤\8fà¤\95ा à¤¨à¥\87मसà¥\8dपà¥\87सहरà¥\81मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81मा à¤\97रिà¤\8fà¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 à¤²à¥\81à¤\95ाà¤\89न à¤¯à¤¸à¤®à¤¾ à¤\9aिनà¥\8b à¤²à¤\97ाà¤\89नà¥\81हà¥\8bसà¥\8d  (र à¤¸à¤®à¥\8dवन्धित नेमस्पेस यदि छानिएका भए)",
+       "tooltip-invert": "à¤\9bानिà¤\8fà¤\95ा à¤¨à¥\87मसà¥\8dपà¥\87सहरà¥\82मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82मा à¤\97रिà¤\8fà¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 à¤²à¥\81à¤\95ाà¤\89न à¤¯à¤¸à¤®à¤¾ à¤\9aिनà¥\8b à¤²à¤\97ाà¤\89नà¥\81हà¥\8bसà¥\8d  (र à¤¸à¤®à¥\8dबन्धित नेमस्पेस यदि छानिएका भए)",
        "tooltip-whatlinkshere-invert": "छानिएको नामस्थानको पृष्ठहरूसँग लिङ्कहरूलाई लुकाउनका लागि यस बाकसलाई चिन्हित गर्नुहोस",
        "namespace_association": "सम्बन्धित नेमस्पेस",
        "tooltip-namespace_association": "वार्तालाप या विषय नेमस्पेसहरुलाई सम्वन्धित नेमस्पेसको रुपमा लिनको लागि सन्दुकमा चिनो लगाउनुहोस।",
        "sp-contributions-suppresslog": "प्रयोगकर्ताको योगदानहरू दबाइएको छ ।",
        "sp-contributions-deleted": "प्रयोगकर्ताका योगदानहरू मेटाइयो",
        "sp-contributions-uploads": "उर्ध्वभरणहरु",
-       "sp-contributions-logs": "लà¤\97हरà¥\81",
+       "sp-contributions-logs": "लà¤\97हरà¥\82",
        "sp-contributions-talk": "वार्ता",
        "sp-contributions-userrights": "प्रयोगकर्ता अधिकार व्यवस्थापन",
        "sp-contributions-blocked-notice": "यो प्रयोगकर्तालाई अहिले रोक लगाइएको छ।\nनवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:",
        "sp-contributions-blocked-notice-anon": "यो IP ठेगानालाई अहिले रोक लगाइएको छ।\nनवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:",
        "sp-contributions-search": "योगदानहरू खोज्नुहोस्",
        "sp-contributions-username": "IP ठेगाना वा प्रयोगकर्ता नाम :",
-       "sp-contributions-toponly": "नवà¥\80नतम à¤¸à¤\82शà¥\8bधनà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\81 देखाउनुहोस्",
+       "sp-contributions-toponly": "नवà¥\80नतम à¤¸à¤\82शà¥\8bधनà¤\95ा à¤¸à¤®à¥\8dपादनहरà¥\82 देखाउनुहोस्",
        "sp-contributions-newonly": "पृष्ठ निर्माण सम्बन्धि सम्पादनहरू मात्रै देखाउनुहोस्",
        "sp-contributions-submit": "खोज",
        "whatlinkshere": "यहाँ के जोडिन्छ",
        "whatlinkshere-title": "$1 सँग जोडिएका पानाहरू",
        "whatlinkshere-page": "पृष्ठ:",
-       "linkshere": "निमà¥\8dन à¤ªà¥\83षà¥\8dठहरà¥\81 '''[[:$1]]''' मा जोडिन्छ :",
+       "linkshere": "निमà¥\8dन à¤ªà¥\83षà¥\8dठहरà¥\82 '''[[:$1]]''' मा जोडिन्छ :",
        "nolinkshere": " '''[[:$1]]'''मा लिंक भएका प्याकेजेजहरु छैनन्",
-       "nolinkshere-ns": "à¤\9aà¥\81निà¤\8fà¤\95à¥\8b à¤¨à¤¾à¤®à¤¸à¥\8dथानमा '''[[:$1]]''' à¤¸à¤¿à¤¤ à¤\9cà¥\8bड़िनà¥\87 à¤ªà¥\83षà¥\8dठहरà¥\81 छैनन्।",
+       "nolinkshere-ns": "à¤\9aà¥\81निà¤\8fà¤\95à¥\8b à¤¨à¤¾à¤®à¤¸à¥\8dथानमा '''[[:$1]]''' à¤¸à¤¿à¤¤ à¤\9cà¥\8bडिनà¥\87 à¤ªà¥\83षà¥\8dठहरà¥\82 छैनन्।",
        "isredirect": "अनुप्रेषित पृष्ठ",
        "istemplate": "पारदर्शिता",
        "isimage": "फाइल लिङ्क",
        "ipaddressorusername": "आइपी ठेगाना वा प्रयोगकर्ता नाम :",
        "ipbexpiry": "सकिने:",
        "ipbreason": "कारण:",
-       "ipbreason-dropdown": "*रà¥\8bà¤\95 à¤²à¤\97ाà¤\89नà¥\81à¤\95ा à¤¸à¤®à¤¾à¤¨à¥\8dय à¤\95ारणहरà¥\81\n** à¤\9dà¥\82à¤\9fà¥\8b à¤¸à¥\82à¤\9aना à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b\n** à¤ªà¥\83षà¥\8dठहरà¥\81बाà¤\9f à¤¸à¤¾à¤®à¤¾à¤\97à¥\8dरà¥\80हरà¥\81 à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b\n** à¤¬à¤¾à¤¹à¤¿à¤°à¥\80 à¤\9cालà¤\95à¥\8dषà¥\87तà¥\8dर (sites)सित à¤¨à¤\9aाहिà¤\82दà¥\8b à¤²à¤¿à¤\99à¥\8dà¤\95 à¤\97राà¤\87à¤\8fà¤\95à¥\8b \n** à¤ªà¥\83षà¥\8dठहरà¥\81मा à¤¬à¤\95वास/à¤\97ालà¥\80-à¤\97लà¥\8cà¤\9a à¤¹à¤¾à¤²à¤¿à¤\8fà¤\95à¥\8b\n** à¤­à¤¯ à¤«à¥\88लाà¤\89नà¥\87 à¤µà¥\8dयवहार/à¤\89तà¥\8dपà¥\80डन (सताà¤\89नà¥\87 à¤\95ारà¥\8dय)\n** à¤§à¥\87रà¥\88 à¤\97लत à¤\96ाताहरà¥\81\n** प्रयोगकर्ता नाम अस्वीकार्य",
+       "ipbreason-dropdown": "*रà¥\8bà¤\95 à¤²à¤\97ाà¤\89नà¥\81à¤\95ा à¤¸à¤®à¤¾à¤¨à¥\8dय à¤\95ारणहरà¥\82\n** à¤\9dà¥\82à¤\9fà¥\8b à¤¸à¥\82à¤\9aना à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b\n** à¤ªà¥\83षà¥\8dठहरà¥\82बाà¤\9f à¤¸à¤¾à¤®à¤¾à¤\97à¥\8dरà¥\80हरà¥\82 à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b\n** à¤¬à¤¾à¤¹à¤¿à¤°à¥\80 à¤\9cालà¤\95à¥\8dषà¥\87तà¥\8dर (sites)सित à¤¨à¤\9aाहिà¤\82दà¥\8b à¤²à¤¿à¤\99à¥\8dà¤\95 à¤\97राà¤\87à¤\8fà¤\95à¥\8b \n** à¤ªà¥\83षà¥\8dठहरà¥\82मा à¤¬à¤\95वास/à¤\97ालà¥\80-à¤\97लà¥\8cà¤\9a à¤¹à¤¾à¤²à¤¿à¤\8fà¤\95à¥\8b\n** à¤­à¤¯ à¤«à¥\88लाà¤\89नà¥\87 à¤µà¥\8dयवहार/à¤\89तà¥\8dपà¥\80डन (सताà¤\89नà¥\87 à¤\95ारà¥\8dय)\n** à¤§à¥\87रà¥\88 à¤\97लत à¤\96ाताहरà¥\82\n** प्रयोगकर्ता नाम अस्वीकार्य",
        "ipb-hardblock": "यस आई पी ठेगानाबाट प्रवेश गरेका प्रयोगकर्तालाई संपादन गर्न नदिने",
        "ipbcreateaccount": "खाता  सिर्जना रोक्नुहोस",
        "ipbemailban": "प्रयोगकर्तालाई इमेल पठाउनबाट रोक्ने",
        "ipbenableautoblock": "यस प्रयोगकर्ताले प्रयोग गरेको अन्तिम IP ठेगानालाई स्वतः रोक्ने, र पछाड़िका अरु पनि IP ठेगानालाई जहाँबाट तिनीहरुले सम्पादन गर्ने प्रयास गर्छन्।",
        "ipbsubmit": "यो प्रयोगकर्तालाई रोक्नुहोस",
        "ipbother": "अरु समय:",
-       "ipboptions": "२ à¤\98णà¥\8dà¤\9fाहरà¥\81:2 hours,१ à¤¦à¤¿à¤¨ :1 day,३ à¤¦à¤¿à¤¨à¤¹à¤°à¥\81:3 days,१ à¤¹à¤ªà¥\8dता:1 week,२ à¤¹à¤ªà¥\8dताहरà¥\81:2 weeks,१ à¤®à¤¹à¤¿à¤¨à¤¾:1 month,३ à¤®à¤¹à¤¿à¤¨à¤¾à¤¹à¤°à¥\81:3 months,६ à¤®à¤¹à¤¿à¤¨à¤¾à¤¹à¤°à¥\81:6 months,१ वर्ष:1 year,अनगिन्ती:infinite",
+       "ipboptions": "२ à¤\98णà¥\8dà¤\9fाहरà¥\82:2 hours,१ à¤¦à¤¿à¤¨ :1 day,३ à¤¦à¤¿à¤¨à¤¹à¤°à¥\82:3 days,१ à¤¹à¤ªà¥\8dता:1 week,२ à¤¹à¤ªà¥\8dताहरà¥\82:2 weeks,१ à¤®à¤¹à¤¿à¤¨à¤¾:1 month,३ à¤®à¤¹à¤¿à¤¨à¤¾à¤¹à¤°à¥\82:3 months,६ à¤®à¤¹à¤¿à¤¨à¤¾à¤¹à¤°à¥\82:6 months,१ वर्ष:1 year,अनगिन्ती:infinite",
        "ipbhidename": "प्रयोगकर्ताको नाम सम्पादनबाट र सूचीबाट हटाउने",
        "ipbwatchuser": "यो प्रयोगकर्ताको  प्रयपोगकर्ता र वार्तलाप पृष्ठ हेर्नुहोस्",
        "ipb-disableusertalk": "यस प्रयोगकर्तालाई निषेधित समयमा आफ्नै वार्तालाप पृष्ठ सम्पादन गर्न नदिने",
        "badipaddress": "अमान्य IP ठेगाना",
        "blockipsuccesssub": "निषेधकार्य सफल भयो",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] निषेध गरिएको छ।<br />\nपुनरावलकोनको लागि [[Special:BlockList|आइपी निषेध सूची]] हेर्नहोस्।",
-       "ipb-blockingself": "तपाईंले आफैंलाई रोक लगाउन गइरहनु भएको छ! के तपाईं पक्का यसो गर्न चाहनुहुन्छ?",
+       "ipb-blockingself": "तपाईं आफैलाई रोक लगाउन गइरहनु भएको छ! के तपाईं पक्का यसो गर्न चाहनुहुन्छ?",
        "ipb-confirmhideuser": "तपाईंले त्यस्तो प्रयोगकर्तालाई रोक लगाउन गइरहनु भएको छ जसको  \"प्रयोगकर्ता लुकाउने\" सक्रिय बनाइएको छ। यसो गर्दा सबै लग सूचीहरुबाट प्रयोगकर्ताको नाम गायब हुनेछ। के तपाईं पक्का यसो गर्न चाहनुहुन्छ?",
        "ipb-confirmaction": "यदि तपाईं विश्वासपूर्ण रूपले यहि गर्न चाहनुहुन्छ, भने कृपया \"{{int:ipb-confirm}}\" लाई क्षेत्रबाट छान्नुहोस्।",
        "ipb-edit-dropdown": "निषेध कारण सम्पादन गर्नुहोस्",
        "unblocked-range": "$1 लाई अनिषेधित गरियो",
        "unblocked-id": "$1 रोक हटाइएको छ",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] खुला भएको छ ।",
-       "blocklist": "निषà¥\87धित à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81",
-       "ipblocklist": "निषà¥\87धित à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81",
-       "ipblocklist-legend": "रà¥\8bà¤\95लà¤\97ाà¤\87à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 खोज्नुहोस",
+       "blocklist": "निषà¥\87धित à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
+       "ipblocklist": "निषà¥\87धित à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
+       "ipblocklist-legend": "रà¥\8bà¤\95लà¤\97ाà¤\87à¤\8fà¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 खोज्नुहोस",
        "blocklist-userblocks": "खाता निषेधित  लुकाउने",
        "blocklist-tempblocks": "अस्थाई रोकहरु लुकाउने",
        "blocklist-addressblocks": "एक्लो आई पी रोक लुकाउने",
        "reblock-logentry": "$2 $3 मा सकिने गरि  [[$1]] को निषेध स्थिति परिवर्तन गरिएको छ ।",
        "blocklogtext": "यो लग प्रयोगकर्ताको रोकावट र फुकुवा कार्यहरुको हो।\nस्वतः रोकिएका आईपी ठेगानाहरू सूचीमा छैनन्।\nवर्तमानका चालू रोक र प्रतिबन्धहरूको सूचीकोलागि हेर्नुहोस् [[Special:BlockList|आईपी निषेध सूची]]।",
        "unblocklogentry": "$1 लाई अनिषेधित गरियो",
-       "block-log-flags-anononly": "à¤\85à¤\9cà¥\8dà¤\9eात à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81 मात्र",
+       "block-log-flags-anononly": "à¤\85à¤\9cà¥\8dà¤\9eात à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 मात्र",
        "block-log-flags-nocreate": "खाता खोल्न निस्क्रिय पारिएको",
        "block-log-flags-noautoblock": "स्वत: निषेध निस्क्रिय गरिएको",
        "block-log-flags-noemail": "इमेल बन्देज गरिएको",
        "sorbs_create_account_reason": "तपाईको IP ठेगाना खुल्ला प्रोक्सीको रुपमा  DNSBL मा सुचीकरण गरिएको छ यसलाई{{SITENAME}}ले प्रयोगमा ल्याएको छ।\nतपाईले खाता खोल्न सक्नुहुन्न ।",
        "xffblockreason": "एउटा आइपि ठेगाना जुन X-Forwarded-For हेडरमा रहेको छ, या त तपाईंको हो वा त्यस प्रक्सी सर्भरको हो जसको प्रयोग तपाईं गर्दै हुनुहुन्छ र यस माथि प्रतिबन्ध लगाइएको छ। वास्तविक कारण थियो:$1",
        "cant-see-hidden-user": "तपाईले रोक लगाउन खोज्नु भएको प्रयोगकर्ता पहिले नै रोकलगाइ लुकाइ सकिएको छ ।\nतपाईसँग hideuser अधिकार नभएकोले यसलाई हेर्ना या सम्पादन गर्न सक्नुहुन्न ।",
-       "ipbblocked": "तपाà¤\88à¤\82लà¥\87 à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लाà¤\88 à¤ªà¥\8dरतिबनà¥\8dधित à¤\97रà¥\8dन à¤µà¤¾ à¤\89नà¥\80हरà¥\81à¤\95à¥\8b à¤ªà¥\8dरतिबनà¥\8dध à¤\96à¥\8bलà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन à¤\95िनभनà¥\87à¤\82 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\86फà¥\88à¤\82 प्रतिबन्धित हुनुहुन्छ।",
+       "ipbblocked": "तपाà¤\88à¤\82लà¥\87 à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लाà¤\88 à¤ªà¥\8dरतिबनà¥\8dधित à¤\97रà¥\8dन à¤µà¤¾ à¤\89नà¥\80हरà¥\82à¤\95à¥\8b à¤ªà¥\8dरतिबनà¥\8dध à¤\96à¥\8bलà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन à¤\95िनभनà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\86फà¥\88 प्रतिबन्धित हुनुहुन्छ।",
        "ipbnounblockself": "तपाई आफैले आफैलाई रोक खुलाउन सक्नुहुन्न ।",
        "lockdb": "डेटाबेस ताल्चामार्ने",
        "unlockdb": "डेटाबेसको ताल्चा खोल्ने",
-       "lockdbtext": "डेटाबेसमा ताला लगाउनाले सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो अभिरूचीमा परिवर्तन, आफ्नो ध्यानसूचीमा सम्पादन, र अन्य वस्तु जसको लागि डेटाबेसमा परिवर्तन गरें हुन्छ, त्यसबाट वन्चित हुनेछ। कृपया यो सुनिश्चित गर्नुहोस कि तपाईं यो गर्न चाहनुहुन्छ, र तपाईं रक्षण पश्चात ताला खोल्नुहुन्छ।",
+       "lockdbtext": "डेटाबेसमा ताला लगाउनाले सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो अभिरूचीमा परिवर्तन, आफ्नो ध्यानसूचीमा सम्पादन, र अन्य वस्तु जसको लागि डेटाबेसमा परिवर्तन गरें हुन्छ, त्यसबाट वन्चित हुनेछ। कृपया यो सुनिश्चित गर्नुहोस् कि तपाईं यो गर्न चाहनुहुन्छ, र तपाईं रक्षण पश्चात ताला खोल्नुहुन्छ ।",
        "unlockdbtext": "डेटाबेसको ताला खोल्नका लागि सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो अभिरूचीहरूमा परिवर्तन, आफ्नो ध्यानसूचीमा सम्पादन, र अन्य वस्तु जसको लागि डेटाबेसमा परिवर्तन गर्नु पर्छ, को सक्षमतालाई पुनर्स्थापित गर्नछ। कृपया यो सुनिश्चित गर्नुस कि तपाईं यो गर्न चाहनुहुन्छ।",
        "lockconfirm": "हो, म साँच्चिकै डेटाबेस थुन्न चाहन्छु।",
        "unlockconfirm": "हो , म साँच्चै  डेटाबेसको ताल्चा खोल्न चाहन्छु ।",
        "move-page": " $1 लाई सार्ने",
        "move-page-legend": "पृष्ठ सार्नुहोस्",
        "movepagetext": "तल दिएको फारमको उपयोगले पृष्ठ नाम परिवर्तन हुनेछ र पृष्ठको सम्पूर्ण इतिहास नयाँ नामको साथमा जानेछ।\nपुरानो शीर्षक नयाँ शीर्षककोलागि अनुप्रेषित पृष्ठ बनिनेछ।\nतपाईंले यो स्वचालित रूपले अनुप्रेषित पृष्ठलाई अपडेट गर्न सक्नुहुनेछ।\nयदि तपाईं हुँदैन चुन्नुहुन्छ भनें जाँचेर सुनिश्चित गर्नुहोस् कि [[Special:DoubleRedirects|दोहोरो]] अथवा [[Special:BrokenRedirects|टुटेको अनुप्रेषण]]।\nतपाईंमाथि यो सुनिश्चित गर्ने उत्तरदायित्व रहन्छ कि लिङ्क कुन विन्दुमा जानु पर्ने हो ।\n\nध्यान दिनुहोस् नयाँ नामको पृष्ठ पहिलेबाट नैं छ भनें पृष्ठ सारिने <strong>छैन</strong>। नयाँ नामको पृष्ठ पहिलेबाट भएर पनि यदि यो खालि छ अथवा अनुप्रेषित छ र सम्पादित इतिहास छैन भनें सारिनेछ।\nयसको अर्थ हुन्छ यदि कुनै गल्ती गरेमा तपाईंले पुनः पुरानै नाम दिनु पर्ने हुन्छ यसलाई अधिलेखन गर्नसक्नु हुनेछैन। \n\n<strong>चेतावनी!</strong>\nयो एक लोकप्रिय पृष्ठको लागि एउटा कठोर र अप्रत्याशित परिवर्तन हुनसक्नेछ;\nकृपया सुनिश्चित गर्नुहोस् कि तपाईंले यसको सही परिणाम बुझ्नु भएको छ अनि मात्र नयाँ नाम दिन अघि बढ्नुहोस्।",
-       "movepagetext-noredirectfixer": "तल दिइएको फारम पृष्ठको नाम परिवर्तन गर्नेछ, उसको सबै इतिहास पनि नयाँ नामले देखिनेछ।\nपुरानो शीर्षक नयाँ नाममा अनुप्रेषण गर्नेछ।\nमूल शीर्षक तर्फ लिएर जाने सबै अनुप्रेषणहरूलाई तपाईं स्वचालित रूपले परिवर्तन गर्न सक्नुहुन्छ।\nयदि तपाईं यसो गर्नुहुन्न भने कृपया [[Special:DoubleRedirects|दोहोरो]] पुनर्निर्देशन वा [[Special:BrokenRedirects|टुटेको पुनर्निर्देशन]]को लागि पक्कै जाँच गर्नुहोस।\nलिङ्क आफ्नो स्थानमै रहोस, यो सुनिश्चित गर्ने जिम्मेवारी तपाईंको हो।\n\nयदि नयाँ शीर्षकको लेख पहिले देखि छ भने स्थानान्तरण '''हुन''' सक्दैन। तर यदि नयाँ शीर्षक भएको लेख खाली छ अथवा कतै अन्य स्थानमा अनुप्रेषित गर्दैछ र साथै उसको पुरानो संस्करण छैन भने त्यो स्थानान्तरण हुनेछ।\nयसको अभिप्राय यो हो कि यदि तपाईंद्वारा गलती भएको छ भने तपाईं फेरी पुरानो नाममा यस पृष्ठलाई स्थानान्तरण गर्न सक्नुहुन्छ, र साथै तपाईं कुनै पहिले देखि रहेको पृष्ठको सट्टा यो स्थानान्तरण गर्न सक्नुहुन्न।\n\n<strong>चेतावनी!<strong>\nयदि पृष्ठ खासै लोकप्रिय छ भने त्यसको लागि यो एउटा ठुलो र अकस्मात परिवर्तन हुन सक्छ;\nअगाडी बढ्नु भन्दा पहिले तपाईं यसको नतिजासँग परिचित हुनुहुन्छ।",
+       "movepagetext-noredirectfixer": "तल दिइएको फारमले पृष्ठको नाम परिवर्तन गर्नेछ, उसको सबै इतिहास पनि नयाँ नामले देखिनेछ ।\nपुरानो शीर्षक नयाँ नाममा अनुप्रेषण गर्नेछ ।\nमूल शीर्षक तर्फ लिएर जाने सबै अनुप्रेषणहरूलाई तपाईं स्वचालित रूपले परिवर्तन गर्न सक्नुहुन्छ ।\nयदि तपाईं यसो गर्नुहुन्न भने कृपया [[Special:DoubleRedirects|दोहोरो]] पुनर्निर्देशन वा [[Special:BrokenRedirects|टुटेको पुनर्निर्देशन]]को लागि पक्कै जाँच गर्नुहोस् ।\nलिङ्क आफ्नो स्थानमै रहोस्, यो सुनिश्चित गर्ने जिम्मेवारी तपाईंको हो ।\n\nयदि नयाँ शीर्षकको लेख पहिले देखि छ भने नाम परिवर्तन '''हुन''' सक्दैन । तर यदि नयाँ शीर्षक भएको लेख खाली छ अथवा कतै अन्य स्थानमा अनुप्रेषित गर्दैछ र साथै उसको पुरानो संस्करण छैन भने त्यसको नाम परिवर्तन हुनेछ ।\nयसको अभिप्राय यो हो कि यदि तपाईंद्वारा गल्ती भएको छ भने तपाईं फेरी पुरानो नाममा यस पृष्ठलाई सार्न सक्नुहुन्छ, र साथै तपाईं कुनै पहिले देखि रहेको पृष्ठको सट्टा यो स्थानान्तरण गर्न सक्नुहुन्न।\n\n<strong>चेतावनी!<strong>\nयदि पृष्ठ खासै लोकप्रिय छ भने त्यसको लागि यो एउटा ठुलो र अकस्मात परिवर्तन हुन सक्छ;\nअगाडी बढ्नु भन्दा पहिले तपाईं यसको नतिजासँग परिचित हुनुहुन्छ।",
        "movepagetalktext": "संबद्ध वार्तालाप पृष्ठ स्वतः योसित जानेछ '''यदि'''\n* नयाँ नामको पृष्ठको वार्तालाप पृष्ठ रिक्त छैन अथवा\n* तपाईंले यसको सन्दूकमा अनचेक गर्नुहुन्छ भनें '''वार्तालाप पृष्ठ जानेछैन'''। \n\nयस्तो भएमा, तपाईंको इच्छाले आफैंले (manually) पृष्ठ सार्नु अथवा मिलाउनु पर्ने हुन्छ।",
        "movearticle": "पृष्ठ सार्नुहोस्",
        "moveuserpage-warning": "'''चेतावनी:''' तपाईंले प्रयोगकर्ता पृष्ठ सार्न आँट्नु भएकोछ। कृपया याद राख्नुहोस् पृष्ठ मात्र सारिने छ र प्रयोगकर्ताको अर्को नाम राख्न '''सकिंदैन'''।",
        "movenologintext": "पृष्ठ सार्नको लागि तपाई दर्ता गरिएको र [[Special:UserLogin|प्रवेश गरेको]] प्रयोगकर्ता हुनुपर्छ ।",
        "movenotallowed": "तपाईँलाई पृष्ठ सार्ने अनुमति छैन",
        "movenotallowedfile": "फाइल हटाउने अनुमति तपाईँलाई  छैन।",
-       "cant-move-user-page": "तपाà¤\88सà¤\81à¤\97 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठहरà¥\81 à¤¸à¤¾à¤°à¥\8dन à¤\85नà¥\81मतà¥\80 à¤\9bà¥\88न (सहपà¥\83षà¥\8dठहरà¥\81 बाहेक)",
-       "cant-move-to-user-page": "तपाà¤\88सà¤\81à¤\97 à¤ªà¥\83षà¥\8dठहरà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठमा à¤¸à¤¾à¤°à¥\8dन à¤\85नà¥\81मतà¥\80 à¤\9bà¥\88न (पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¸à¤¹à¤ªà¥\83षà¥\8dठहरमा बाहेक)",
+       "cant-move-user-page": "तपाà¤\88सà¤\81à¤\97 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठहरà¥\82 à¤¸à¤¾à¤°à¥\8dन à¤\85नà¥\81मतà¥\80 à¤\9bà¥\88न (सहपà¥\83षà¥\8dठहरà¥\82 बाहेक)",
+       "cant-move-to-user-page": "तपाà¤\88à¤\82लाà¤\88 à¤ªà¥\83षà¥\8dठहरà¥\82 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठमा à¤¸à¤¾à¤°à¥\8dन à¤\85नà¥\81मतà¥\80 à¤\9bà¥\88न (पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¸à¤¹à¤ªà¥\83षà¥\8dठहरà¥\82मा बाहेक)",
        "cant-move-category-page": "तपाईलाई श्रेणीको पृष्ठहरू सार्ने अनुमति छैन ।",
        "cant-move-to-category-page": "कुनै श्रेणी पृष्ठमा सार्नको लागी तपाईलाई अनुमति छैन ।",
        "newtitle": "नयाँ शीर्षकमा :",
        "articleexists": "यस नामको पृष्ठ पहिले देखि नै रहेको ,या तपाईँले छान्नु भएको नाम अमान्य छ।\nकृपया अर्कै नाम छान्नुहोस् ।",
        "cantmove-titleprotected": "तपाईले यो स्थानमा पृष्ठ सार्न सक्नुहुन्न, किनकी यो नयाँ शिर्षकलाई सिर्जना हुनबाट जोगाइएको छ",
        "movetalk": "सम्बन्धित वार्ता पृष्ठ",
-       "move-subpages": "सहायà¤\95 à¤ªà¥\83षà¥\8dठहरà¥\81 सार्ने($1 सम्मको)",
-       "move-talk-subpages": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤¹-पà¥\83षà¥\8dठहरà¥\81 सार्ने($1 सम्मको )",
+       "move-subpages": "सहायà¤\95 à¤ªà¥\83षà¥\8dठहरà¥\82 सार्ने($1 सम्मको)",
+       "move-talk-subpages": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤¹-पà¥\83षà¥\8dठहरà¥\82 सार्ने($1 सम्मको )",
        "movepage-page-exists": "$1 पृष्ठ पहिले देखि नै रहेको छ र स्वत: अधिलेखन गर्न सकिएन ।",
        "movepage-page-moved": " $1 पृष्ठलाई $2 मा सारियो ।",
        "movepage-page-unmoved": "$1 पृष्ठलाई $2 मा सार्न सकिएन ।",
-       "movepage-max-pages": "à¤\85धिà¤\95तम $1 {{PLURAL:$1|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठहरà¥\81}} सारिसकिएको छ र अरु स्वत: सारिने छैन ।",
+       "movepage-max-pages": "à¤\85धिà¤\95तम $1 {{PLURAL:$1|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठहरà¥\82}} सारिसकिएको छ र अरु स्वत: सारिने छैन ।",
        "movelogpage": "लग सार्ने",
-       "movelogpagetext": "सबà¥\88 à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81को सूची तल दिइएकोछ।",
+       "movelogpagetext": "सबà¥\88 à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82को सूची तल दिइएकोछ।",
        "movesubpage": "{{PLURAL:$1|उपपृष्ठ|उपपृष्ठहरू}}",
-       "movesubpagetext": "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b $1 {{PLURAL:$1|सह-पà¥\83षà¥\8dठ|सह-पà¥\83षà¥\8dठहरà¥\81}} तल देखाइएको :",
-       "movenosubpage": "यस à¤ªà¥\83षà¥\8dठà¤\95ा à¤\89प à¤ªà¥\83षà¥\8dठहरà¥\81 छैनन्।",
+       "movesubpagetext": "यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b $1 {{PLURAL:$1|सह-पà¥\83षà¥\8dठ|सह-पà¥\83षà¥\8dठहरà¥\82}} तल देखाइएको :",
+       "movenosubpage": "यस à¤ªà¥\83षà¥\8dठà¤\95ा à¤\89प à¤ªà¥\83षà¥\8dठहरà¥\82 छैनन्।",
        "movereason": "कारण :",
        "revertmove": "पहिलेको रुपमा फर्काउने",
        "delete_and_move": "मेट्ने अनि हटाउने",
        "imageinvalidfilename": "गन्तव्य फाइल नाम अमान्य छ।",
        "fix-double-redirects": "मुल शिर्षकमा केन्द्रित रिडाइरेक्टलाई अद्यावधिक गर्ने",
        "move-leave-redirect": "पछाडी एक अनुप्रेषण छोडिराख्ने",
-       "protectedpagemovewarning": "<strong>सà¥\82à¤\9aना:</strong> à¤¯à¤¸ à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¤¯à¤¸à¤\95ारण à¤ªà¥\8dरवनà¥\8dधनà¤\95à¥\8b à¤µà¤¿à¤¶à¥\87षाधिà¤\95ार à¤ªà¥\8dरापà¥\8dत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81लà¥\87 à¤®à¤¾à¤¤à¥\8dर à¤¯à¤¸à¤²à¤¾à¤\88 à¤¸à¤®à¥\8dपादन à¤\97र्न सक्छन् ।\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइएको छ:",
+       "protectedpagemovewarning": "<strong>सà¥\82à¤\9aना:</strong> à¤¯à¤¸ à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¤¯à¤¸à¤\95ारण à¤ªà¥\8dरवनà¥\8dधà¤\95à¤\95à¥\8b à¤µà¤¿à¤¶à¥\87षाधिà¤\95ार à¤ªà¥\8dरापà¥\8dत à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82लà¥\87 à¤®à¤¾à¤¤à¥\8dर à¤¯à¤¸à¤²à¤¾à¤\88 à¤¸à¤¾र्न सक्छन् ।\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइएको छ:",
        "semiprotectedpagemovewarning": "<strong>सूचना:</strong> यो पृष्ठलाई सुरक्षित गरिएको हुँदा दर्ता भएका प्रयोगकर्ताहरूले मात्र यसलाई सम्पादन गर्न सक्छन् ।\nसन्दर्भको लागि नविनतम लग प्रविष्टि तल दिइएको छ:",
        "move-over-sharedrepo": "==फाइल पहिले देखि छ==\n[[$1]] एक साझा भण्डारमा पहिले देखि नै छ। यस नामको स्थानान्तरणले नयाँ फाइल साझा फाइललाई ओभरराइड गर्नेछ।",
        "file-exists-sharedrepo": "छानिएको फाइल नाम पहिले देखि नै साझा भण्डारमा प्रयोगमा छ। कृपया अन्य नाम छान्नुहोस्।",
        "export": "पृष्ठहरू निर्यात गर्ने",
-       "exporttext": "तपाईं विशिष्ठ पृष्ठको विषय वस्तु र सम्पादन इतिहासलाई निर्यात गर्न सक्नुहुन्छ अथवा पृष्ठहरूको समूहका केहि XML मा बेर्न सक्नुहुन्छ।\nयो [[Special:Import|आयात पृष्ठ]]को सहायताले मीडियाविकीको प्रयोग गरेर दोश्रो विकीबाट आयात गर्न सकिनेछ।\n\nपृष्ठहरूको निर्यात गर्नका लागि, तल विषय वस्तु बाकसमा शीर्षक दिनुहोस, एक शीर्षक प्रति पङ्क्ति, र छान्नुहोस् कि तपाईं वर्तमान अवतरणसँग पुरानै अवतरण पनि चाहनुहुन्छ वा चाहनुहुन्न, वा पछिल्लो सम्पादनको बारेमा जानकारीसँग मात्रै वर्तमान अवतरण चाहनुहुन्छ।\n\nपछीको स्थितिको लागि तपाईं लिङ्कको पनि प्रयोग गर्न सक्नुहुन्छ, उदाहरणको लागि, \"[[{{MediaWiki:Mainpage}}]]\" पृष्ठको लागि [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
+       "exporttext": "तपाईं विशिष्ठ पृष्ठको विषय वस्तु र सम्पादन इतिहासलाई निर्यात गर्न सक्नुहुन्छ अथवा पृष्ठहरूको समूहका केहि XML मा बेर्न सक्नुहुन्छ।\nयो [[Special:Import|आयात पृष्ठ]]को सहायताले मीडियाविकीको प्रयोग गरेर दोश्रो विकीबाट आयात गर्न सकिनेछ।\n\nपृष्ठहरूको निर्यात गर्नका लागि, तल विषय वस्तु बाकसमा शीर्षक दिनुहोस, एक शीर्षक प्रति पङ्क्ति, र छान्नुहोस् कि तपाईं वर्तमान अवतरणसँग पुरानै अवतरण पनि चाहनुहुन्छ वा चाहनुहुन्न, वा पछिल्लो सम्पादनको बारेमा जानकारीसँग मात्रै वर्तमान अवतरण चाहनुहुन्छ।\n\nपछीको स्थितिको लागि तपाईं लिङ्कको पनि प्रयोग गर्न सक्नुहुन्छ, उदाहरणको लागि, \"[[{{MediaWiki:Mainpage}}]]\" पृष्ठको लागि [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
        "exportall": "सबै पृष्ठहरू निर्यात गर्ने",
        "exportcuronly": "हालको संस्करण मात्र थप्ने ,पूरा इतिहास हैन",
        "exportnohistory": "----\n<strong>सूचना:</strong> यस फारमको प्रयोग गरेर पृष्ठको पुरै इतिहास निर्यात गर्दा प्रदर्शन कारणले अक्षम गरिएको छ।",
        "export-addnstext": "नेमस्पेसबाट पृष्ठ थप्ने :",
        "export-addns": "थप्ने",
        "export-download": "सङ्ग्रह गर्ने",
-       "export-templates": "ढाà¤\81à¤\9aाहरà¥\81 संलग्न गर्नुहोस्",
+       "export-templates": "ढाà¤\81à¤\9aाहरà¥\82 संलग्न गर्नुहोस्",
        "export-pagelinks": "जोडिएको पृष्ठलाई यस गहराईसम्म समाबेश गर्नेः",
        "allmessages": "सिस्टम सन्देशहरू",
        "allmessagesname": "नाम",
        "import-interwiki-text": "आयात गर्नका लागि एक विकि वा एक पृष्ठ छान्नुहोस्।\nअवतरण मिति र सम्पादकहरूको नाम उस्तै राखिनेछ। अन्य विकिबाट सबै आयात [[Special:Log/import|आयात लग]]मा राखिन्छ।",
        "import-interwiki-sourcewiki": "श्रोत विकिः",
        "import-interwiki-sourcepage": "श्रोत पृष्ठः",
-       "import-interwiki-history": "यà¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8bलाà¤\97ि à¤¸à¤¬à¥\88 à¤\87तिहास à¤¸à¤\82शà¥\8bधनहरà¥\81 प्रतिलिपि गर्ने",
+       "import-interwiki-history": "यà¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8bलाà¤\97ि à¤¸à¤¬à¥\88 à¤\87तिहास à¤¸à¤\82शà¥\8bधनहरà¥\82 प्रतिलिपि गर्ने",
        "import-interwiki-templates": "सबै टेम्प्लेटहरु(नमुना) समेट्ने",
        "import-interwiki-submit": "आयात",
        "import-mapping-default": "पूर्वनिर्धारित स्थानहरूमा आयात",
        "importuploaderrorpartial": "आयात फाइलको अपलोड असफल भयो।\nफाइल आंशिकरुपमा अपलोड भयो।",
        "importuploaderrortemp": "आयात फाइलको अपलोड असफल भयो।\nअस्थाइ फोल्डर हराइरहेको छ।",
        "import-parse-failure": "XML आयात अध्यन असफल",
-       "import-noarticle": "à¤\86यात à¤\97रà¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\83षà¥\8dठहरà¥\81 छैनन्",
+       "import-noarticle": "à¤\86यात à¤\97रà¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\83षà¥\8dठहरà¥\82 छैनन्",
        "import-nonewrevisions": "सबै पुनरावलोकनहरू पहिले नै आयात गरिएको हो।",
        "xml-error-string": "$1  पंक्ति $2 , हरफ $3 (बाइट $4): $5",
        "import-upload": "XML डेटा अपलोड गर्ने",
        "import-rootpage-nosubpage": "दिइएको उपसर्ग पृष्ठ \"$1\" को नामस्थानमा उप-पृष्ठ बनाउन सकिंदैन।",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "अन्य विकिहरूबाट प्रवन्धकहरूद्वारा गरिएको सम्पादन इतिहाससँग हुने पृष्ठहरूको आयात।",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|सà¤\82शà¥\8bधन|सà¤\82शà¥\8bधनहरà¥\81}} आयात भयो",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|सà¤\82शà¥\8bधन|सà¤\82शà¥\8bधनहरà¥\82}} आयात भयो",
        "import-logentry-interwiki-detail": "$2 देखि $1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}} आयात भयो",
        "javascripttest": "JavaScript जाँच गरिदै",
        "javascripttest-pagetext-noframework": "यो पृष्ठ जाभास्क्रिपट जाँचहरूको लागी जगेडामा राखिएको छ ।",
        "tooltip-ca-protect": "यो पृष्ठलाई संरक्षित गर्नुहोस्",
        "tooltip-ca-unprotect": "यस पृष्ठको सुरक्षा परिवर्तन गर्ने",
        "tooltip-ca-delete": "यो पृष्ठ मेटाउनुहोस्",
-       "tooltip-ca-undelete": "मà¥\87à¤\9fिपà¤\95à¥\8b à¤­à¤\8f à¤ªà¤¨à¤¿ à¤¯à¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤®à¥\8dपादनहरà¥\81 पुन:प्राप्त गर्नुहोस्",
+       "tooltip-ca-undelete": "मà¥\87à¤\9fिà¤\8fà¤\95à¥\8b à¤­à¤\8f à¤ªà¤¨à¤¿ à¤¯à¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤®à¥\8dपादनहरà¥\82 पुन:प्राप्त गर्नुहोस्",
        "tooltip-ca-move": "यो पृष्ठलाई सार्नुहोस्",
        "tooltip-ca-watch": "यो पृष्ठलाई तपाईँको अवलोकनसूचीमा थप्नुहोस्",
        "tooltip-ca-unwatch": "यो पृष्ठलाई तपाईँको अवलोकनसूचीबाट हटाउनुहोस्",
        "tooltip-n-recentchanges": "विकिमा गरिएका हालैका परिवर्तनहरुको सूची",
        "tooltip-n-randompage": "जुन कुनै पृष्ठ खोल्ने",
        "tooltip-n-help": "पत्तालगाउनु पर्ने स्थान",
-       "tooltip-t-whatlinkshere": "यà¥\8b à¤¸à¤\81à¤\97 à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤¸à¤¬à¥\88 à¤µà¤¿à¤\95ि à¤ªà¥\83षà¥\8dठहरà¥\81को सूची",
-       "tooltip-t-recentchangeslinked": "यस à¤ªà¥\83षà¥\8dठमा à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81मा हालैको परिवर्तन",
+       "tooltip-t-whatlinkshere": "यà¥\8b à¤¸à¤\81à¤\97 à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤¸à¤¬à¥\88 à¤µà¤¿à¤\95ि à¤ªà¥\83षà¥\8dठहरà¥\82को सूची",
+       "tooltip-t-recentchangeslinked": "यस à¤ªà¥\83षà¥\8dठमा à¤\9cà¥\8bडिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82मा हालैको परिवर्तन",
        "tooltip-feed-rss": "यो पृष्ठको लागि RSS फिड",
        "tooltip-feed-atom": "यो पृष्ठको लागि एटम फिड",
        "tooltip-t-contributions": "यस प्रयोगकर्ताका योगदानहरूको सूची हेर्नुहोस्",
        "lastmodifiedatby": "यो पृष्ठ अन्तिमपटक $3द्वारा $2, $1 मा परिवर्तन गरिएको थियो।",
        "othercontribs": "$1 को कामको आधारमा",
        "others": "अन्य",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81}} $1",
-       "anonusers": "{{SITENAME}} à¤\95ा à¤¨à¤¾à¤® à¤¨à¤­à¤\8fà¤\95ा {{PLURAL:$2| à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\81}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82}} $1",
+       "anonusers": "{{SITENAME}} à¤\95ा à¤¨à¤¾à¤® à¤¨à¤­à¤\8fà¤\95ा {{PLURAL:$2| à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता|पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82}} $1",
        "creditspage": "क्रेडिट पृष्ठ",
        "nocredits": "यो पृष्ठको लागि कुनै श्रेय उपलब्ध छैन ।",
        "spamprotectiontitle": "स्प्याम सुरक्षा फिल्टर",
        "markaspatrolledtext": "यस पृष्ठलाई गस्ती गरिएको(patrolled) को रुपमा चिनो लगाउने",
        "markedaspatrolled": "गस्ती गरिएको(patrolled) को रुपमा चिनो लगाइयो",
        "markedaspatrolledtext": "[[:$1]] को छानिएको संस्करणलाई गस्ती गरिएको भनि चिनो लगाइएको छ।",
-       "rcpatroldisabled": "हालसालà¥\88à¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 गस्ती निस्कृय पारिएको छ।",
-       "rcpatroldisabledtext": "हालसालà¥\88à¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 गस्ती गुण हालको लागि निश्कृय पारिएको छ ।",
+       "rcpatroldisabled": "हालसालà¥\88à¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 गस्ती निस्कृय पारिएको छ।",
+       "rcpatroldisabledtext": "हालसालà¥\88à¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 गस्ती गुण हालको लागि निश्कृय पारिएको छ ।",
        "markedaspatrollederror": "गस्ती गरिएको भनी चिनो लगाउन सकिएन ।",
        "markedaspatrollederrortext": "गस्ती गरिएको भनि चिनो लगाउनको निम्ती संस्करण खुलाउनु पर्छ ।",
        "markedaspatrollederror-noautopatrol": "तपाईको आफ्नै सम्पादनलाई गस्ती गरिएको भनि चिनो लउन पाइदैन ।",
        "markedaspatrollednotify": "$1 मा गरिएको यो परिवर्तनलाई गस्ति गरिएको चिन्ह लगाइएको छ ।",
        "markedaspatrollederrornotify": "गस्ती अङ्कित गर्न विफल।",
        "patrol-log-page": "निगरानीको लग",
-       "patrol-log-header": "à¤\97सà¥\8dतà¥\80 à¤\97रिà¤\8fà¤\95ा à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\81को लग यस प्रकार रहेका छन् ।",
+       "patrol-log-header": "à¤\97सà¥\8dतà¥\80 à¤\97रिà¤\8fà¤\95ा à¤¸à¤\82सà¥\8dà¤\95रणहरà¥\82को लग यस प्रकार रहेका छन् ।",
        "log-show-hide-patrol": "$1 निगरानी लग",
        "log-show-hide-tag": "$1 ट्याग लग",
        "deletedrevision": "पुराना पुनरावलोकनहरु $1 मेटिए",
        "imagemaxsize": "तस्विर आकार सिमा:<br />''(फाइल जानकारी पृष्ठको लागि )''",
        "thumbsize": "थम्बनेल आकार:",
        "widthheight": "$1 × $2",
-       "widthheightpage": "$1 Ã\97 $2, $3 {{PLURAL:$3|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठहरà¥\81}}",
+       "widthheightpage": "$1 Ã\97 $2, $3 {{PLURAL:$3|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठहरà¥\82}}",
        "file-info": "फाइल आकार: $1, MIME प्रकार: $2",
        "file-info-size": "$1 × $2 पिक्सेलहरु, फाइल आकार: $3, MIME प्रकार: $4",
-       "file-info-size-pages": "$1 Ã\97 $2 à¤ªà¤¿à¤\95à¥\8dसà¥\87लहरà¥\81, à¤«à¤¾à¤\87ल à¤\86à¤\95ार: $3, MIME à¤ªà¥\8dरà¤\95ार: $4, $5 {{PLURAL:$5|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठहरà¥\81}}",
+       "file-info-size-pages": "$1 Ã\97 $2 à¤ªà¤¿à¤\95à¥\8dसà¥\87लहरà¥\82, à¤«à¤¾à¤\87ल à¤\86à¤\95ार: $3, MIME à¤ªà¥\8dरà¤\95ार: $4, $5 {{PLURAL:$5|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठहरà¥\82}}",
        "file-nohires": "उच्च रिजोल्युशन अनुपलब्ध",
        "svg-long-desc": "SVG फाइल,साधारण $1 × $2 पिक्सेलहरु, फाइल आकार: $3",
        "svg-long-desc-animated": "एनिमेटेड एसभिजी फाइल, नाममात्र $1 × $2 पिक्सेल, फाइल आकार: $3",
        "file-info-png-frames": "$1 {{PLURAL:$1|फ्रेम|फ्रेमहरु}}",
        "file-no-thumb-animation": "<strong>टिप्पणी: प्राविधिक सीमाको कारण, यस फाइलको थम्बनेल एनिमेटेड गर्न सकिदैन।</strong>",
        "file-no-thumb-animation-gif": "<strong>सूचना:प्राविधिक समस्याहरूको कारण यस फाइल जस्तै अधिक रिजोल्युसन जीआइयफ चित्रहरूको थम्बनेल ऐनिमेटेड हुँदैन।</strong>",
-       "newimages": "नयाà¤\81 à¤«à¤¾à¤\87लहरà¥\81को ग्यालरी",
-       "imagelisttext": " '''$1''' {{PLURAL:$1|फाà¤\87ल|फाà¤\87लहरà¥\81}} à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dन à¤¸à¥\81ची ,क्रमवद्ध $2.",
-       "newimages-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\85नà¥\8dतिम à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\95ा à¤«à¤¾à¤\87लहरà¥\81 देखाउँछ ।",
+       "newimages": "नयाà¤\81 à¤«à¤¾à¤\87लहरà¥\82को ग्यालरी",
+       "imagelisttext": " '''$1''' {{PLURAL:$1|फाà¤\87ल|फाà¤\87लहरà¥\82}} à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dन à¤¸à¥\82ची ,क्रमवद्ध $2.",
+       "newimages-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\85नà¥\8dतिम à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82 देखाउँछ ।",
        "newimages-legend": "फिल्टर",
        "newimages-label": "फाइल अथवा (यसको एउटा अंश)को नाम:",
        "newimages-showbots": "बोटहरूद्वारा गरिएको अपलोड देखाउने",
        "seconds": "{{PLURAL:$1|$1 सेकेन्ड|$1 सेकेन्डहरु}}",
        "minutes": "{{PLURAL:$1|$1 मिनेट|$1 मिनेटहरु}}",
        "hours": "{{PLURAL:$1|$1 घण्टा|$1 घण्टाहरु}}",
-       "days": "{{PLURAL:$1|$1 à¤¦à¤¿à¤¨|$1 à¤¦à¤¿à¤¨à¤¹à¤°à¥\81}}",
+       "days": "{{PLURAL:$1|$1 à¤¦à¤¿à¤¨|$1 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82}}",
        "weeks": "{{PLURAL:$1|$1 हप्ता|$1 हप्ताहरू}}",
        "months": "{{PLURAL:$1|$1 महिना|$1 महिनाहरू}}",
        "years": "{{PLURAL:$1|$1 वर्ष|$1 वर्षहरू}}",
        "exif-ycbcrpositioning-2": "सह-कुर्सीरहेको",
        "exif-dc-contributor": "योगदानकर्ताहरु",
        "exif-dc-coverage": "मेडियाको स्पाटिएल(आयाम) वा टेम्पोरल(काल) सान्दर्भिकता",
-       "exif-dc-date": "मिति(हरà¥\81)",
+       "exif-dc-date": "मिति(हरà¥\82)",
        "exif-dc-publisher": "प्रकाशक",
        "exif-dc-relation": "सम्वन्धित मेडिया",
        "exif-dc-rights": "अधिकारहरु",
        "autoredircomment": "पृष्ठ[[$1]]मा पठाइएको",
        "autosumm-new": " $1 को साथमा पृष्ठ शृजना भयो",
        "autosumm-newblank": "खाली पृष्ठ तयार गर्ने",
-       "size-bytes": "$1 à¤¬à¤¾à¤\87à¤\9fहरà¥\81",
-       "size-kilobytes": "$1 à¤\95िलà¥\8bबाà¤\87à¤\9fहरà¥\81",
-       "size-megabytes": "$1 à¤®à¥\87à¤\97ाबाà¤\87à¤\9fहरà¥\81",
-       "size-gigabytes": "$1 à¤\97िà¤\97ाबाà¤\87à¤\9fहरà¥\81",
-       "lag-warn-normal": " $1 {{PLURAL:$1|सà¥\87à¤\95à¥\87नà¥\8dड |सà¥\87à¤\95à¥\87नà¥\8dडहरà¥\81}} à¤­à¤¨à¥\8dदा à¤¨à¤¯à¤¾à¤\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 à¤¯à¤¸ à¤¸à¥\81चीमा नदेखाइन सक्छ ।",
-       "lag-warn-high": "डà¥\87à¤\9fावà¥\87स à¤¸à¤°à¥\8dभरà¤\95à¥\8b à¤§à¥\87रà¥\88 à¤¢à¤¿à¤²à¤¾à¤\87à¤\95à¥\8b à¤\95ारणलà¥\87  $1 {{PLURAL:$1|सà¥\87à¤\95à¥\87नà¥\8dड|सà¥\87à¤\95à¥\87नà¥\8dडहरà¥\81}} à¤ªà¤\9bिà¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 नदेखिन सक्छ ।",
+       "size-bytes": "$1 à¤¬à¤¾à¤\87à¤\9fहरà¥\82",
+       "size-kilobytes": "$1 à¤\95िलà¥\8bबाà¤\87à¤\9fहरà¥\82",
+       "size-megabytes": "$1 à¤®à¥\87à¤\97ाबाà¤\87à¤\9fहरà¥\82",
+       "size-gigabytes": "$1 à¤\97िà¤\97ाबाà¤\87à¤\9fहरà¥\82",
+       "lag-warn-normal": " $1 {{PLURAL:$1|सà¥\87à¤\95à¥\87नà¥\8dड |सà¥\87à¤\95à¥\87नà¥\8dडहरà¥\82}} à¤­à¤¨à¥\8dदा à¤¨à¤¯à¤¾à¤\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 à¤¯à¤¸ à¤¸à¥\82चीमा नदेखाइन सक्छ ।",
+       "lag-warn-high": "डà¥\87à¤\9fावà¥\87स à¤¸à¤°à¥\8dभरà¤\95à¥\8b à¤§à¥\87रà¥\88 à¤¢à¤¿à¤²à¤¾à¤\87à¤\95à¥\8b à¤\95ारणलà¥\87  $1 {{PLURAL:$1|सà¥\87à¤\95à¥\87नà¥\8dड|सà¥\87à¤\95à¥\87नà¥\8dडहरà¥\82}} à¤ªà¤\9bिà¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 नदेखिन सक्छ ।",
        "watchlistedit-normal-title": " निगरानी सूची सम्पादन गर्ने",
        "watchlistedit-normal-legend": "शीर्षकहरु निगरानी सूचीबाट हटाउने",
        "watchlistedit-normal-explain": "तपाईंको ध्यानसूचीमा सूचीबद्ध पृष्ठ तल दिइएको छ। पृष्ठ सूचीबाट हटाउनका लागि त्यस अगाडी दिइएको बाकस \"{{int:Watchlistedit-normal-submit}}\" मा क्लिक गर्नुहोस, र शीर्षकहरू हटाउनेमा क्लिक गर्नुहोस। तपाईं [[Special:EditWatchlist/raw|कच्चा ध्यानसूची]]लाई पनि सम्पादन गर्न सक्नुहुन्छ।",
        "watchlistedit-clear-removed": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} हटाइयो:",
        "watchlistedit-too-many": "यहाँ देखाउनका लागि अति धेरै पृष्ठहरू छन्",
        "watchlisttools-clear": "अवलोकन सूची खाली गर्ने",
-       "watchlisttools-view": "मिलà¥\8dदà¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81 हेर्ने",
+       "watchlisttools-view": "मिलà¥\8dदà¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82 हेर्ने",
        "watchlisttools-edit": "निगरानी सूची हेर्नुहोस् र सम्पादन गर्नुहोस्",
        "watchlisttools-raw": "कच्चा निगरानी सूची सम्पादन गर्नुहोस् ।",
        "iranian-calendar-m1": "फार्भारदिन",
        "fileduplicatesearch-noresults": "\"$1\" नामको फाइल पाइएन।",
        "specialpages": "विशेष पृष्ठ",
        "specialpages-note-top": "आदर्श वाक्य",
-       "specialpages-note": "* à¤¸à¤¾à¤§à¤¾à¤°à¤£ à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठहरà¥\81।\n* <span class=\"mw-specialpagerestricted\">निषà¥\87धित à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठहरà¥\81।</span>",
+       "specialpages-note": "* à¤¸à¤¾à¤§à¤¾à¤°à¤£ à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठहरà¥\82।\n* <span class=\"mw-specialpagerestricted\">निषà¥\87धित à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठहरà¥\82।</span>",
        "specialpages-group-maintenance": "मर्मत प्रतिवेदनहरु",
        "specialpages-group-other": "अरू विशेष पृष्ठहरू",
        "specialpages-group-login": "प्रवेश गर्ने / नयाँ खाता बनाउने",
-       "specialpages-group-changes": "भरà¥\8dà¤\96रà¥\88à¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤° à¤²à¤\97हरà¥\81",
+       "specialpages-group-changes": "भरà¥\8dà¤\96रà¥\88à¤\95ा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤° à¤²à¤\97हरà¥\82",
        "specialpages-group-media": "मेडिया प्रतिवेदन र उर्ध्वभरणहरु",
        "specialpages-group-users": "प्रयोगकर्ता र अधिकारहरु",
        "specialpages-group-highuse": "उच्च प्रयोग भएका पृष्ठहरू",
        "blankpage": "खाली पृष्ठहरू",
        "intentionallyblankpage": "यो पृष्ठ जानी जानी खाली राखिएको हो ।",
        "external_image_whitelist": " #यस पंक्तिलाई जस्ताको तस्तै छोड़नुहोस्<pre>\n#नियमित अभिव्यक्तिका निम्न टुक्राहरु हाल्नुहोस् ( //को बीचका भागहरु मात्र)\n#बाहिरका यु आर एल (hotlinked) सित मिलाइनेछ।\n#जो मिलानको शर्तमा पर्छन् तिनलाई चित्रको रुपमा प्रदर्शित गरिनेछ, नत्र चित्रको लिंक मात्र दर्शाइनेछ \n# #बाट सुरु हुने पंक्तिहरुलाई टिप्पणीको रुपमा मानिनेछ\n#यो वर्ण सम्वेदनशील छ\n\n#यो पंक्तिमाथि रिजेक्स(regex) टुक्रा दिनुहोस्। यस पंक्तिलाई जस्ताको तस्तै छोड़नुहोस्</pre>",
-       "tags": "मानà¥\8dय à¤\9fà¥\8dयाà¤\97 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81",
+       "tags": "मानà¥\8dय à¤\9fà¥\8dयाà¤\97 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82",
        "tag-filter": "[[Special:Tags|पुच्छर]] फिल्टर:",
        "tag-filter-submit": "फिल्टर",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
        "tags-delete": "मेट्ने",
        "tags-activate": "सक्रिय गर्ने",
        "tags-deactivate": "निष्क्रिय गर्ने",
-       "tags-hitcount": "$1 {{PLURAL:$1|परिवरà¥\8dतन|परिवरà¥\8dतनहरà¥\81}}",
+       "tags-hitcount": "$1 {{PLURAL:$1|परिवरà¥\8dतन|परिवरà¥\8dतनहरà¥\82}}",
        "tags-manage-no-permission": "ट्याग मिलान गर्नको लागि तपाईँलाई अनुमति छैन।",
        "tags-create-heading": "नयाँ ट्याग बनाउने",
        "tags-create-explanation": "पुनः निर्धारित रूपले, नवनिर्मित ट्याग प्रयोगकर्ताहरू र बोटहरूको लागी रहनेछ।",
        "tags-delete-title": "ट्याग मेट्नुहोस्",
        "tags-delete-explanation-initial": "तपाईले ट्याग \"$1\" लाई डाटावेसबाट हटाउन खोज्दै हुनु हुन्छ ।",
        "tags-delete-explanation-in-use": "ट्यागलाई {{PLURAL:$2|$2 संशोधन वा लग प्रविष्टि|सबै $2 संशोधन र/वा लग प्रविष्टिहरू}}बाट हटाइनेछ जहाँ अहिले त्यसको प्रयोग गरिंदै छ।",
-       "tags-delete-explanation-warning": "यà¥\8b à¤\95à¥\8dरिया <strong>à¤\85परिवरà¥\8dतनà¥\80य</strong> à¤¹à¥\8b à¤° <strong>तà¥\8dयसलाà¤\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¸à¤\95िà¤\82दà¥\88न</strong>, à¤¡à¥\87à¤\9fाà¤\9fाबà¥\87स à¤ªà¥\8dरवनà¥\8dधà¤\95 à¤ªà¤¨à¤¿ à¤¯à¤¸à¤²à¤¾à¤\88 à¤\95à¥\87हि à¤\97रà¥\8dन à¤¸à¤\95à¥\8dदà¥\88ननà¥\8d। à¤µà¤¿à¤¶à¥\8dवासपà¥\82रà¥\8dण à¤°à¥\82पलà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¤à¤¯ à¤\97रà¥\8dनà¥\81स कि तपाईं यस ट्यागलाई हटाउन चाहनुहुन्छ।",
+       "tags-delete-explanation-warning": "यà¥\8b à¤\95à¥\8dरिया <strong>à¤\85परिवरà¥\8dतनà¥\80य</strong> à¤¹à¥\8b à¤° <strong>तà¥\8dयसलाà¤\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¸à¤\95िà¤\82दà¥\88न</strong>, à¤¡à¥\87à¤\9fाबà¥\87स à¤ªà¥\8dरवनà¥\8dधà¤\95 à¤ªà¤¨à¤¿ à¤¯à¤¸à¤²à¤¾à¤\88 à¤\95à¥\87हि à¤\97रà¥\8dन à¤¸à¤\95à¥\8dदà¥\88ननà¥\8d। à¤µà¤¿à¤¶à¥\8dवासपà¥\82रà¥\8dण à¤°à¥\82पलà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¤à¤¯ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d कि तपाईं यस ट्यागलाई हटाउन चाहनुहुन्छ।",
        "tags-delete-explanation-active": "<strong>ट्याग \"$1\" अहिले पनि सक्रिय छ, र यसको प्रयोग भविष्यमा पनि जारी रहनेछ।</strong> यसलाई रोकनका लागि, ती स्थानहरूमा जानुहोस जहाँ यस ट्यागको प्रयोग भइरहेको छ र त्यहाँ देखि यसलाई अक्षम गर्नुहोस।",
        "tags-delete-reason": "कारण:",
        "tags-delete-submit": "उल्टाउन नसकिने गरि यो ट्यागलाई मेटाउने",
        "feedback-back": "अघिल्लो",
        "feedback-bugcheck": "राम्रो! जाँच्नुस की कतै [ $1 ज्ञात बगहरू] पहिले देखि नै नहोस्।",
        "feedback-bugnew": "मैले जाँच गरिसके। नयाँ बगको खबर दिनुहोस्",
-       "feedback-bugornote": "यदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\95à¥\81नà¥\88 à¤ªà¥\8dराविधिà¤\95 à¤¸à¤®à¤¸à¥\8dयालाà¤\88 à¤µà¤¿à¤¸à¥\8dतारलà¥\87 à¤¸à¤®à¤\9dाà¤\89न à¤¤à¤¯à¤¾à¤° à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b à¤­à¤¨à¥\87 à¤\95à¥\83पया [$1 à¤¬à¤\97 à¤°à¤¾à¤\96à¥\8dनà¥\81हà¥\8bस]।\nयदि à¤¹à¥\88न, à¤­à¤¨à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¤à¤² à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b à¤¸à¤°à¤² à¤«à¤¾à¤°à¤®à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनसà¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b। à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\9fिपà¥\8dपणà¥\80 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤° à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¬à¥\8dराà¤\89à¤\9cरà¤\95à¥\8b à¤¨à¤¾à¤® à¤¸à¤¹à¤¿à¤¤ \"[$3 $2]\" à¤ªà¥\83षà¥\8dठ मा जोडिनेछ।",
+       "feedback-bugornote": "यदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\95à¥\81नà¥\88 à¤ªà¥\8dराविधिà¤\95 à¤¸à¤®à¤¸à¥\8dयालाà¤\88 à¤µà¤¿à¤¸à¥\8dतारलà¥\87 à¤¸à¤®à¥\8dà¤\9dाà¤\89न à¤¤à¤¯à¤¾à¤° à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b à¤­à¤¨à¥\87 à¤\95à¥\83पया [$1 à¤¬à¤\97 à¤°à¤¾à¤\96à¥\8dनà¥\81हà¥\8bस]।\nयदि à¤¹à¥\88न, à¤­à¤¨à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¤à¤² à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b à¤¸à¤°à¤² à¤«à¤¾à¤°à¤®à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनसà¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b। à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\9fिपà¥\8dपणà¥\80 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤° à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¬à¥\8dराà¤\89à¤\9cरà¤\95à¥\8b à¤¨à¤¾à¤® à¤¸à¤¹à¤¿à¤¤ \"[$3 $2]\" à¤ªà¥\83षà¥\8dठमा जोडिनेछ।",
        "feedback-cancel": "रद्द गर्ने",
        "feedback-close": "गरियो",
        "feedback-external-bug-report-button": "प्राविधिक कार्य पेश गर्नुहोस्",
        "api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
        "api-error-badtoken": "आन्तरिक समस्याः खराब टोकन ।",
        "api-error-copyuploaddisabled": "यस सर्वरमा URL द्वारा अपलोड गर्ने व्यवस्था निस्क्रिय गरिएकोछ।",
-       "api-error-duplicate": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤\9b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\81 छन्]}} ।",
-       "api-error-duplicate-archive": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤¥à¤¿à¤¯à¥\8b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\81 थिए]}} ।\nतर {{PLURAL:$1|यो मेटाइएको थियो|यी मेटाइएका थिए}} ।",
-       "api-error-duplicate-archive-popup-title": "पहिलà¥\87  {{PLURAL:$1|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤«à¤¾à¤\87लà¤\95à¥\8b|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81को}} नकल प्रति बनाउने।",
-       "api-error-duplicate-popup-title": "{{PLURAL:$1|फाà¤\87ल|फाà¤\87लहरà¥\81}} नकल प्रति बनाउने",
+       "api-error-duplicate": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤\9b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\82 छन्]}} ।",
+       "api-error-duplicate-archive": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤¥à¤¿à¤¯à¥\8b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\82 थिए]}} ।\nतर {{PLURAL:$1|यो मेटाइएको थियो|यी मेटाइएका थिए}} ।",
+       "api-error-duplicate-archive-popup-title": "पहिलà¥\87  {{PLURAL:$1|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤«à¤¾à¤\87लà¤\95à¥\8b|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82को}} नकल प्रति बनाउने।",
+       "api-error-duplicate-popup-title": "{{PLURAL:$1|फाà¤\87ल|फाà¤\87लहरà¥\82}} नकल प्रति बनाउने",
        "api-error-empty-file": "तपाईंले बुझाएको फाइल खालि छ।",
        "api-error-emptypage": "नयाँ तयार गर्दै, खाली पृष्ठ तयार गर्न अनुमति छैन ।",
        "api-error-fetchfileerror": "आन्तरिक समस्याः फाइल तान्दा केही कुरा गलत भएछ ।",
        "log-name-pagelang": "लगको भाषा परिवर्तन गर्ने",
        "log-description-pagelang": "यो पृष्ठको भाषाहरूमा भएका परिवर्तनहरूको लग हो ।",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|परिवर्तन गरियो}} पृष्ठ भाषालाई $3 को लागि $4 बाट $5 ।",
-       "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:* व्यक्तिगत खोलहरू टरबलबाट डाउनलोड गर्नुस [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: खोल नामहरूको अगाडी डबल-क्लिक गर्नुहोस जसले तपाईंलाई विभिन्न प्रकारहरूको विकल्प दिन्छ।",
+       "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:* व्यक्तिगत खोलहरू टरबलबाट डाउनलोड गर्नुहोस् [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: खोल नामहरूको अगाडी डबल-क्लिक गर्नुहोस् जसले तपाईंलाई विभिन्न प्रकारहरूको विकल्प दिन्छ।",
        "default-skin-not-found-no-skins": "ओह! तपाईंको विकिको पूर्व निर्धारित खोल जस्तो कि <code>$wgDefaultSkin</code> मा बताइएको <code>$1</code>, उपलब्ध छैन।\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:* व्यक्तिगत खोलहरू टरबलबाट डाउनलोड गर्नुस [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] बाट।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिटको प्रयोग गरेर डाउनलोड गर्न सक्नुहुन्छ]।\n:यदि तपाईं विकासकर्ता हो भने यसो गर्दा समय तपाईंको गिट-रिपजिटरीमा केहि हुनुहुँदैन।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्रिय)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''निष्क्रिय''')",
        "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 bc71992..2ed06aa 100644 (file)
@@ -96,7 +96,7 @@
        "tog-shownumberswatching": "Het aantal gebruikers weergeven dat deze pagina volgt",
        "tog-oldsig": "Bestaande ondertekening:",
        "tog-fancysig": "Als wikitekst behandelen (zonder automatische koppeling)",
-       "tog-uselivepreview": "\"Live voorvertoning\" gebruiken",
+       "tog-uselivepreview": "Livevoorvertoning gebruiken",
        "tog-forceeditsummary": "Een melding geven bij een lege bewerkingssamenvatting",
        "tog-watchlisthideown": "Eigen bewerkingen op mijn volglijst verbergen",
        "tog-watchlisthidebots": "Botbewerkingen op mijn volglijst verbergen",
        "passwordreset": "Wachtwoord opnieuw instellen",
        "passwordreset-text-one": "Vul dit formulier in om uw wachtwoord opnieuw in te stellen.",
        "passwordreset-text-many": "{{PLURAL:$1|Vul een van de gegevensvelden in om per e-mail een tijdelijk wachtwoord te ontvangen.}}",
-       "passwordreset-legend": "Wachtwoord opnieuw instellen",
        "passwordreset-disabled": "Het is in deze wiki niet mogelijk uw wachtwoord opnieuw in te stellen.",
        "passwordreset-emaildisabled": "E-mailmogelijkheden zijn uitgeschakeld op deze wiki.",
        "passwordreset-username": "Gebruiker:",
        "resettokens": "Tokens opnieuw instellen",
        "resettokens-text": "U kunt hier tokens opnieuw instellen die toegang tot bepaalde persoonlijke gegevens die zijn gekoppeld aan uw gebruiker.\n\nDoe dit als u ze per ongeluk met iemand hebt gedeeld of als uw onbevoegden toegang hebben gekregen tot uw gebruiker.",
        "resettokens-no-tokens": "Er zijn geen tokens om opnieuw in te stellen.",
-       "resettokens-legend": "Tokens opnieuw instellen",
        "resettokens-tokens": "Tokens:",
        "resettokens-token-label": "$1 (huidige waarde: $2)",
        "resettokens-watchlist-token": "Token voor webfeed van [[Special:Watchlist|uw volglijst]] (Atom/RSS)",
        "creating": "Bezig met het aanmaken van $1",
        "editingsection": "Bezig met bewerken van $1 (deelpagina)",
        "editingcomment": "Bezig met bewerken van $1 (nieuw kopje)",
-       "editconflict": "Bewerkingsconflict: $1",
+       "editconflict": "Uw wijzigingen konden niet opgeslagen worden vanwege een bewerkingsconflict. Wilt {{GENDER:|u}} het conflict handmatig oplossen?",
        "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",
        "content-model-css": "CSS",
        "content-json-empty-object": "Leeg object",
        "content-json-empty-array": "Lege reeks",
-       "duplicate-args-warning": "<strong>Waarschuwing:</strong> [[:$1]] belt [[:$2]] met meer dan één waarde voor de \"$3\" parameter. Alleen de laatste waarde wordt gebruikt.",
+       "duplicate-args-warning": "<strong>Waarschuwing:</strong> [[:$1]] roept [[:$2]] aan met meer dan één waarde voor de parameter \"$3\". Alleen de laatste waarde wordt gebruikt.",
        "duplicate-args-category": "Pagina's met dubbele sjabloonparameters",
        "duplicate-args-category-desc": "De pagina bevat aanroepen van sjablonen waarin hetzelfde argument meerdere keren wordt gebruikt, bijvoorbeeld <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> of <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Waarschuwing:''' deze pagina gebruikt te veel kostbare parserfuncties.\n\nNu {{PLURAL:$1|is|zijn}} het er $1, terwijl het er minder dan $2 {{PLURAL:$2|moet|moeten}} zijn.",
        "randomincategory-nopages": "Er zijn geen pagina's in de categorie [[:Category:$1|$1]].",
        "randomincategory-category": "Categorie:",
        "randomincategory-legend": "Willekeurige pagina in een categorie",
+       "randomincategory-submit": "OK",
        "randomredirect": "Willekeurige doorverwijzing",
        "randomredirect-nopages": "Er zijn geen doorverwijzingen in de naamruimte \"$1\".",
        "statistics": "Statistieken",
        "nmembers": "$1 {{PLURAL:$1|item|items}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|lid|leden}}",
        "nrevisions": "$1 {{PLURAL:$1|versie|versies}}",
-       "nviews": "{{PLURAL:$1|1 keer|$1 keer}} bekeken",
        "nimagelinks": "Gebruikt op {{PLURAL:$1|één pagina|$1 pagina's}}",
        "ntransclusions": "gebruikt op {{PLURAL:$1|één pagina|$1 pagina's}}",
        "specialpage-empty": "Er zijn geen resultaten voor deze rapportage.",
        "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 \"Bewerking ter controle bekijken\" 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",
        "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": "Opnieuw aanmaken",
+       "recreate": "De pagina is verwijderd sinds je begon te bewerken. Klik op \"$1\" om de pagina opnieuw aan te maken.",
        "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.",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "liggend streepje",
        "special-characters-title-emdash": "gedachtenstreepje",
-       "special-characters-title-minus": "minteken"
+       "special-characters-title-minus": "minteken",
+       "mw-widgets-titleinput-description-new-page": "pagina bestaat nog niet",
+       "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1"
 }
index 960106c..bcb4256 100644 (file)
        "disclaimers": "Atterhald",
        "disclaimerpage": "Project:Atterhald",
        "edithelp": "Endringshjelp",
+       "helppage-top-gethelp": "Hjelp",
        "mainpage": "Hovudside",
        "mainpage-description": "Hovudside",
        "policy-url": "Project:Retningsliner",
        "throttled-mailpassword": "Ei passordpåminning er allereie sendt {{PLURAL:$1|den siste timen|dei siste $1 timane}}. For å hindre misbruk vert det berre sendt ut nytt passord ein gong kvar {{PLURAL:$1|time|$1. time}}.",
        "mailerror": "Ein feil oppstod ved sending av e-post: $1",
        "acct_creation_throttle_hit": "Vitjande på denne wikien som nytta IP-adressa di har alt oppretta {{PLURAL:$1|éin konto|$1 kontoar}} den siste dagen, noko som er det høgaste tillate talet i denne tidsperioden.\nGrunna dette vil ikkje vitjande som nyttar denne IP-adressa kunna oppretta nye kontoar nett no.",
-       "emailauthenticated": "E-postadressa di vart stadfesta $2 $3.",
-       "emailnotauthenticated": "E-postadressa di er enno ikkje stadfest. Dei følgjande funksjonane kan ikkje bruke ho.",
+       "emailauthenticated": "E-postadressa di vart stadfest $2 klokka $3.",
+       "emailnotauthenticated": "E-postadressa di er ikkje stadfest enno. Ingen e-post vil verta send ut for desse funksjonane.",
        "noemailprefs": "Oppgje ei e-postadresse i innstillingane dine for at desse funksjonane skal verke.",
        "emailconfirmlink": "Stadfest e-post-adressa di",
        "invalidemailaddress": "E-postadressa kan ikkje nyttast sidan formatet truleg er feil. Skriv ei fungerande adresse eller tøm feltet.",
        "accountcreatedtext": "Brukarkontoen til [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskusjon]]) er oppretta.",
        "createaccount-title": "Oppretting av brukarkonto på {{SITENAME}}",
        "createaccount-text": "Nokon oppretta ein brukarkonto for $2 på {{SITENAME}} ($4). Passordet til «$2» er «$3». Du bør logge inn og endre passordet ditt med ein gong.\n\nDu kan sjå bort frå denne meldinga dersom kontoen vart oppretta med eit uhell.",
-       "login-throttled": "Du har prøvd å logge inn for mange gonger. Ver venleg og vent før du prøver igjen.",
+       "login-throttled": "Du har prøvd å logge inn for mange gonger. Vent $1 vent før du prøver igjen.",
        "login-abort-generic": "Innlogginga er avbroten.",
        "loginlanguagelabel": "Språk: $1",
        "suspicious-userlogout": "Førespurnaden din om å logge ut vart nekta fordi han såg ut til å vere sendt av ein øydelagt nettlesar eller mellomtenar.",
        "resetpass-abort-generic": "Passordbytet vart stogga av ei utviding.",
        "passwordreset": "Attendestilling av passord",
        "passwordreset-text-one": "Fyll ut dette skjemaet for å attendestilla passordet ditt.",
-       "passwordreset-legend": "↓Nullstill passordet",
        "passwordreset-disabled": "↓Tilbakestilling av passord er ikkje aktivert på denne wikien",
        "passwordreset-emaildisabled": "E-postfunksjonen er slegen av på wikien.",
        "passwordreset-username": "Brukarnamn:",
        "revdelete-hide-text": "Versjonstekst",
        "revdelete-hide-image": "Skjul filinnhald",
        "revdelete-hide-name": "Gøym handling og sidenamn",
-       "revdelete-hide-comment": "Gøym endringssamandraga",
-       "revdelete-hide-user": "Gøym brukarnamn/IP-adresse",
+       "revdelete-hide-comment": "Endringssamandrag",
+       "revdelete-hide-user": "Brukarnamn/IP-adresse",
        "revdelete-hide-restricted": "Løyn data frå administratorar slik som med andre brukarar",
        "revdelete-radio-same": "(ikkje endra)",
        "revdelete-radio-set": "Løynd",
        "notextmatches": "Ingen sider hadde treff på førespurnaden",
        "prevn": "førre {{PLURAL:$1|$1}}",
        "nextn": "neste {{PLURAL:$1|$1}}",
+       "prev-page": "førre sida",
+       "next-page": "neste side",
        "prevn-title": "Førre $1 {{PLURAL:$1|resultat|resultat}}",
        "nextn-title": "Neste $1 {{PLURAL:$1|resultat|resultat}}",
        "shown-title": "Syn $1 {{PLURAL:$1|resultat|resultat}} for kvar side",
        "listfiles_size": "Storleik",
        "listfiles_description": "Skildring",
        "listfiles_count": "Versjonar",
+       "listfiles-show-all": "Ta med gamle versjonar av bilete",
        "listfiles-latestversion": "Gjeldande versjon",
        "listfiles-latestversion-yes": "Ja",
        "listfiles-latestversion-no": "Nei",
        "randomincategory-nopages": "Det er ingen sider i kategorien [[:Category:$1|$1]].",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Tilfeldig side frå kategori",
+       "randomincategory-submit": "Gå",
        "randomredirect": "Tilfeldig omdirigering",
        "randomredirect-nopages": "Det finst ingen omdirigeringar i namnerommet «$1».",
        "statistics": "Statistikk",
        "nlinks": "{{PLURAL:$1|Éi lenkje|$1 lenkjer}}",
        "nmembers": "$1 {{PLURAL:$1|medlem|medlemmer}}",
        "nrevisions": "{{PLURAL:$1|Éin versjon|$1 versjonar}}",
-       "nviews": "{{PLURAL:$1|Éi vising|$1 visingar}}",
        "nimagelinks": "Brukt på $1 {{PLURAL:$1|side|sider}}",
        "ntransclusions": "brukt på $1 {{PLURAL:$1|side|sider}}",
        "specialpage-empty": "Det er ingen resultat for denne rapporten.",
        "movepagetalktext": "Den tilhøyrande diskusjonssida, om ho finst, vert automatisk flytt med sida '''minder:'''\n*ei ikkje-tom diskusjonsside alt finst under det nye namnet, eller\n*du fjernar avhakinga i boksen nedanfor.\n\nI desse falla lyt du flytta eller fletta sida manuelt, om ynskjeleg.",
        "movearticle": "Flytt side:",
        "moveuserpage-warning": "'''Åtvaring:''' Du er i ferd med å flytta ei brukarside. Merk at berre sida vert flytt og at brukarnamnet '''ikkje''' vert endra.",
+       "movecategorypage-warning": "<strong>Åtvaring:</strong> Du er i ferd med å flytta ei kategoriside. Merk at berre kategorisida vert flytt og at sider i den gamle kategorien <em>ikkje</em> vert omkategoriserte til den nye kategorien.",
        "movenologintext": "Du lyt vera registrert brukar og vera [[Special:UserLogin|innlogga]] for å flytte ei side.",
        "movenotallowed": "Du har ikkje tilgang til å flytte sider.",
        "movenotallowedfile": "Du har ikkje løyve til å flytta filer.",
        "tooltip-feed-atom": "Atom-mating for denne sida",
        "tooltip-t-contributions": "Sjå liste over bidrag frå denne brukaren",
        "tooltip-t-emailuser": "Send ein e-post til denne brukaren",
+       "tooltip-t-info": "Meir informasjon om sida",
        "tooltip-t-upload": "Last opp filer",
        "tooltip-t-specialpages": "Liste over spesialsider",
        "tooltip-t-print": "Utskriftsversjon av sida",
index ba56063..758f34b 100644 (file)
@@ -12,7 +12,8 @@
                        "Shisir 1945",
                        "ଶିତିକଣ୍ଠ ଦାଶ",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Nistha.aslp"
                ]
        },
        "tog-underline": "ଲିଙ୍କତଳେଗାର ଟାଣିବା:",
        "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|ନିଜର ଦେଖଣାତାଲିକରେ ହେଉଥିବା ବଦଳ]]ର ୱେବ ଫିଡ଼ ପାଇଁ ଟୋକନ (ଆଟମ/RSS)",
        "nmembers": "$1 {{PLURAL:$1|member|ସଭ୍ୟ}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|ସଭ୍ୟ|ସଭ୍ୟଗଣ}}",
        "nrevisions": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}",
-       "nviews": "$1 ଟି {{PLURAL:$1|ଦେଖଣା|ଦେଖଣା}}",
        "nimagelinks": "$1 ଟି {{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠା}}ରେ ବ୍ୟବହାର କରାଯାଇଅଛି",
        "ntransclusions": "$1ଟି {{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠା}}ରେ ବ୍ୟବହାର କରାଯାଇଅଛି",
        "specialpage-empty": "ଏହି ଅନୁରୋଧ ପାଇଁ କିଛି ଫଳାଫଳ ମିଳିଲା ନାହିଁ ।",
        "version-entrypoints": "ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ",
        "version-entrypoints-header-entrypoint": "ପ୍ରବେଶ ବିନ୍ଦୁ",
        "version-entrypoints-header-url": "ଇଉଆରଏଲ",
+       "version-libraries": "ଇନଷ୍ଟାଲ ହୋଇଥିବା ପାଠାଗାର",
+       "version-libraries-library": "ପାଠାଗାର",
+       "version-libraries-version": "ସଂସ୍କରଣ",
        "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]].",
        "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-source-extension": "ଏକ୍ସଟେନସନ ଦ୍ଵାରା ଦର୍ଶାଯାଇଥିବା",
+       "tags-source-manual": "ବ୍ୟବହାରକାରୀ ଓ ବଟଦ୍ଵାରା କରାଯାଇଛି",
+       "tags-source-none": "ଆଉ ବ୍ୟବହାର ହେଉନାହିଁ",
        "tags-edit": "ସମ୍ପାଦନା",
+       "tags-delete": "ଲିଭାଇବେ",
+       "tags-activate": "ସଚଳ କରିବେ",
+       "tags-deactivate": "ଅଚଳ କରିବେ",
        "tags-hitcount": "$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}",
+       "tags-manage-no-permission": "ଆପଣଙ୍କର ଟାଗ ବଦଳ କରିବା ଅଧିକାର ନାହିଁ ।",
+       "tags-create-heading": "ନୂଆ ଟାଗ ତିଆରି କରିବେ",
+       "tags-create-tag-name": "ଟାଗ ନାମ",
+       "tags-create-reason": "କାରଣ",
+       "tags-create-submit": "ତିଆରି କରିବେ",
+       "tags-create-no-name": "ଆପଣଙ୍କୁ ଗୋଟିଏ ଟାଗ ନାମ ଦେବାକୁ ପଡିବ ।",
+       "tags-delete-title": "ଟାଗ ଲିଭାଇବେ",
+       "tags-delete-reason": "କାରଣ:",
+       "tags-activate-reason": "କାରଣ:",
+       "tags-activate-submit": "ସଚଳ କରିବେ",
+       "tags-deactivate-title": "ଟାଗ ଅଚଳ କରିବେ",
+       "tags-deactivate-reason": "କାରଣ:",
+       "tags-edit-title": "ଟାଗ ସମ୍ପାଦନ କରିବେ",
+       "tags-edit-manage-link": "ଟାଗ ବଦଳାଇବେ",
+       "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-reason": "କାରଣ:",
        "comparepages": "ବଦଳ ତୁଳନା କରିବେ",
        "compare-page1": "ପୃଷ୍ଠା ୧",
        "compare-page2": "ପୃଷ୍ଠା ୨",
        "logentry-upload-upload": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
        "logentry-upload-overwrite": "$1, $3ର ଏକ ନୂଆ ସଂସ୍କରଣ {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
        "logentry-upload-revert": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
+       "log-name-tag": "ଟାଗ ଲଗ",
        "rightsnone": "(କିଛି ନାହିଁ)",
        "revdelete-summary": "ସାରକଥା ସମ୍ପାଦନା",
        "feedback-adding": "ପୃଷ୍ଠାରେ ମତାମତ ଦେଉଛି...",
+       "feedback-back": "ପଛକୁ ଯିବେ",
        "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
        "feedback-bugnew": "ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।",
        "feedback-bugornote": "ଦୟାକରି ଆପଣ ଏକ କାରିଗରି ଅସୁବିଧାଟିଏ ଜଣାଇବା ପାଇଁ ଚାହୁଁଥିଲେ ଦୟାକରି [$1 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । \nଅଥବା, ଆପଣ ତଳେ ଠିଆ ସହଜ ଆବେଦନ ପତ୍ରଟି ପୁରଣ କରିପାରିବେ ।  ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ନାମ ଓ ଆପଣ ବ୍ୟବହାର କରୁଥିବା ବ୍ରାଉଜର ଅନୁସାରେ ଆପଣଙ୍କ ମତାମତ \"[$3 $2]\"ରେ ଯୋଡ଼ାଯିବ ।",
        "feedback-cancel": "ନାକଚ",
        "feedback-close": "ହୋଇଗଲା",
+       "feedback-error-title": "ଅସୁବିଧା",
        "feedback-error1": "ଭୁଲ: API ରୁ ଅଚିହ୍ନା ଫଳାଫଳ",
        "feedback-error2": "ଅସୁବିଧା: ସମ୍ପାଦନା ବିଫଳ ହେଲା",
        "feedback-error3": "ଅସୁବିଧା: API ରୁ କିଛି ଉତ୍ତର ମିଳିଲା ନାହିଁ",
        "feedback-subject": "ବିଷୟ:",
        "feedback-submit": "ଦାଖଲ କରିବା",
        "feedback-thanks": "ଧନ୍ୟବାଦ ! ଆପଣଙ୍କର ମତାମତ  \"[$2 $1]\" ପୃଷ୍ଠାରେ ଦର୍ଶାଯାଇଛି ।",
+       "feedback-thanks-title": "ଧନ୍ୟବାଦ!",
        "searchsuggest-search": "ଖୋଜନ୍ତୁ",
        "searchsuggest-containing": "ଖୋଜୁଛି...",
        "api-error-badaccess-groups": "ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଅପଲୋଡ଼ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।",
        "json-error-recursion": "ଏନକୋଡ଼ ହେବାକୁ ଥିବା ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ ରିକର୍ସିଭ ଆଧାର",
        "json-error-inf-or-nan": "ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ NAN କିମ୍ବା INF ମୂଲ୍ୟ ଏନକୋଡ଼ କରିବାକୁ ହେବ",
        "json-error-unsupported-type": "ଏନକୋଡ଼ ହୋଇନପାରିବା ଭଳି ଏକ ପ୍ରକାରର ମୂଲ୍ୟ ଦିଆଗଲା",
+       "headline-anchor-title": "ଏହି ବିଭାଗକୁ ଲିଙ୍କ କରିବେ",
        "special-characters-group-latin": "ଲାଟିନ",
        "special-characters-group-latinextended": "ଲାଟିନ ଅଧିକ ଅକ୍ଷର",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-khmer": "ଖମେର ଭାଷା",
        "special-characters-title-endash": "en ଡ୍ୟାସ",
        "special-characters-title-emdash": "em dash",
-       "special-characters-title-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ"
+       "special-characters-title-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ",
+       "mw-widgets-titleinput-description-redirect": "$1କୁ ପୁନଃପ୍ରେରଣ କରିବେ"
 }
index 804a2c7..8225de5 100644 (file)
@@ -85,9 +85,9 @@
        "fri": "ਸ਼ੁੱਕਰ",
        "sat": "ਸ਼ਨਿੱਚਰ",
        "january": "ਜਨਵਰੀ",
-       "february": "ਫਰਵਰੀ",
+       "february": "ਫ਼ਰਵਰà©\80",
        "march": "ਮਾਰਚ",
-       "april": "à¨\85ਪà©\8dਰà©\88ਲ",
+       "april": "ਅਪਰੈਲ",
        "may_long": "ਮਈ",
        "june": "ਜੂਨ",
        "july": "ਜੁਲਾਈ",
        "lastmodifiedat": "ਇਸ ਸਫ਼ੇ ਵਿੱਚ ਆਖ਼ਰੀ ਸੋਧ $1 ਨੂੰ $2 ਵਜੇ ਹੋਈ।",
        "viewcount": "ਇਹ ਸਫ਼ਾ {{PLURAL:$1|ਇੱਕ ਵਾਰ|$1 ਵਾਰ}} ਵੇਖਿਆ ਗਿਆ।",
        "protectedpage": "ਸੁਰੱਖਿਅਤ ਸਫ਼ਾ",
-       "jumpto": "ਇਸ ਤੇ ਜਾਓ:",
+       "jumpto": "ਇਸ ਉੱਤੇ ਜਾਓ:",
        "jumptonavigation": "ਨੇਵੀਗੇਸ਼ਨ",
        "jumptosearch": "ਖੋਜ",
        "view-pool-error": "ਅਫ਼ਸੋਸ, ਸਰਵਰ ਇਸ ਵੇਲੇ ਓਵਰਲੋਡ ਹੈ।\nਬਹੁਤ ਸਾਰੇ ਮੈਂਬਰ ਇਸ ਸਫ਼ੇ ਨੂੰ ਵੇਖਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹਨ।\nਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਥੋੜੀ ਉਡੀਕ ਕਰੋ ਜੀ।\n$1",
        "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:ਨੀਤੀ",
        "wrongpassword": "ਗ਼ਲਤ ਪਾਸਵਰਡ ਦਿੱਤਾ ਹੈ। ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
        "wrongpasswordempty": "ਖ਼ਾਲੀ ਪਾਸਵਰਡ ਦਿੱਤਾ ਹੈ। ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
        "passwordtooshort": "ਪਾਸਵਰਡ {{PLURAL:$1|1 ਅੱਖਰ|$1 ਅੱਖਰਾਂ}} ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।",
+       "passwordtoolong": "ਪਾਸਵਰਡ {{PLURAL:$1|1 ਅੱਖਰ|$1 ਅੱਖਰਾਂ}} ਤੋਂ ਵੱਡਾ ਨਹੀਂ ਹੋ ਸਕਦਾ।",
        "password-name-match": "ਤੁਹਾਡਾ ਪਛਾਣ-ਸ਼ਬਦ ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ ਨਾਂ ਤੋਂ ਵੱਖਰਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
        "password-login-forbidden": "ਇਹ ਯੂਜ਼ਰ-ਨਾਂ ਅਤੇ ਪਾਸਵਰਡ ਵਰਤਣ ਦੀ ਮਨਾਹੀ ਹੈ।",
        "mailmypassword": "ਨਵਾਂ ਪਾਸਵਰਡ ਈ-ਮੇਲ ਕਰੋ",
        "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-done": "ਨਿਸ਼ਾਨੀਆਂ ਮੁੜ ਬਣਾਈਆਂ ਗਈਆਂ।",
        "missingcommenttext": "ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।",
        "summary-preview": "ਸੋਧ ਸਾਰ ਦੀ ਝਲਕ:",
        "subject-preview": "ਵਿਸ਼ੇ/ਸਿਰਨਾਵੇਂ ਦੀ ਝਲਕ:",
+       "previewerrortext": "ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਦੀ ਝਲਕ ਵਿਖਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਗ਼ਲਤੀ ਆ ਗਈ।",
        "blockedtitle": "ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਪਾਬੰਦੀ ਲੱਗੀ ਹੋਈ ਹੈ",
        "blockedtext": "'''ਤੁਹਾਡੇ ਮੌਮਬਰ ਨਾਮ ਜਾਂ IP ਪਤੇ ’ਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''\n\nਪਾਬੰਦੀ $1 ਨੇ ਲਾਈ ਹੈ।\nਦਿੱਤਾ ਗਿਆ ਕਾਰਨ ਇਹ ਹੈ, ''$2''।\n\n* ਪਾਬੰਦੀ ਸ਼ੁਰੂ: $8\n* ਪਾਬੰਦੀ ਖਤਮ: $6\n* ਪਾਬੰਦੀ ਲਾਉਣ ਵਾਲੇ ਦਾ ਇਰਾਦਾ: $7\n\nਪਾਬੰਦੀ ਬਾਰੇ ਚਰਚਾ ਕਰਨ ਲਈ ਤੁਸੀਂ $1 ਜਾਂ ਕਿਸੇ ਹੋਰ\n[[{{MediaWiki:Grouppage-\nsysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।\nਤੁਸੀਂ 'ਇਸ ਮੈਂਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ' ਸਹੂਲਤ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕਦੇ ਜੇ ਤੁਹਾਡੀਆਂ [[Special:Preferences|ਖਾਤਾ ਪਸੰਦਾਂ]] ਵਿੱਚ ਇੱਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਨਹੀਂ ਦਿੱਤਾ ਗਿਆ ਜਾਂ ਜੇ ਤੁਹਾਡੇ ਇਸਨੂੰ ਵਰਤਣ ਤੇ ਪਾਬੰਦੀ ਹੈ।\nਤੁਹਾਡਾ ਚਾਲੂ IP ਪਤਾ $3 ਹੈ,\nਅਤੇ ਪਾਬੰਦੀ ਪਤਾ #$5 ਹੈ।\nਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੇ ਕਿਸੇ ਵੀ ਸਵਾਲ ਜਾਂ ਪੁੱਛ-ਗਿੱਛ ਵਿਚ ਇਹ ਉੱਪਰਲੀ ਤਫ਼ਸੀਲ ਜ਼ਰੂਰ ਸ਼ਾਮਲ ਕਰੋ।",
        "blockednoreason": "ਕੋਈ ਕਾਰਨ ਨਹੀਂ ਦੱਸਿਆ ਗਿਆ",
        "showhideselectedversions": "ਚੁਣੀਆਂ ਸੁਧਾਈਆਂ ਦੀ ਦਿਸਣਯੋਗਤਾ ਬਦਲੋ",
        "editundo": "ਰੱਦ ਕਰੋ",
        "diff-empty": "(ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ)",
+       "diff-multi-sameuser": "(ਇਸੀ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ {{PLURAL:$1|ਇੱਕ ਵਿਚਕਾਰਲੀ ਤਬਦੀਲੀ|$1 ਵਿਚਕਾਰਲੀਆਂ ਤਬਦੀਲੀਆਂ}} {{PLURAL:not shown|ਨਹੀਂ ਦਿਖਾਈ ਜਾ ਰਹੀ|ਨਹੀਂ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ}})",
        "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": "{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ}} $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}",
        "shown-title": "ਪ੍ਰਤੀ ਸਫ਼ਾ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}} ਵਿਖਾਓ",
        "viewprevnext": "ਵੇਖੋ ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''ਇਸ ਵਿਕੀ ’ਤੇ \"[[:$1]]\" ਨਾਮ ਦਾ ਸਫਾ ਹੈ।'''",
-       "searchmenu-new": "'''ਇਸ ਵਿਕੀ ’ਤੇ \"[[:$1]]\" ਸਫ਼ਾ ਬਣਾਓ!'''",
+       "searchmenu-new": "<strong>ਇਸ ਵਿਕੀ ਉੱਤੇ ਸਫ਼ਾ \"[[:$1]]\" ਬਣਾਓ!</strong> {{PLURAL:$2|0=|ਇਸਦੇ ਨਾਲ ਖੋਜ ਦੇ ਨਤੀਜੇ ਵੀ ਦੇਖ ਲਵੋ।}}",
        "searchprofile-articles": "ਸਮੱਗਰੀ ਸਫ਼ੇ",
        "searchprofile-images": "ਮਲਟੀਮੀਡੀਆ",
        "searchprofile-everything": "ਸਭ ਕੁਝ",
        "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-file-match": "(ਫ਼ਾਈਲ ਦੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਰਲ਼ਦਾ-ਮਿਲ਼ਦਾ)",
        "search-suggest": "ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1",
        "search-interwiki-caption": "ਸਾਥੀ ਪ੍ਰੋਜੈਕਟ",
        "searchrelated": "ਸਬੰਧਤ",
        "searchall": "ਸਭ",
        "showingresults": "ਹੇਠਾਂ #'''$2''' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ {{PLURAL:\n$1|'''1''' ਨਤੀਜਾ|'''$1''' ਤੱਕ ਨਤੀਜੇ}} ਵਖਾਓ।",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ਵਿੱਚੋਂ <strong>$1</strong> ਨਤੀਜੇ| <strong>$3</strong> ਵਿੱਚੋਂ <strong>$1 - $2</strong> ਨਤੀਜੇ}}",
        "search-nonefound": "ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।",
        "powersearch-legend": "ਤਕਨੀਕੀ ਖੋਜ",
        "powersearch-ns": "ਨੇਮ-ਸਪੇਸ ਵਿੱਚ ਖੋਜ:",
        "prefs-personal": "ਵਰਤੋਂਕਾਰ ਪ੍ਰੋਫ਼ਾਈਲ",
        "prefs-rc": "ਹਾਲੀਆ ਤਬਦੀਲੀਆਂ",
        "prefs-watchlist": "ਨਿਗਰਾਨ-ਸੂਚੀ",
+       "prefs-editwatchlist": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ",
        "prefs-watchlist-days": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਦਿਨ:",
        "prefs-watchlist-days-max": "ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}",
        "prefs-watchlist-edits": "ਵਧਾਈ ਹੋਈ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ ਤਬਦੀਲੀਆਂ:",
        "right-upload_by_url": "URL ਤੋਂ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ",
        "right-autoconfirmed": "ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ",
        "right-bot": "ਇੱਕ ਸਵੈ-ਚਾਲਤ ਅਮਲ ਵਜੋਂ ਗਿਣਿਆ ਜਾਣਾ",
+       "right-writeapi": "ਏਪੀਆਈ(API) ਦੀ ਵਰਤੋਂ",
        "right-delete": "ਸਫ਼ੇ ਹਟਾਓ",
        "right-bigdelete": "ਵੱਡੇ ਅਤੀਤ ਵਾਲੇ ਪੰਨੇ ਮਿਟਾਉਣੇ",
        "right-browsearchive": "ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ",
        "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-legend-plusminus": "(''±੧੨੩'')",
        "boteditletter": "ਬੋਟ",
        "number_of_watching_users_pageview": "[$1 ਵੇਖ ਰਹੇ ਹਨ {{PLURAL:$1|ਯੂਜ਼ਰ}}]",
        "rc_categories_any": "ਕੋਈ ਵੀ",
+       "rc-change-size-new": "$1 {{PLURAL:$|ਬਾਈਟ|ਬਾਈਟਾਂ}} ਤਬਦੀਲੀ ਤੋਂ ਬਾਅਦ",
        "newsectionsummary": "/* $1 */ ਨਵਾਂ ਭਾਗ",
        "rc-enhanced-expand": "ਵੇਰਵੇ ਵੇਖਾਓ",
        "rc-enhanced-hide": "ਵੇਰਵਾ ਲੁਕਾਓ",
        "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": "ਇਸ ਰਿਪੋਟ ਦਾ ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਹੈ।",
        "tooltip-pt-mycontris": "ਤੁਹਾਡੇ ਯੋਗਦਾਨਾਂ ਦੀ ਸੂਚੀ",
        "tooltip-pt-login": "ਤੁਹਾਨੂੰ ਦਾਖ਼ਲ ਹੋਣ ਲਈ ਪ੍ਰੇਰਿਆ ਜਾਂਦਾ ਹੈ; ਪਰ ਇਹ ਕੋਈ ਲਾਜ਼ਮੀ ਨਹੀਂ",
        "tooltip-pt-logout": "ਸਾਈਟ ਤੋਂ ਬਾਹਰ ਆਉ",
+       "tooltip-pt-createaccount": "ਤੁਹਾਨੂੰ ਖਾਤਾ ਬਣਾਉਣ ਤੋਂ ਬਾਅਦ ਲਾਗ ਇਨ ਕਰਨ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ; ਹਾਲਾਂਕਿ ਇਹ ਲਾਜ਼ਮੀ ਨਹੀਂ",
        "tooltip-ca-talk": "ਸਮਗੱਰੀ ਸਫ਼ੇ ਬਾਰੇ ਚਰਚਾ",
        "tooltip-ca-edit": "ਤੁਸੀਂ ਇਹ ਸਫ਼ਾ ਸੋਧ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਤਬਦੀਲੀ ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖੋ।",
        "tooltip-ca-addsection": "ਨਵਾਂ ਭਾਗ ਸ਼ੁਰੂ ਕਰੋ",
        "tooltip-search": "{{SITENAME}} ’ਤੇ ਖੋਜੋ",
        "tooltip-search-go": "ਠੀਕ ਇਸ ਨਾਮ ਵਾਲੇ ਪੰਨੇ ’ਤੇ ਜਾਉ, ਜੇ ਮੌਜੂਦ ਹੈ ਤਾਂ",
        "tooltip-search-fulltext": "ਇਸ ਲਿਖਤ ਲਈ ਸਫ਼ੇ ਲੱਭੋ",
-       "tooltip-p-logo": "ਮੁੱਖ ਸਫ਼ੇ ਤੇ ਜਾਓ",
+       "tooltip-p-logo": "ਮੁੱਖ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ",
        "tooltip-n-mainpage": "ਮੁੱਖ ਸਫ਼ੇ ’ਤੇ ਜਾਓ",
-       "tooltip-n-mainpage-description": "ਮੁੱਖ ਸਫ਼ੇ ਤੇ ਜਾਓ",
+       "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": "ਵਿਕੀ ਦੇ ਸਾਰੇ ਸਫ਼ਿਆ ਦੀ ਸੂਚੀ, ਜੋ ਇੱਥੇ ਜੋੜਦੇ ਹਨ",
        "svg-long-desc": "SVG ਫ਼ਾਈਲ, ਆਮ ਤੌਰ ’ਤੇ $1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਦਾ ਅਕਾਰ: $3",
        "show-big-image": "ਅਸਲ ਫਾਈਲ",
        "show-big-image-preview": "ਇਸ ਝਾਤ ਦਾ ਅਕਾਰ: $1.",
+       "show-big-image-other": "ਹੋਰ {{PLURAL:$2|ਰੈਜ਼ੋਲਿਊਸ਼ਨ|ਰੈਜ਼ੋਲਿਊਸ਼ਨਜ਼}}: $1.",
        "show-big-image-size": "$1 × $2 ਪਿਕਸਲ",
        "newimages": "ਨਵੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਗੈਲਰੀ",
        "newimages-legend": "ਫਿਲਟਰ",
        "exif-artist": "ਲੇਖਕ",
        "exif-copyright": "ਕਾਪੀਰਾਈਟ ਟਾਇਟਲ",
        "exif-exifversion": "ਐਗਜ਼ਿਫ਼ ਦਾ ਰੂਪ",
+       "exif-colorspace": "ਰੰਗ ਸਪੇਸ",
        "exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ",
        "exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ",
        "exif-usercomment": "ਵਰਤੋਂਕਾਰ ਦੀਆਂ ਟਿੱਪਣੀਆਂ",
        "exif-relatedsoundfile": "ਮਿਲਦੀ-ਜੁਲਦੀ ਆਡੀਓ ਫ਼ਾਈਲ",
+       "exif-datetimeoriginal": "ਡਾਟਾ ਦੇ ਬਣਨ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ",
        "exif-datetimedigitized": "ਅੰਕਰੂਪ ਕਰਨ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ",
        "exif-fnumber": "ਐੱਫ਼ ਨੰਬਰ",
        "exif-subjectdistance": "ਵਿਸ਼ੇ ਦੀ ਵਿੱਥ",
        "logentry-newusers-newusers": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ",
        "logentry-newusers-create": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ",
        "logentry-newusers-create2": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3, $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ",
+       "logentry-upload-upload": "$1 ਨੇ $3 {{GENDER:$2|ਅਪਲੋਡ ਕੀਤਾ}}",
        "rightsnone": "(ਕੋਈ ਨਹੀਂ)",
        "revdelete-summary": "ਸੰਖੇਪ ਸੋਧ",
        "feedback-adding": "ਸਫ਼ੇ ਨਾਲ਼ ਵਿਚਾਰ ਜੁੜ ਰਹੇ ਹਨ...",
index d1a9564..6c3561d 100644 (file)
@@ -7,19 +7,20 @@
                        "Urhixidur",
                        "Val2397",
                        "아라",
-                       "Leeheonjin"
+                       "Leeheonjin",
+                       "TTO"
                ]
        },
        "tog-underline": "Gulisan lang panglalam deng suglung:",
        "tog-hideminor": "Isalikut la reng mangalating edit kareng bayung mengayalili",
-       "tog-hidepatrolled": "Isalikut la reng edit a babanten (''controlled edits'') kareng bayung mengayalili",
+       "tog-hidepatrolled": "Isalikut la reng edit a babanten kareng bayung mengayalili",
        "tog-newpageshidepatrolled": "Isalikut la reng bulung a babanten (''patrolled pages'') king listaan king bayung bulung (''new page list'')",
        "tog-extendwatchlist": "Dagdagan la reng babanten ba lang palto deng anggang mialilan, aliwa mu deng pekabayu.",
        "tog-usenewrc": "↓mesanting la reng bayung mengayalili (JavaScript)",
        "tog-numberheadings": "Tambing lang dinan nomiru deng pamagat",
-       "tog-showtoolbar": "Ipakit ya panaliling toolbar (JavaScript)",
-       "tog-editondblclick": "Alilan la reng bulung kapamilatan ning makataduang pamagpindut (JavaScript)",
-       "tog-editsectiononrightclick": "Paganan ya ing pamag-edit seksiyon (section editing) kapamilata'ning pamag right click kareng pamagat da reng seksiyon (JavaScript)",
+       "tog-showtoolbar": "Ipakit ya panaliling toolbar",
+       "tog-editondblclick": "Iyalilan la reng bulung king dobling klik",
+       "tog-editsectiononrightclick": "Paganan ya ing pamag-edit seksiyon (section editing) kapamilatan ning pamag right click kareng pamagat da reng seksiyon",
        "tog-watchcreations": "Idagdag la deng bulung a lelengan ku kareng babanten",
        "tog-watchdefault": "Idagdag la reng bulung a inalilan ku kareng babanten",
        "tog-watchmoves": "Idagdag la reng bulung a inalis ku kareng babanten",
@@ -30,7 +31,7 @@
        "tog-enotifwatchlistpages": "I e-mail mu ku ustung ing bulung a babanten ku meyalili ya",
        "tog-enotifusertalkpages": "E-mail mu ku ustung ing kanakung gamit talamitam meyalili ya",
        "tog-enotifminoredits": "E-mail mu ku kareng mangalating alili da reng bulung",
-       "tog-enotifrevealaddr": "Ipakit me ing kanakung e-mail address kareng pamanabisang sulat",
+       "tog-enotifrevealaddr": "Ipakit ya ing kanakung e-mail address kareng pamanabisang sulat",
        "tog-shownumberswatching": "Ipakit la reng bilang da reng magbanteng talagamit",
        "tog-oldsig": "I-preview ya ing salukuyan a pirma",
        "tog-fancysig": "Ituring yang wikitext ing pirma (alang automatic link o tambing a suglung)",
        "tog-watchlisthideanons": "Isalikut la reng elilan da reng e migpakilala king babanten o watchlist",
        "tog-ccmeonemails": "Paralan mu kung kauangis da reng e-mails a peparala ku kareng aliwang talagamit",
        "tog-diffonly": "Eya papakit ing laman ning bulung lalam ning diffs",
-       "tog-showhiddencats": "Ipakit la reng makasalikut a categories",
+       "tog-showhiddencats": "Ipakit la reng makasalikut a kategorya",
        "underline-always": "Pane",
        "underline-never": "emaliari agiang misan",
        "underline-default": "Browser default",
        "sunday": "Dominggu",
        "monday": "Lunis",
        "tuesday": "Martis",
-       "wednesday": "Mierkulis",
-       "thursday": "Juebis",
-       "friday": "Biernis",
+       "wednesday": "Miyerkulis",
+       "thursday": "Huwebis",
+       "friday": "Biyernis",
        "saturday": "Sabadu",
        "sun": "Dom",
        "mon": "Lun",
        "march": "Marsu",
        "april": "Abril",
        "may_long": "Mayu",
-       "june": "Juniu",
-       "july": "Juliu",
+       "june": "Hunyu",
+       "july": "Hulyu",
        "august": "Agostu",
-       "september": "Septiembri",
-       "october": "Octubri",
-       "november": "Nobiembri",
-       "december": "Disiembri",
+       "september": "Setyembri",
+       "october": "Oktubri",
+       "november": "Nobyembri",
+       "december": "Disyembri",
        "january-gen": "Eneru",
        "february-gen": "Pebreru",
        "march-gen": "Marsu",
        "april-gen": "Abril",
        "may-gen": "Mayu",
-       "june-gen": "Juniu",
-       "july-gen": "Juliu",
+       "june-gen": "Hunyu",
+       "july-gen": "Hulyu",
        "august-gen": "Agostu",
-       "september-gen": "Septiembri",
-       "october-gen": "Octubri",
-       "november-gen": "Nobiembri",
-       "december-gen": "Disiembri",
+       "september-gen": "Setyembri",
+       "october-gen": "Oktubri",
+       "november-gen": "Nobyembri",
+       "december-gen": "Disyembri",
        "jan": "Ene",
        "feb": "Peb",
        "mar": "Mrs",
        "apr": "Abr",
        "may": "Myu",
-       "jun": "Jnu",
-       "jul": "Jul",
+       "jun": "Hnu",
+       "jul": "Hul",
        "aug": "Ago",
        "sep": "Set",
-       "oct": "Oct",
+       "oct": "Okt",
        "nov": "Nob",
-       "dec": "Dic",
-       "pagecategories": "{{PLURAL:$1|Kategoriya|Kategoriya}}",
-       "category_header": "Deng bulung king kategoriyang \"$1\"",
-       "subcategories": "Deng subcategory",
-       "category-media-header": "Media king kategoriyang \"$1\"",
+       "dec": "Dis",
+       "january-date": "Eneru $1",
+       "february-date": "Pebreru $1",
+       "march-date": "Marsu $1",
+       "april-date": "Abril $1",
+       "may-date": "Mayu $1",
+       "june-date": "Hunyu $1",
+       "july-date": "Hulyu $1",
+       "august-date": "Agostu $1",
+       "september-date": "Setyembri $1",
+       "october-date": "Oktubri $1",
+       "november-date": "Nobyembri $1",
+       "december-date": "Disyembri $1",
+       "pagecategories": "{{PLURAL:$1|Kategorya|Kategorya}}",
+       "category_header": "Deng bulung king kategoryang \"$1\"",
+       "subcategories": "Deng subkategorya",
+       "category-media-header": "Media king kategoryang \"$1\"",
        "category-empty": "''Ala yang bulung o media ngening salukuyan ining kategoriya.''",
        "hidden-categories": "{{PLURAL:$1|Makasalikut a kategoriya|Makasalikut a kategoriya}}",
        "hidden-category-category": "Pakasalikut a categoria",
        "newwindow": "(mibusni ya king bayung awang)",
        "cancel": "E taglus",
        "moredotdotdot": "Dakal pa...",
-       "mypage": "Ing kakung bulung",
-       "mytalk": "Makisabi kaku",
-       "anontalk": "Pamakisabi para keng IPing ini",
-       "navigation": "Pamaglibut",
+       "mypage": "Bulung",
+       "mytalk": "Pamisabi-sabi",
+       "anontalk": "Pamisabi-sabi para keng direksyung IP",
+       "navigation": "Pamaglibut (nabigasyun)",
        "and": "&#32;ampo",
-       "qbfind": "Maintun",
+       "qbfind": "Mayintun",
        "qbbrowse": "Bation (browse)",
        "qbedit": "Mag-edit",
        "qbpageoptions": "Ining bulung",
-       "qbmyoptions": "Deng kakung bulung",
+       "qbmyoptions": "Deng kanakung bulung",
        "faq": "Maralas a Kukutang (MAK)",
        "faqpage": "Project:MAK",
-       "actions": "↓Ding kilus",
-       "namespaces": "Karinanlagiu",
-       "variants": "Aliwapa",
+       "actions": "Deng kilus",
+       "namespaces": "Deng pirinan-lagyu (Namespaces)",
+       "variants": "Deng aliwa pa",
        "errorpagetitle": "Mali",
        "returnto": "Magbalik king $1.",
        "tagline": "Ibat king {{SITENAME}}",
        "nlinks": "$1 {{PLURAL:$1|link|suglung}}",
        "nmembers": "$1 {{PLURAL:$1|kayanib}}",
        "nrevisions": "$1 {{PLURAL:$1|pamagbayu|pamagbayu}}",
-       "nviews": "$1 {{PLURAL:$1|linawe|linawe}}",
        "specialpage-empty": "Alang linual/resulta king ulat (report) a ini.",
        "lonelypages": "Bulung a alang suglung (orphaned)",
        "lonelypagestext": "Alang suglung manibat kareng aliwang bulung ning {{SITENAME}} kareng makatuking bulung.",
        "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-addsection": "Mangibili kang bayung dake o ''section''.",
+       "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.",
        "tooltip-ca-protect": "Protektan/kambilan ya ing bulung a ini",
        "feedback-error-title": "Mali",
        "feedback-submit": "I-sumiti",
        "feedback-thanks-title": "Salamat pu!",
-       "headline-anchor-title": "Ing suglung king seksyun a ini"
+       "headline-anchor-title": "Ing suglung king seksyun a ini",
+       "mw-widgets-titleinput-description-new-page": "Ala yu pa ing bulung (page)",
+       "mw-widgets-titleinput-description-redirect": "I-redirekta king/kang $1"
 }
index 48cc5e4..1bf6dc2 100644 (file)
@@ -6,7 +6,9 @@
                        "Shirayuki",
                        "Xqt",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Purodha",
+                       "Geitost"
                ]
        },
        "tog-underline": "Gleecher unnerleine:",
        "resetpass-submit-loggedin": "Paesswatt ennere",
        "resetpass-submit-cancel": "Ausduh",
        "passwordreset": "Paesswatt zerricksetze",
-       "passwordreset-legend": "Paesswatt zerricksetze",
        "passwordreset-username": "Yuuser-Naame:",
        "passwordreset-email": "E-Poschd:",
        "passwordreset-emailelement": "Yuusernaame: $1\nPaesswatt fer nau: $2",
        "ipbreason": "Grund:",
        "ipbsubmit": "Daen Yuuser aabinne",
        "ipbother": "Annere Zeit (englisch):",
-       "ipboptions": "2 Schtund:2 hours,1 Daag:1 day,3 Daag:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Munet:1 month,3 Munede:3 months,6 Monate:6 months,1 Yaar:1 year,Fer immer:infinite",
+       "ipboptions": "2 Schtund:2 hours,1 Daag:1 day,3 Daag:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Munet:1 month,3 Munede:3 months,6 Munede:6 months,1 Yaar:1 year,fer immer:infinite",
        "blocklist-reason": "Grund",
        "ipblocklist-submit": "Guck uff",
        "infiniteblock": "fer immer",
index c806309..fea3d1c 100644 (file)
@@ -77,7 +77,9 @@
                        "VerMa",
                        "Ency",
                        "Kszapsza",
-                       "Openbk"
+                       "Openbk",
+                       "Doctore",
+                       "PiotrAntosz"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "underline-never": "Nigdy",
        "underline-default": "według ustawień skórki lub przeglądarki",
        "editfont-style": "Styl czcionki w polu edycyjnym:",
-       "editfont-default": "Domyślna przeglądarka",
+       "editfont-default": "domyślny przeglądarki",
        "editfont-monospace": "czcionka o stałej szerokości",
        "editfont-sansserif": "czcionka bezszeryfowa",
        "editfont-serif": "czcionka szeryfowa",
        "qbmyoptions": "Moje strony",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
-       "actions": "Działania",
+       "actions": "Akcje",
        "namespaces": "Przestrzenie nazw",
        "variants": "Warianty",
        "navigation-heading": "Menu nawigacyjne",
        "errorpagetitle": "Błąd",
-       "returnto": "Wróć do strony $1.",
+       "returnto": "Wróć do $1.",
        "tagline": "Z {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "help": "Pomoc",
        "search": "Szukaj",
        "talkpage": "Dyskusja",
        "talkpagelinktext": "dyskusja",
        "specialpage": "Strona specjalna",
-       "personaltools": "Osobiste",
-       "articlepage": "Artykuł",
+       "personaltools": "Narzędzia osobiste",
+       "articlepage": "Pokaż zawartość strony",
        "talk": "Dyskusja",
        "views": "Wyświetleń",
        "toolbox": "Narzędzia",
        "imagepage": "Pokaż stronę pliku",
        "mediawikipage": "Strona komunikatu",
        "templatepage": "Strona szablonu",
-       "viewhelppage": "Strona pomocy",
+       "viewhelppage": "Pokaż stronę pomocy",
        "categorypage": "Strona kategorii",
        "viewtalkpage": "Strona dyskusji",
        "otherlanguages": "W innych językach",
        "portal-url": "Project:Portal społeczności",
        "privacy": "Zasady zachowania poufności",
        "privacypage": "Project:Zasady zachowania poufności",
-       "badaccess": "Niewłaściwe uprawnienia",
+       "badaccess": "Błąd uprawnień",
        "badaccess-group0": "Nie masz uprawnień wymaganych do wykonania tej operacji.",
        "badaccess-groups": "Wykonywanie tej operacji zostało ograniczone do użytkowników w {{PLURAL:$2|grupie|jednej z grup:}} $1.",
        "versionrequired": "Wymagane MediaWiki w wersji $1",
        "nstab-image": "Plik",
        "nstab-mediawiki": "Komunikat",
        "nstab-template": "Szablon",
-       "nstab-help": "Pomoc",
+       "nstab-help": "Strona pomocy",
        "nstab-category": "Kategoria",
        "nosuchaction": "Brak takiej operacji",
        "nosuchactiontext": "Działanie określone w adresie URL jest nieprawidłowe.\nMożliwe przyczyny to literówka w adresie, nieprawidłowy link lub błąd w oprogramowaniu {{GRAMMAR:D.lp|{{SITENAME}}}}.",
        "missingarticle-diff": "(różnica: $1, $2)",
        "readonly_lag": "Baza danych została automatycznie zablokowana na czas potrzebny do wykonania synchronizacji zmian między serwerem głównym i serwerami pośredniczącymi.",
        "internalerror": "Błąd wewnętrzny",
-       "internalerror_info": "Błąd wewnętrzny – $1",
+       "internalerror_info": "Błąd wewnętrzny: $1",
        "internalerror-fatal-exception": "Krytyczny wyjątek typu \"$1\"",
        "filecopyerror": "Nie można skopiować pliku „$1” do „$2”.",
        "filerenameerror": "Nie można zmienić nazwy pliku „$1” na „$2”.",
        "directorynotreadableerror": "Ścieżka \"$1\" nie jest odczytywalna.",
        "filenotfound": "Nie można znaleźć pliku „$1”.",
        "unexpected": "Nieoczekiwana wartość „$1”=„$2”.",
-       "formerror": "Błąd – nie można wysłać formularza",
+       "formerror": "Błąd: nie można wysłać formularza.",
        "badarticleerror": "Dla tej strony ta operacja nie może być wykonana.",
        "cannotdelete": "Nie można usunąć strony lub pliku „$1”.\nMożliwe, że zostało to już zrobione przez kogoś innego.",
        "cannotdelete-title": "Strona „$1” nie może być usunięta.",
        "exception-nologin-text-manual": "Musisz $1 aby mieć dostęp do tej strony lub akcji.",
        "virus-badscanner": "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
        "virus-scanfailed": "skanowanie nieudane (błąd $1)",
-       "virus-unknownscanner": "nieznany program antywirusowy",
+       "virus-unknownscanner": "nieznany antivirus:",
        "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.\nNie zapomnij dostosować [[Special:Preferences|preferencji]].",
+       "welcomecreation-msg": "Twoje konto zostało utworzone.\nMożesz zmienić swoje [[Special:Preferences|preferencje]], jeśli chcesz.",
        "yourname": "Nazwa {{GENDER:|użytkownika|użytkowniczki}}",
        "userlogin-yourname": "Nazwa użytkownika",
        "userlogin-yourname-ph": "Wprowadź swoją nazwę użytkownika",
        "userlogin-yourpassword": "Hasło",
        "userlogin-yourpassword-ph": "Wpisz swoje hasło",
        "createacct-yourpassword-ph": "Wprowadź hasło",
-       "yourpasswordagain": "Powtórz hasło",
+       "yourpasswordagain": "Powtórz hasło:",
        "createacct-yourpasswordagain": "Potwierdź hasło",
        "createacct-yourpasswordagain-ph": "Wprowadź hasło jeszcze raz",
-       "remembermypassword": "Zapamiętaj moje hasło na tym komputerze (maksymalnie przez $1 {{PLURAL:$1|dzień|dni}})",
+       "remembermypassword": "Zapamiętaj moje logowanie na tym komputerze (maksymalnie przez $1 {{PLURAL:$1|dzień|dni}})",
        "userlogin-remembermypassword": "Nie wylogowuj mnie",
        "userlogin-signwithsecure": "Użyj bezpiecznego połączenia",
-       "yourdomainname": "Twoja domena",
+       "yourdomainname": "Twoja domena:",
        "password-change-forbidden": "Nie można zmieniać haseł na tej wiki.",
-       "externaldberror": "Wystąpił błąd zewnętrznej bazy autentyfikacyjnej lub nie posiadasz uprawnień koniecznych do aktualizacji zewnętrznego konta.",
+       "externaldberror": "Wystąpił błąd autentyfikacyjnej bazy danych lub nie posiadasz uprawnień koniecznych do aktualizacji zewnętrznego konta.",
        "login": "Zaloguj się",
        "nav-login-createaccount": "Logowanie i rejestracja",
        "userlogin": "Logowanie i rejestracja",
        "createacct-another-email-ph": "Podaj adres e-mail",
        "createaccountmail": "Użyj tymczasowego hasła wygenerowanego losowo i wyślij je na podany adres e-mail",
        "createacct-realname": "Prawdziwe imię i nazwisko (opcjonalnie)",
-       "createaccountreason": "Powód",
+       "createaccountreason": "Powód:",
        "createacct-reason": "Powód",
        "createacct-reason-ph": "Dlaczego zakładasz kolejne konto",
        "createacct-captcha": "Kontrola bezpieczeństwa",
        "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",
-       "createaccounterror": "Nie można utworzyć konta $1",
+       "createaccounterror": "Nie można utworzyć konta: $1",
        "nocookiesnew": "Konto użytkownika zostało utworzone, ale nie jesteś zalogowany.\n{{SITENAME}} używa ciasteczek do przechowywania informacji o zalogowaniu się.\nMasz obecnie w przeglądarce wyłączoną obsługę ciasteczek.\nŻeby się zalogować, włącz obsługę ciasteczek, następnie podaj nazwę użytkownika i hasło dostępu do swojego konta.",
-       "nocookieslogin": "{{SITENAME}} wykorzystuje ciasteczka do przechowywania informacji o zalogowaniu się przez użytkownika.\nMasz obecnie w przeglądarce wyłączoną obsługę ciasteczek.\nSpróbuj ponownie po ich odblokowaniu.",
+       "nocookieslogin": "{{SITENAME}} wykorzystuje ciasteczka do przechowywania informacji o zalogowaniu się przez użytkownika.\nMasz obecnie w przeglądarce wyłączoną obsługę ciasteczek.\nSpróbuj ponownie po jej włączeniu.",
        "nocookiesfornew": "Konto użytkownika nie zostało utworzone, ponieważ nie można było potwierdzić jego źródła.\nUpewnij się, że masz włączoną obsługę ciasteczek, przeładuj stronę i spróbuj ponownie.",
        "noname": "To nie jest poprawna nazwa użytkownika.",
        "loginsuccesstitle": "Zalogowano pomyślnie",
        "pt-userlogout": "Wyloguj",
        "php-mail-error-unknown": "Wystąpił nieznany błąd w funkcji PHP mail()",
        "user-mail-no-addy": "Próba wysłania e‐maila bez adresu odbiorcy",
-       "user-mail-no-body": "Próbowano wysłać e-mail o psutej lub krótkiej treści.",
+       "user-mail-no-body": "Próbowano wysłać email o pustej lub krótkiej treści.",
        "changepassword": "Zmiana hasła",
        "resetpass_announce": "Aby zakończyć proces logowania, musisz ustawić nowe hasło.",
        "resetpass_text": "<!-- Dodaj tekst -->",
        "resetpass_header": "Zmień hasło dla swojego konta",
-       "oldpassword": "Stare hasło",
-       "newpassword": "Nowe hasło",
-       "retypenew": "Powtórz nowe hasło",
+       "oldpassword": "Stare hasło:",
+       "newpassword": "Nowe hasło:",
+       "retypenew": "Powtórz nowe hasło:",
        "resetpass_submit": "Ustaw hasło i zaloguj się",
        "changepassword-success": "Twoje hasło zostało pomyślnie zmienione!",
        "changepassword-throttled": "Ostatnio zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1, zanim ponowisz próbę.",
        "resetpass-expired-soft": "Twoje hasło wygasło i musi zostać zresetowane. Proszę wybrać nowe hasło albo kliknąć na \"{{int:resetpass-submit-cancel}}\", aby zresetować je później.",
        "resetpass-validity-soft": "Twoje hasło jest niepoprawne: $1\n\nWybierz teraz nowe hasło albo kliknij „{{int:resetpass-submit-cancel}}”, aby zresetować je później.",
        "passwordreset": "Wyczyść hasło",
-       "passwordreset-text-one": "Wypełnij ten formularz, aby zresetować hasło.",
+       "passwordreset-text-one": "Wypełnij ten formularz, aby otrzymać tymczasowe hasło na email.",
        "passwordreset-text-many": "{{PLURAL:$1|Wypełnij jedno z poniższych pól, aby otrzymać tymczasowe hasło przez e-mail.}}",
-       "passwordreset-legend": "Zresetuj hasło",
        "passwordreset-disabled": "Na tej wiki wyłączono możliwość resetowania haseł.",
        "passwordreset-emaildisabled": "Wysyłanie emaili zostało wyłączone na tej wiki",
        "passwordreset-username": "Nazwa użytkownika:",
-       "passwordreset-domain": "Domena",
+       "passwordreset-domain": "Domena:",
        "passwordreset-capture": "Czy pokazywać treść wiadomości e‐mail?",
        "passwordreset-capture-help": "Jeśli zaznaczysz to pole, zobaczysz treść wiadomości e‐mail z tymczasowym hasłem, w tej samej formie w jakiej jest wysyłana do użytkownika.",
        "passwordreset-email": "Adres e‐mail:",
        "passwordreset-emailtitle": "Dane konta w {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Ktoś (prawdopodobnie Ty, spod adresu IP $1) poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}\n\n$2\n\n{{PLURAL:$3|Tymczasowego hasła|Tymczasowych haseł}} można użyć w ciągu {{PLURAL:$5|jednego dnia|$5 dni}}.\nPowinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inny poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chcesz go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystać ze swojego starego hasła.",
        "passwordreset-emailtext-user": "Użytkownik $1 poprosił o zresetowanie twojego hasła w {{GRAMMAR:MS.lp{{SITENAME}}}} ($4). Z tym adresem e‐mailowym powiązane {{PLURAL:$3|jest konto użytkownika|są następujące konta użytkowników:}}\n\n$2\n\n{{PLURAL:$3|Tymczasowego hasła|Tymczasowych haseł}} można użyć w ciągu {{PLURAL:$5|jednego dnia|$5 dni}}.\nPowinieneś zalogować się i zmienić hasło na nowe. Jeśli to ktoś inny poprosił o wysłanie przypomnienia lub jeśli pamiętasz aktualne hasło i nie chcesz go zmieniać wystarczy, że zignorujesz tę wiadomość i będziesz nadal korzystać ze swojego starego hasła.",
-       "passwordreset-emailelement": "Nazwa użytkownika – $1\nTymczasowe hasło – $2",
-       "passwordreset-emailsent": "E‐mail pozwalający na zresetowanie hasła został wysłany.",
+       "passwordreset-emailelement": "Nazwa użytkownika: $1\nTymczasowe hasło: $2",
+       "passwordreset-emailsent": "E‐mail resetowania hasła został wysłany.",
        "passwordreset-emailsent-capture": "Wyświetlony poniżej e‐mail pozwalający na zresetowanie hasła został wysłany.",
        "passwordreset-emailerror-capture": "Poniżej wyświetlony e‐mail pozwalający na zresetowanie hasła został wygenerowany, ale nie udało się wysłać go do {{GENDER:$2|użytkownika|użytkowniczki}}: $1",
        "changeemail": "Zmiana adresu e‐mail",
        "changeemail-newemail": "Nowy adres e-mail:",
        "changeemail-none": "(brak)",
        "changeemail-password": "Twoje hasło:",
-       "changeemail-submit": "Zapisz nowy",
+       "changeemail-submit": "Zmień e-mail",
        "changeemail-throttled": "Zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1, zanim ponowisz próbę.",
        "resettokens": "Resetowanie tokenów",
        "resettokens-text": "Na tej stronie możesz zresetować tokeny, które umożliwiają dostęp do pewnych prywatnych danych związanych z Twoim kontem.\n\nNależy to zrobić, jeśli ktoś je poznał lub zdobył hasło do Twojego konta.",
        "resettokens-no-tokens": "Brak tokenów do zresetowania.",
-       "resettokens-legend": "Resetowanie tokenów",
        "resettokens-tokens": "Tokeny:",
        "resettokens-token-label": "$1 (obecna wartość: $2)",
        "resettokens-watchlist-token": "Token kanału internetowego (Atom/RSS) zmian w [[Special:Watchlist|obserwowanych stronach]]",
        "showpreview": "Pokaż podgląd",
        "showdiff": "Podgląd zmian",
        "blankarticle": "<strong>Uwaga:</strong> Strona, którą masz zamiar utworzyć jest pusta.\nJeżeli klikniesz \"{{int:savearticle}}\" ponownie, strona zostanie utworzona bez jakiejkolwiek treści.",
-       "anoneditwarning": "<strong>Uwaga:</strong> Nie jesteś zalogowany. Twój adres IP będzie publicznie widoczny jeśli zrobisz dowolną zmianę. Jeśli <strong>[$1 zalogujesz się]</strong> lub <strong>[$2 stworzysz konto]</strong>, Twoje zmiany zostaną przypisane do konta, wraz z innymi korzyściami.",
+       "anoneditwarning": "<strong>Uwaga:</strong> Nie jesteś zalogowany. Jeśli wykonasz jakąkolwiek zmianę, Twój adres IP będzie widoczny publicznie. Jeśli <strong>[$1 zalogujesz się]</strong> lub <strong>[$2 utworzysz konto]</strong>, Twoje zmiany zostaną przypisane do konta, wraz z innymi korzyściami.",
        "anonpreviewwarning": "''Nie jesteś zalogowany. Jeśli zapiszesz zmiany, w historii edycji strony zostanie umieszczony Twój adres IP.''",
        "missingsummary": "'''Uwaga:''' Nie wprowadz{{GENDER:|iłeś|iłaś|ono}} opisu zmian.\nJeżeli nie chcesz go wprowadzać, naciśnij przycisk „Zapisz” jeszcze raz.",
        "selfredirect": "<strong>Ostrzeżenie:</strong> Przekierowujesz tę stronę do niej samej.\nByć może został przez Ciebie wybrany zły cel przekierowania lub edytujesz niewłaściwą stronę.\nJeżeli ponownie klikniesz „{{int:savearticle}}”, przekierowanie zostanie utworzone.",
        "missingcommenttext": "Wprowadź komentarz poniżej.",
-       "missingcommentheader": "'''Uwaga''' â\80\93 treÅ\9bÄ\87 tytuÅ\82u lub nagÅ\82ówka komentarza jest pusta.\nJeÅ\9bli ponownie klikniesz â\80\9e{{int:savearticle}}â\80\9c, zmiany zostaną zapisane bez niego.",
+       "missingcommentheader": "'''Uwaga''' â\80\93 treÅ\9bÄ\87 tytuÅ\82u lub nagÅ\82ówka komentarza jest pusta.\nJeÅ\9bli ponownie klikniesz â\80\9e{{int:savearticle}}â\80\9d, zmiany zostaną zapisane bez niego.",
        "summary-preview": "Podgląd opisu:",
        "subject-preview": "Podgląd nagłówka:",
        "previewerrortext": "Wystąpił błąd podczas próby podglądu Twoich zmian.",
        "creating": "Tworzenie $1",
        "editingsection": "Edytujesz $1 (sekcja)",
        "editingcomment": "Edytujesz $1 (nowa sekcja)",
-       "editconflict": "Konflikt edycji: $1",
+       "editconflict": "Twoje zmiany nie mogły zostać zapisane z powodu wystąpienia konfliktu edycji. Czy {{GENDER:|chcesz}} rozwiązać go ręcznie?",
        "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",
        "content-model-css": "CSS",
        "content-json-empty-object": "Pusty obiekt",
        "content-json-empty-array": "Pusta tablica",
+       "duplicate-args-warning": "<strong>Ostrzeżenie:</strong> [[:$1]] wywołuje [[:$2]] z więcej niż jedną wartością dla parametru \"$3\". Tylko ostatnia podana wartość zostanie użyta.",
        "duplicate-args-category": "Strony zawierające wywołania szablonów z parametrami o takich samych nazwach",
        "duplicate-args-category-desc": "Strona zawiera szablony, które używają duplikatów argumentów, jak <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> lub <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Uwaga! Ta strona zawiera zbyt wiele wywołań złożonych obliczeniowo funkcji parsera.\n\nPowinno być mniej niż $2 {{PLURAL:$2|wywołanie|wywołania|wywołań}}, a obecnie {{PLURAL:$1|jest $1 wywołanie|są $1 wywołania|jest $1 wywołań}}.",
        "recentchangeslinked-toolbox": "Zmiany w linkowanych",
        "recentchangeslinked-title": "Zmiany w linkowanych z „$1”",
        "recentchangeslinked-summary": "Poniżej znajduje się lista ostatnich zmian na stronach linkowanych z podanej strony (lub we wszystkich stronach należących do podanej kategorii).\nStrony z [[Special:Watchlist|listy obserwowanych]] są '''wytłuszczone'''.",
-       "recentchangeslinked-page": "Tytuł strony",
+       "recentchangeslinked-page": "Tytuł strony:",
        "recentchangeslinked-to": "Pokaż zmiany nie na stronach linkowanych, a na stronach linkujących do podanej strony",
        "upload": "Prześlij plik",
        "uploadbtn": "Prześlij plik",
        "img-auth-public": "Funkcja img_auth.php służy do pobierania plików z prywatnej wiki.\nPonieważ ta wiki została skonfigurowana jako publiczna dla zapewnienia optymalnego bezpieczeństwa img_auth.php została wyłączona.",
        "img-auth-noread": "Użytkownik nie ma dostępu do odczytu „$1”.",
        "http-invalid-url": "Niepoprawny adres URL: $1",
-       "http-invalid-scheme": "Adresy â\80\9e$1â\80\9c nie są obsługiwane.",
+       "http-invalid-scheme": "Adresy â\80\9e$1â\80\9d nie są obsługiwane.",
        "http-request-error": "Nieudane żądanie HTTP ze względu na nieznany błąd.",
        "http-read-error": "Błąd odczytu HTTP.",
        "http-timed-out": "Przekroczony czas żądania HTTP.",
        "randomincategory-nopages": "Nie ma żadnych stron w [[:Category:$1]].",
        "randomincategory-category": "Kategoria:",
        "randomincategory-legend": "Losowa strona w kategorii",
+       "randomincategory-submit": "Dalej",
        "randomredirect": "Losowe przekierowanie",
        "randomredirect-nopages": "Brak jakichkolwiek przekierowań w przestrzeni nazw „$1”.",
        "statistics": "Statystyki",
        "nmembers": "$1 {{PLURAL:$1|element|elementy|elementów}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|element|elementy|elementów}}",
        "nrevisions": "$1 {{PLURAL:$1|wersja|wersje|wersji}}",
-       "nviews": "odwiedzono $1 {{PLURAL:$1|raz|razy}}",
        "nimagelinks": "Używane na $1 {{PLURAL:$1|stronie|stronach}}",
        "ntransclusions": "używany na $1 {{PLURAL:$1|stronie|stronach}}",
        "specialpage-empty": "Ta strona raportu jest pusta.",
        "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}} â\80\93 eâ\80\90mail od użytkownika â\80\9e$1â\80\9c",
+       "defemailsubject": "{{SITENAME}} â\80\93 eâ\80\90mail od użytkownika â\80\9e$1â\80\9d",
        "usermaildisabled": "E‐mail użytkownika jest wyłączony",
        "usermaildisabledtext": "Nie możesz wysyłać e‐maili do innych użytkowników tej wiki",
        "noemailtitle": "Brak adresu e‐mail",
        "emailfrom": "Od",
        "emailto": "Do",
        "emailsubject": "Temat",
-       "emailmessage": "Wiadomość",
+       "emailmessage": "Wiadomość:",
        "emailsend": "Wyślij",
        "emailccme": "Wyślij mi kopię mojej wiadomości.",
        "emailccsubject": "Kopia Twojej wiadomości do $1: $2",
        "rollback-success": "Wycofano edycje użytkownika $1;\nprzywrócono ostatnią wersję autorstwa $2.",
        "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-title-label": "Tytuł strony",
+       "changecontentmodel-reason-label": "Powód:",
+       "logentry-contentmodel-change-revertlink": "Przywróć",
+       "logentry-contentmodel-change-revert": "Przywróć",
        "protectlogpage": "Zabezpieczone",
        "protectlogtext": "Poniżej znajduje się lista zmian w zabezpieczeniu pojedynczych stron.\nWszystkie aktywne zabezpieczenia odnajdziesz na liście [[Special:ProtectedPages|zabezpieczonych stron]].",
        "protectedarticle": "zabezpieczył(a) „[[$1]]”",
        "undeletedpage": "'''Odtworzono stronę $1.'''\n\nZobacz [[Special:Log/delete|rejestr usunięć]], jeśli chcesz przejrzeć ostatnie operacje usuwania i odtwarzania stron.",
        "undelete-header": "Zobacz [[Special:Log/delete|rejestr usunięć]], aby sprawdzić ostatnio usunięte strony.",
        "undelete-search-title": "Przeszukiwanie usuniętych stron",
-       "undelete-search-box": "Szukaj usuniętych stron",
-       "undelete-search-prefix": "Strony o tytułach rozpoczynających się od",
+       "undelete-search-box": "Wyszukiwanie usuniętych stron",
+       "undelete-search-prefix": "Strony o tytułach rozpoczynających się od:",
        "undelete-search-submit": "Szukaj",
        "undelete-no-results": "Nie znaleziono wskazanych stron w archiwum usuniętych.",
        "undelete-filename-mismatch": "Nie można odtworzyć wersji pliku z datą $1: niezgodność nazwy pliku",
        "immobile-target-page": "Nie można przenieść pod wskazany tytuł.",
        "bad-target-model": "Strona docelowa używa innego modelu zawartości. Konwersja $1 → $2 nie jest możliwa.",
        "imagenocrossnamespace": "Nie można przenieść grafiki do przestrzeni nazw nie przeznaczonej dla grafik",
-       "nonfile-cannot-move-to-file": "Nie można przenieÅ\9bÄ\87 obiektu nie bÄ\99\85cego plikiem do przestrzeni nazw â\80\9e{{ns:file}}â\80\9c",
+       "nonfile-cannot-move-to-file": "Nie można przenieÅ\9bÄ\87 obiektu nie bÄ\99\85cego plikiem do przestrzeni nazw â\80\9e{{ns:file}}â\80\9d",
        "imagetypemismatch": "Nowe rozszerzenie nazwy pliku jest innego typu niż zawartość",
        "imageinvalidfilename": "Nazwa pliku docelowego jest nieprawidłowa",
        "fix-double-redirects": "Zaktualizuj wszystkie przekierowania wskazujące na stary tytuł",
        "import-upload": "Prześlij dane w formacie XML",
        "import-token-mismatch": "Utracono dane sesji. Proszę spróbować ponownie.",
        "import-invalid-interwiki": "Nie można importować z podanej wiki.",
-       "import-error-edit": "Strona â\80\9e$1â\80\9c nie zostaÅ\82a zaimportowana ponieważ nie jesteś uprawniony do jej edytowania.",
-       "import-error-create": "Strona â\80\9e$1â\80\9c nie zostaÅ\82a zaimportowana ponieważ nie jesteś uprawniony do jej utworzenia.",
+       "import-error-edit": "Strona â\80\9e$1â\80\9d nie zostaÅ\82a zaimportowana, ponieważ nie jesteś uprawniony do jej edytowania.",
+       "import-error-create": "Strona â\80\9e$1â\80\9d nie zostaÅ\82a zaimportowana, ponieważ nie jesteś uprawniony do jej utworzenia.",
        "import-error-interwiki": "Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest zarezerwowana do linków zewnętrznych (interwiki).",
        "import-error-special": "Strona „$1” nie została zaimportowana, ponieważ należy do specjalnej przestrzeni nazw, która nie zezwala na strony.",
        "import-error-invalid": "Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest nieprawidłowa na tej wiki.",
        "tooltip-pt-logout": "Wyloguj",
        "tooltip-pt-createaccount": "Zachęcamy do stworzenia konta i zalogowania, ale nie jest to konieczne.",
        "tooltip-ca-talk": "Dyskusja o zawartości tej strony",
-       "tooltip-ca-edit": "Możesz edytować tę stronę. Przed zapisaniem zmian użyj przycisku podgląd.",
+       "tooltip-ca-edit": "Edytuj tę stronę",
        "tooltip-ca-addsection": "Dodaj nowy wątek.",
        "tooltip-ca-viewsource": "Ta strona jest zabezpieczona. Możesz zobaczyć tekst źródłowy.",
        "tooltip-ca-history": "Starsze wersje tej strony.",
        "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": "Utwórz ponownie",
+       "recreate": "Strona została usunięta od czasu rozpoczęcia twojej edycji. Naciśnij „$1”, aby ją powtórnie utworzyć.",
        "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.",
        "version-libraries": "Zainstalowane biblioteki",
        "version-libraries-library": "Biblioteka",
        "version-libraries-version": "Wersja",
+       "version-libraries-license": "Licencja",
+       "version-libraries-description": "Opis",
+       "version-libraries-authors": "Autorzy",
        "redirect": "Przekierowanie według pliku, użytkownika, strony lub identyfikatora wersji",
        "redirect-legend": "Przekieruj do pliku lub strony",
        "redirect-summary": "Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji lub identyfikatorze strony) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmerskie",
        "special-characters-title-endash": "półpauza",
        "special-characters-title-emdash": "pauza",
-       "special-characters-title-minus": "minus"
+       "special-characters-title-minus": "minus",
+       "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
+       "mw-widgets-titleinput-description-redirect": "przekierowanie do $1"
 }
index fbbf303..472daa4 100644 (file)
        "group-bureaucrat": "بیوروکریٹ",
        "group-suppress": "چھڈیا گیا",
        "group-all": "(سارے)",
-       "group-user-member": "{{جنس:$1|ورتن والا}}",
-       "group-autoconfirmed-member": "{{جنس:$1|اپنے آپ منے گۓ ورتن والے}}",
-       "group-bot-member": "{{جنس:$1|بوٹ}}",
-       "group-sysop-member": "{{جنس:$1|مکھیا}}",
-       "group-bureaucrat-member": "{{جنس:$1|بیوروکریٹ}}",
-       "group-suppress-member": "{{جنس:$1|چھڈی گئی}}",
+       "group-user-member": "{{GENDER:$1|ورتن والا}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|اپنے آپ منے گۓ ورتن والے}}",
+       "group-bot-member": "{{GENDER:$1|بوٹ}}",
+       "group-sysop-member": "{{GENDER:$1|مکھیا}}",
+       "group-bureaucrat-member": "{{GENDER:$1|بیوروکریٹ}}",
+       "group-suppress-member": "{{GENDER:$1|چھڈی گئی}}",
        "grouppage-user": "{{ns:project}}:ورتن آلے",
        "grouppage-autoconfirmed": "{{ns:project}}:اپنے آپ پکا ہون والا ورتن والا",
        "grouppage-bot": "{{ns:project}}:بوٹ",
        "listusers-editsonly": "تبدیلیاں کرن والے ورتن والے ای دسو۔",
        "listusers-creationsort": "بنان تریخ توں وکھریاں کرو۔",
        "usereditcount": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
-       "usercreated": "{{جنس:$3|بنائی گئی}} نوں $1 تے $2",
+       "usercreated": "{{GENDER:$3|بنائی گئی}} نوں $1 تے $2",
        "newpages": "نویں صفے",
        "newpages-username": "ورتن آلا ناں:",
        "ancientpages": "سب توں پرانے صفے",
        "unlockdbsuccesstext": "ڈیٹابیس دا تالا کھل گیا اے۔",
        "lockfilenotwritable": "ڈیٹابیس فائل تے لکھت نئیں ہوسکدی۔\nڈیٹابیس نوں کھولنا یا تالا لانا اے ویب سرور دی لکھت دی لوڑ اے۔",
        "databasenotlocked": "ڈیٹابیس تے تالا نئیں لگیا۔",
-       "lockedbyandtime": "(توں {{جنس:$1|$1}} نوں $2 وجے $3)",
+       "lockedbyandtime": "(توں {{GENDER:$1|$1}} نوں $2 وجے $3)",
        "move-page": "$1 لے چلو",
        "move-page-legend": "صفہ لے چلو",
        "movepagetext": "تھلے دتے گۓ فـارم نوں ورت کے  اس صفے دا ناں دوبارہ رکھیا جا سکدا اے، نال ہی اس نال جڑے تاریخچہ وی نۓ ناں نال جڑ جاۓ گی۔ اسدے بعد توں اس صفے دا پرانا ناں ، نۓ ناں ول جائیگا۔ تسیں ریڈائریکٹ تازہ کرسکدے اپنے آپ اصل صفے ول\nاگ تسیں اینج ناں کرو تے فیر پک نال [[Special:DoubleRedirects|دوہرا]]  چیک کرو یا [[Special:BrokenRedirects|ٹٹ ریڈائریکٹاں ول]] \n\nاے پکا بنانا تواڈی ذمہ داری اے کہ سارے جوڑ ٹھیک صفاں دی جانب رہنمائی کردے رین۔\n\nاے گل وی ذہن نشین کرلو کہ اگر نۓ منتخب کردہ ناں دا صفحہ پہلاں توں ہی موجود ہو تو ہوسکدا اے کہ صفحہ منتقل نہ ہوۓ ؛ ہاں اگر پہلے توں موجود صفحہ خالی اے  یا اوہ صرف اک -- ریڈائیرکٹ کیتا گیا صفحہ -- ہوۓ تے اس دے نال کوئی تاریخچہ جڑیا نہ ہووے تے ناں بدلیا جاۓ گا۔ گویا، کسی غلطی دی صورت وچ تسی صفحہ نوں دوبارہ اسی پرانے ناں دی جانب منتقل کرسکدے اوہ تے اس طرح پہلے توں موجود کسی صفحہ وچ کوئی مٹانا یا غلطی نئیں ہوۓ گی۔\n\n''' خبردار '''\n کسی اہم تے مشہور صفحہ دے ناں دی تبدیلی، اچانک تے پریشانی آلی گل وی ہوسکدی اے اس لئی؛ تبدیلی توں پہلاں مہربانی کر کے یقین کرلو کہ تسی اسدے نتائج جاندے او۔",
        "htmlform-selectorother-other": "ہور",
        "sqlite-has-fts": "$1 پوری لکھت کھوج مدد نال",
        "sqlite-no-fts": "$1 بنا کسے لکھت مدد دے",
-       "logentry-delete-delete": "$1 {{جنس:$2|مٹایا}} صفہ $3",
-       "logentry-delete-restore": "$1 {{جنس:$2|بچایا}} صفہ $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|مٹایا}} صفہ $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|بچایا}} صفہ $3",
        "logentry-delete-event": "$1 پلٹے وکھالہ {{PLURAL:$5|اک لاگ ایونٹ|$5 لاگ ایونٹس}} تے $3: $4",
        "logentry-delete-revision": "$1 پلٹی وکھالہ {{PLURAL:$5|اک ریوین|$5 ریویناں}} صفے تے $3: $4",
-       "logentry-delete-event-legacy": "$1 {{جنس:$2|بدلی}} لاگ کماں دا وکھالہ $3 تے",
-       "logentry-delete-revision-legacy": "$1 {{جنس:$2|بدلی}} ریوین دا وکھالہ صفہ $3",
-       "logentry-suppress-delete": "$1 {{جنس:$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 لکا کے بدلی {{PLURAL:$5|اک لاگ کم|$5 لاگ کم}} دا وکھالہ $3 تے: $4",
        "logentry-suppress-revision": "$1 لکا کے بدلی {{PLURAL:$5|ریوین|$5 ریویناں}} دا وکھالہ $3 تے: $4",
        "logentry-suppress-event-legacy": "$1 لکا کے بدلیا لاگ کماں دا وکھالہ $3",
-       "logentry-suppress-revision-legacy": "$1 لکا کے {{جنس:$2|بدلی}} ریویناں دا وکھالہ صفہ $3 تے۔",
+       "logentry-suppress-revision-legacy": "$1 لکا کے {{GENDER:$2|بدلی}} ریویناں دا وکھالہ صفہ $3 تے۔",
        "revdelete-content-hid": "مواد لکیا",
        "revdelete-summary-hid": "لکھت سمری لکی",
        "revdelete-uname-hid": "ورتن والے دا ناں لکیا",
        "revdelete-uname-unhid": "ورتن والے دا ناں ںئیں لکیا",
        "revdelete-restricted": "مکھیاں تے روکاں لگیاں",
        "revdelete-unrestricted": "مکھیاں تے روکاں لتھیاں",
-       "logentry-move-move": "$1 {{جنس:$2|پلٹی}} صفہ $3 توں $4",
-       "logentry-move-move-noredirect": "$1 {{جنس:$2|پلٹی}} صفہ $3 توں $4 اک ڑیڈائرکٹ چھڈے بنا",
-       "logentry-move-move_redir": "$1 {{جنس:$2|پلٹی}} صفہ $3 توں $4 ریڈائرکٹ",
-       "logentry-move-move_redir-noredirect": "$1 {{جنس:$2|پلٹی}} صفہ $3 توں $4 اک ریڈائرکٹ دے بنا کسے ریڈائرکٹ دتیاں",
-       "logentry-patrol-patrol": "$1 {{جنس:$2|نشان لگی}} ریوین $4 صفہ $3 ویکھی گئی۔",
-       "logentry-patrol-patrol-auto": "اپنے آپ $1 {{جنس:$2|نشان لگی}} $4 ریوین صفہ $3 دی ویکھی گئی",
-       "logentry-newusers-newusers": "$1 {{جنس:$2|بنایا گیا}} اک ورتن والا کھاتہ۔",
-       "logentry-newusers-create": "$1 {{جنس:$2|بنایا}} اک ورتن والا کھاتہ",
-       "logentry-newusers-create2": "$1 {{جنس:$2|بنایا}} {{جنس:$4|اک ورتن کھاتہ}} $3",
-       "logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔",
+       "logentry-move-move": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 اک ڑیڈائرکٹ چھڈے بنا",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 ریڈائرکٹ",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 اک ریڈائرکٹ دے بنا کسے ریڈائرکٹ دتیاں",
+       "logentry-patrol-patrol": "$1 {{GENDER:$2|نشان لگی}} ریوین $4 صفہ $3 ویکھی گئی۔",
+       "logentry-patrol-patrol-auto": "اپنے آپ $1 {{GENDER:$2|نشان لگی}} $4 ریوین صفہ $3 دی ویکھی گئی",
+       "logentry-newusers-newusers": "$1 {{GENDER:$2|بنایا گیا}} اک ورتن والا کھاتہ۔",
+       "logentry-newusers-create": "$1 {{GENDER:$2|بنایا}} اک ورتن والا کھاتہ",
+       "logentry-newusers-create2": "$1 {{GENDER:$2|بنایا}} {{GENDER:$4|اک ورتن کھاتہ}} $3",
+       "logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{GENDER:$2|بنایا گیا}} بنایا گیا۔",
        "rightsnone": "(کوئی وی نئیں)",
        "revdelete-summary": "لکھائی دا خلاصہ",
        "feedback-adding": "مشورہ  صفے تے دیو۔۔۔۔۔۔۔",
index 564c09c..f813167 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": "کله چې په مخونو او دوتنو کې وړې سمونې کېږي نو ماته دې د بدلون په اړه برېښليک راشي",
        "passwordreset": "پټنوم بياپرځايول",
        "passwordreset-text-one": "د برېښليک له لارې د لنډمهاله پټنوم د ترلاسه کولو لپاره دا فورمه ډکه کړئ.",
        "passwordreset-text-many": "{{PLURAL:$1|د برېښليک له لارې د يو لنډمهاله پټنوم د ترلاسه کولو لپاره له لاندينيو ډگرونو څخه يو يې ډک کړۍ.}}",
-       "passwordreset-legend": "پټنوم بياپرځايول",
        "passwordreset-disabled": "په دې ويکي پټنوم بياپرځای کولو کړنه ناچارنه شوې.",
        "passwordreset-emaildisabled": "په دې ويکي باندې د برېښليک ځانتياوې ناچارنې شوي دي.",
        "passwordreset-username": "کارن-نوم:",
        "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": "کارن مخونه",
        "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": "د دې راپور لپاره کومې پايلې نشته.",
        "unusedimages": "ناکارېدلې دوتنې",
        "wantedcategories": "غوښتلې وېشنيزې",
        "wantedpages": "غوښتلي مخونه",
+       "wantedpages-summary": "دا د هغو ناموجودو مخونو لړليک دی چې تر ټولو ډېرې تړنې لري، په دې لړليک کې د مخ گرځونو مخونه شامل نه دي. د هغو ناموجودو مخونو لپاره چې د مخ گرځونو مخونه په کې شامل دي، [[{{#special:BrokenRedirects}}|د ماتو مخ گرځونو لړليک]] کې کتلی شی.",
        "wantedfiles": "غوښتلې دوتنې",
        "wantedtemplates": "غوښتلې کينډۍ",
        "mostlinked": "د ډېرو تړنو مخونه",
        "delete-edit-reasonlist": "د ړنگولو سببونه سمول",
        "rollbacklink": "په شابېول",
        "rollbacklinkcount": "$1 {{PLURAL:$1|سمون|سمونونه}} پرشابېول",
+       "changecontentmodel-title-label": "مخ سرليک",
+       "changecontentmodel-reason-label": "سبب:",
        "protectlogpage": "د ژغورنې يادښت",
        "protectlogtext": "دلته لاندې د ژغورل شويو مخونو د بدلونونو لړليک راغلی.\nد دم گړۍ فعالو مخ ژغورنو لړليک لپاره د [[Special:ProtectedPages|ژغورل شويو مخونو لړليک]] وگورئ.",
        "protectedarticle": "\"[[$1]]\" وژغورل شو",
        "tooltip-pt-logout": "وتل",
        "tooltip-pt-createaccount": "تاسې ته د يو گڼون د جوړولو او بيا غونډال کې ورننوتلو سپارښتنه کېږي؛ که څه هم چې دا يو اړين کار نه دی",
        "tooltip-ca-talk": "د مخ د مېنځپانگې په اړه خبرې اترې",
-       "tooltip-ca-edit": "تاسÛ\90 Ù\87Ù\85دا Ù\85Ø® Ø³Ù\85Ù\88Ù\84اÛ\8c Ø´Û\8c. Ù\84Ø·Ù\81اÙ\8b Ø¯ Ù\84Ù\8aÚ©Ù\86Û\90 Ø¯ Ø®Ù\88Ù\86دÙ\8a Ú©Ù\88Ù\84Ù\88 Ø¯Ù\85Ø®Ù\87Ø\8c Ø¯ Ù\87Ù\85دÛ\90 Ù\84Ù\8aÚ©Ù\86Û\90 Ù\85Ø®Ù\84Ù\8aدÙ\86Ù\87 Ù\88Ú¯Ù\88رÛ\8d.",
+       "tooltip-ca-edit": "دا Ù\85Ø® Ø³Ù\85Ù\88Ù\84",
        "tooltip-ca-addsection": "يوه نوې برخه پيلول",
        "tooltip-ca-viewsource": "دا مخ ژغورل شوی. تاسې کولای شی چې د دې مخ سرجينه وگورۍ.",
        "tooltip-ca-history": "د دې مخ پخوانۍ بڼې",
        "version-entrypoints-header-url": "يو آر اېل",
        "version-libraries-library": "کتابتون",
        "version-libraries-version": "بڼه",
-       "redirect": "د دوتنې، کارن، مخ يا بڼې پېژند له مخې ورگرځېدنې",
+       "version-libraries-license": "منښتليک",
+       "version-libraries-description": "څرگندونه",
+       "version-libraries-authors": "ليکوالان",
+       "redirect": "ورگرځېدنې د دوتنې، کارن، مخ يا بڼې پېژند له مخې",
        "redirect-submit": "ورځه",
        "redirect-value": "ارزښت:",
        "redirect-user": "کارن پېژند",
        "specialpages-group-pages": "د مخونو لړليک",
        "specialpages-group-pagetools": "د مخ اوزارونه",
        "specialpages-group-wiki": "توکي او اوزارونه",
+       "specialpages-group-redirects": "د ځانگړو مخونو مخ گرځونې",
        "blankpage": "تش مخ",
        "intentionallyblankpage": "همدا مخ په لوی لاس تش پرېښودل شوی دی",
        "external_image_whitelist": " #دا کرښه چې څنگه ده، همداسې پرېږدۍ<pre>\n#لاندې د منظمو اصطلاحگانو ټوټې (يوازې هغه برخه چې د // په مېنځ کې ليکلې) ځای پر ځای کړی\n#دا به د باندنيو انځورونو د يو آر اېل (hotlinked) سره مطابقه شي \n#هغه څه چې مطابقت لري هغه به د انځورونو په توگه ښکاره شي، کوم چې مطابقت نلري نو يوازې د انځور تړنه به ښکاره کېږي\n#هغه کرښې چې په # پيل کېږي د تبصرو په توگه په نظر کې نيول کېږي\n#دا کرښې د غټو تورو او وړو تورو سره حساسې نه دي\n\n#ټولې regex ټوټې د دغې کرښې نه پورته ځای پر ځای کړی. دا کرښه چې څنگه ده، همداسې يې پرېږدۍ</pre>",
        "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-devanagari": "دېوانګري",
        "special-characters-group-thai": "تايلنډي",
        "special-characters-group-lao": "لاوي",
-       "special-characters-group-khmer": "خمري"
+       "special-characters-group-khmer": "خمري",
+       "mw-widgets-titleinput-description-new-page": "پدې نوم لا تر اوسه پورې مخ نشته",
+       "mw-widgets-titleinput-description-redirect": "$1 ته ورگرځول"
 }
index 21c64af..053ee0d 100644 (file)
        "ok": "OK",
        "pagetitle": "$1 - {{SITENAME}}",
        "retrievedfrom": "Disponível em \"$1\"",
-       "youhavenewmessages": "Você tem $1 ($2).",
-       "youhavenewmessagesfromusers": "Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)",
+       "youhavenewmessages": "{{PLURAL:$3|Você tem}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Você tem}} $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2).",
        "youhavenewmessagesmanyusers": "Você tem $1 de muitos usuários ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|uma mensagem nova|999=mensagens novas}}",
        "newmessagesdifflinkplural": "último {{PLURAL:$1|mudança|999=mudanças}}",
        "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.",
        "title-invalid-magic-tilde": "O título da página solicitada contém uma sequência de til inválida (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "O título da página solicitada é muito longo. Ele não deve ser maior que $1 bytes na codificação UTF-8.",
+       "title-invalid-too-long": "O título da página solicitada é muito longo. Ele não deve 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 dois pontos inválidos no começo.",
        "perfcached": "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. No máximo {{PLURAL:$1|um resultado está disponível|$1 resultados estão disponíveis}} na ''cache''.",
        "perfcachedts": "Os seguintes dados encontram-se armazenados no ''cache'' e foram atualizados as $1. No máximo {{PLURAL:$4|um resultado está disponível|$4 resultados estão disponíveis}} no ''cache''.",
        "passwordreset": "Redefinir senha",
        "passwordreset-text-one": "Complete este formulário para trocar sua senha.",
        "passwordreset-text-many": "{{PLURAL:$1|Preencha um dos campos para trocar sua senha.}}",
-       "passwordreset-legend": "Reiniciar a senha",
        "passwordreset-disabled": "Redefinições de senha foram desabilitadas nesta wiki.",
        "passwordreset-emaildisabled": "Os recursos de e-mail foram desativados nesta wiki.",
        "passwordreset-username": "Nome de usuário:",
        "resettokens": "Reiniciar os tokens",
        "resettokens-text": "Você pode reiniciar os tokens, que permitem o acesso a certos dados privados associados à sua conta, aqui.\n\nVocê só deve reiniciá-los se compartilhou-os com alguém ou se a sua conta foi comprometida.",
        "resettokens-no-tokens": "Não existem tokens para reiniciar.",
-       "resettokens-legend": "Reiniciar tokens",
        "resettokens-tokens": "Símbolos:",
        "resettokens-token-label": "$1 (valor atual: $2)",
        "resettokens-watchlist-token": "Tokens para o feed da web (Atom/RSS) das [[Special:Watchlist|mudanças de páginas em sua lista de páginas vigiadas]]",
        "revdelete-no-file": "O arquivo especificado não existe.",
        "revdelete-show-file-confirm": "Tem a certeza de que quer visualizar uma revisão eliminada do arquivo \"<nowiki>$1</nowiki>\" de $2 em $3?",
        "revdelete-show-file-submit": "Sim",
-       "revdelete-selected-text": "'''{{PLURAL:$1|Revisão selecionada|Revisões selecionadas}} de [[:$1]]:'''",
+       "revdelete-selected-text": "{{PLURAL:$1|Revisão selecionada|Revisões selecionadas}} de [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Versão do arquivo selecionado|Versões do arquivo selecionado}} of [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Evento de registro selecionado|Eventos de registro selecionados}}:",
        "revdelete-text-text": "Revisões apagadas continuarão a aparecer na página de histórico, mas parte de seus conteúdos estarão inacessíveis ao público.",
        "randomincategory-nopages": "Não há paginas em [[:Category:$1]].",
        "randomincategory-category": "Categoria:",
        "randomincategory-legend": "Página aleatória na categoria",
+       "randomincategory-submit": "Ir",
        "randomredirect": "Redirecionamento aleatório",
        "randomredirect-nopages": "Não há redirecionamentos no espaço nominal \"$1\".",
        "statistics": "Estatísticas",
        "nmembers": "$1 {{PLURAL:$1|membro|membros}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
        "nrevisions": "$1 {{PLURAL:$1|revisão|revisões}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visitas}}",
        "nimagelinks": "Utilizada em $1 {{PLURAL:$1|página|páginas}}",
        "ntransclusions": "usada {{PLURAL:$1|numa página|em $1 páginas}}",
        "specialpage-empty": "Atualmente não há dados a serem exibidos nesta página.",
        "delete-confirm": "Eliminar \"$1\"",
        "delete-legend": "Eliminar",
        "historywarning": "<strong>Aviso:</strong> A página que está prestes a eliminar tem um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
-       "confirmdeletetext": "Encontra-se prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico.\nPor favor, confirme que possui a intenção de fazer isto, que compreende as consequências e que encontra-se a fazer isto de acordo com as [[{{MediaWiki:Policy-url}}|políticas]] do projeto.",
+       "confirmdeletetext": "Encontra-se prestes a eliminar uma página juntamente com todo o seu histórico.\nPor favor, confirme que possui a intenção de fazer isto, que compreende as consequências e que encontra-se a fazer isto de acordo com as [[{{MediaWiki:Policy-url}}|políticas]] do projeto.",
        "actioncomplete": "Ação concluída",
        "actionfailed": "Falha na ação",
        "deletedtext": "\"$1\" foi eliminada.\nConsulte $2 para um registro de eliminações recentes.",
        "logentry-merge-merge": "$1 {{GENDER:$2|fundiu}} $3 com $4 (edições até $5)",
        "logentry-move-move": "$1 moveu a página $3 para $4",
        "logentry-move-move-noredirect": "$1 moveu a página $3 para $4 sem deixar um redirecionamento",
-       "logentry-move-move_redir": "$1 moveu a página $3 para $4 através de um redirecionamento",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|moveu}} a página $3 para $4 através de um redirecionamento",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|moveu}} a página $3 para $4 sobre um redirecionamento sem deixar um redirecionamento",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|marcou}} a revisão $4 da página $3 como patrulhada",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcou}} automaticamente a revisão $4 da página $3 como patrulhada",
index 6ad83be..e1c80b8 100644 (file)
        "passwordreset": "Redefinir palavra-passe",
        "passwordreset-text-one": "Preencha este formulário para receber uma palavra-passe temporária por correio eletrónico.",
        "passwordreset-text-many": "{{PLURAL:$1|Preencha um dos campos para receber uma palavra-passe temporária por correio eletrónico.}}",
-       "passwordreset-legend": "Redefinir palavra-passe",
        "passwordreset-disabled": "A redefinição da palavra-passe foi impossibilitada nesta wiki.",
        "passwordreset-emaildisabled": "A funcionalidade de correio eletrónico foi desativada nesta wiki.",
        "passwordreset-username": "Nome de utilizador(a):",
        "resettokens": "Redefinir chaves",
        "resettokens-text": "Pode redefinir as chaves de acesso a certos dados privados associados à sua conta aqui.\n\nDeve fazê-lo se as divulgou acidentalmente a alguém ou se a sua conta tiver sido comprometida.",
        "resettokens-no-tokens": "Não há chaves para redefinir.",
-       "resettokens-legend": "Redefinir chaves",
        "resettokens-tokens": "Chaves:",
        "resettokens-token-label": "$1 (valor atual: $2)",
        "resettokens-watchlist-token": "Chave para o ''feed'' Atom/RSS de [[Special:Watchlist|mudanças às páginas vigiadas]]",
        "creating": "A criar $1",
        "editingsection": "A editar $1 (secção)",
        "editingcomment": "A editar $1 (nova secção)",
-       "editconflict": "Conflito de edição: $1",
+       "editconflict": "As suas alterações não puderam ser gravadas devido a um conflito de edição. Gostaria de resolver o conflito manualmente?",
        "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",
        "badsig": "Assinatura inválida; verifique o código HTML utilizado.",
        "badsiglength": "A sua assinatura é demasiado longa.\nNão deverá conter mais de $1 {{PLURAL:$1|carácter|caracteres}}.",
        "yourgender": "Como prefere ser descrito?",
-       "gender-unknown": "Prefiro não dizer",
+       "gender-unknown": "Ao mencioná-lo, o software irá utilizar palavras de género neutro sempre que possível",
        "gender-male": "Ele edita páginas wiki",
        "gender-female": "Ela edita páginas wiki",
        "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
        "randomincategory-nopages": "Não há páginas na categoria [[:Category:$1|$1]].",
        "randomincategory-category": "Categoria:",
        "randomincategory-legend": "Página aleatória na categoria",
+       "randomincategory-submit": "Ir",
        "randomredirect": "Redirecionamento aleatório",
        "randomredirect-nopages": "Não há redirecionamentos no domínio \"$1\".",
        "statistics": "Estatísticas",
        "nmembers": "$1 {{PLURAL:$1|membro|membros}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
        "nrevisions": "$1 {{PLURAL:$1|edição|edições}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visitas}}",
        "nimagelinks": "Usada {{PLURAL:$1|numa página|em $1 páginas}}",
        "ntransclusions": "usada {{PLURAL:$1|numa página|em $1 páginas}}",
        "specialpage-empty": "Não existem dados para apresentar.",
        "delete-confirm": "Eliminar \"$1\"",
        "delete-legend": "Eliminar",
        "historywarning": "<strong>Aviso:</strong> A página que está prestes a eliminar tem um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
-       "confirmdeletetext": "Está prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico.\nConfirme que é realmente esta a sua intenção, que compreende as consequências e que o faz de acordo com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]] do projeto, por favor.",
+       "confirmdeletetext": "Está prestes a eliminar uma página juntamente com todo o seu histórico.\nConfirme que é realmente esta a sua intenção, que compreende as consequências e que o faz de acordo com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]] do projeto, por favor.",
        "actioncomplete": "Operação executada",
        "actionfailed": "Operação falhou",
        "deletedtext": "\"$1\" foi eliminada.\nConsulte $2 para um registo de eliminações recentes.",
        "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-reason-label": "Motivo:",
        "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]]\"",
        "tooltip-pt-logout": "Sair da conta",
        "tooltip-pt-createaccount": "É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
-       "tooltip-ca-edit": "Pode editar esta página.\nUtilize o botão de antevisão do resultado antes de gravar, por favor.",
+       "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-addsection": "Iniciar uma nova secção",
        "tooltip-ca-viewsource": "Esta página está protegida.\nApenas pode visualizar o seu conteúdo",
        "tooltip-ca-history": "Edições anteriores desta página.",
        "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": "Recriar",
+       "recreate": "A página que começou a editar foi eliminada entretanto. Pressione \"$1\" para recriá-la.",
        "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.",
        "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 pelo ID do ficheiro, do utilizador ou da revisão",
        "redirect-legend": "Redirecionar para um ficheiro ou página",
        "redirect-summary": "Esta página especial redireciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página) ou para uma página de utilizador (dado um ID numérico do utilizador). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Cambojano",
        "special-characters-title-endash": "hífen",
        "special-characters-title-emdash": "travessão",
-       "special-characters-title-minus": "sinal de subtração"
+       "special-characters-title-minus": "sinal de subtração",
+       "mw-widgets-titleinput-description-new-page": "a página ainda não existe.",
+       "mw-widgets-titleinput-description-redirect": "redirecionar para $1"
 }
index cd2e0e2..ca6d375 100644 (file)
                        "Totosunarto",
                        "Macofe",
                        "FRacco",
-                       "Robin0van0der0vliet"
+                       "Robin0van0der0vliet",
+                       "TTO"
                ]
        },
        "sidebar": "{{notranslate}}",
        "passwordreset": "Title of [[Special:PasswordReset]].\n{{Identical|Reset password}}",
        "passwordreset-text-one": "Text on [[Special:PasswordReset]] that appears when there is only one way of resetting the password.\n\n{{msg-mw|Passwordreset-text-many}} will be used, when there are multiple ways of resetting the password.",
        "passwordreset-text-many": "Text on [[Special:PasswordReset]] that appears when there are multiple ways of resetting the password.\n\nParameters:\n* $1 - the number of password reset routes\n\n{{msg-mw|Passwordreset-text-one}} will be used, when there is only one way of resetting the password.",
-       "passwordreset-legend": "{{Identical|Reset password}}",
        "passwordreset-disabled": "Used as error message in changing password.",
        "passwordreset-emaildisabled": "Used as error message in changing password when site's email feature is disabled.",
        "passwordreset-username": "{{Identical|Username}}",
        "passwordreset-email": "{{Identical|E-mail address}}",
        "passwordreset-emailtitle": "Used as subject (title) of email.",
        "passwordreset-emailtext-ip": "Be consistent with {{msg-mw|Passwordreset-emailtext-user}}.\n\nParameters:\n* $1 - an IP address\n* $2 - message {{msg-mw|Passwordreset-emailelement}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
-       "passwordreset-emailtext-user": "Be consistent with {{msg-mw|Passwordreset-emailtext-ip}}.\n\nParameters:\n* $1 - a user name\n* $2 - message {{msg-mw|Passwordreset-emailelement|notext=1}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
+       "passwordreset-emailtext-user": "Be consistent with {{msg-mw|Passwordreset-emailtext-ip}}.\n\nParameters:\n* $1 - a user name, no GENDER suport.\n* $2 - message {{msg-mw|Passwordreset-emailelement|notext=1}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
        "passwordreset-emailelement": "This is a body of a password reset email to allow them into the system with a new password. Parameters:\n* $1 - the user's login name. This parameter can be used for GENDER.\n* $2 - the temporary password given by the system",
        "passwordreset-emailsent": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
        "passwordreset-emailsent-capture": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
        "resettokens-summary": "{{ignored}}",
        "resettokens-text": "Text on [[Special:ResetTokens]].",
        "resettokens-no-tokens": "Additional text on [[Special:ResetTokens]] if the user has no tokens.",
-       "resettokens-legend": "Form legend on [[Special:ResetTokens]].\n{{Identical|Reset token}}",
        "resettokens-tokens": "Form label on [[Special:ResetTokens]].\n{{Identical|Token}}",
        "resettokens-token-label": "Label for each checkbox on [[Special:ResetTokens]]. Parameters:\n* $1 - short information about the token (for example {{msg-mw|resettokens-watchlist-token}})\n* $2 - its current value",
        "resettokens-watchlist-token": "Label for watchlist token checkbox on [[Special:ResetTokens]] (see {{msg-mw|prefs-watchlist-token}} at [[Special:Preferences#mw-prefsection-watchlist]]).",
        "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}\n{{Identical|Creating}}",
        "editingsection": "This message displays at the top of the page when a user is editing a page section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
        "editingcomment": "This message displays at the top of the page when a user is creating a new section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
-       "editconflict": "Used as title of error message. Parameters:\n* $1 - page title",
+       "editconflict": "Alert message when saving a page causes an edit conflict",
        "editnotice-notext": "{{ignored}}\nCustom message on top of the edit page if no edit notices apply to this page.",
        "explainconflict": "Appears at the top of a page when there is an edit conflict.\n\nSee also:\n* {{msg-mw|Savearticle}}",
        "yourtext": "Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.\n\nAlso used in Edit Conflict page; the diff between {{msg-mw|yourtext}} and {{msg-mw|storedversion}}.",
        "copyrightwarning2": "Copyright warning displayed under the edit box in editor\n*$1 - license name",
        "editpage-head-copy-warn": "{{ignored}}Custom copyright warning in the header of an edit page.",
        "editpage-tos-summary": "{{notranslate}}",
+       "editpage-cannot-use-custom-model": "Error message shown if the database does not support changing the content model of a page.",
        "longpage-hint": "{{notranslate}}\n* <tt>$1</tt>: Size of the textbox formatted for output, using an appropriate unit ({{msg-mw|size-bytes}}, {{msg-mw|size-kilobytes}}, {{msg-mw|size-megabytes}}, {{msg-mw|size-gigabytes}})\n* <tt>$2</tt>: Size of the textbox in bytes, not formatnum",
        "longpageerror": "Warning displayed when trying to save a text larger than the maximum size allowed.\n\nParameters:\n* $1 - submitted size (in kilobytes)\n* $2 - maximum size (in kilobytes)",
        "readonlywarning": "Parameters:\n* $1 - reason",
        "currentrevisionlink": "{{Identical|Current revision}}",
        "cur": "Link in page history ([https://translatewiki.net/w/i.php?title=MediaWiki:Cur/qqq&action=history example])",
        "next": "Link in page history\n\n{{Identical|Next}}",
-       "last": "Link in page history\n\n{{Identical|Last}}",
+       "last": "Link in page history",
        "page_first": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in alphabetical order, e.g. the '[[Special:Categories|Categories]]' special page. It is followed by the message {{msg-mw|Viewprevnext}}.\n{{Identical|First}}",
        "page_last": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in alphabetical order, e.g. the '[[Special:Categories|Categories]]' special page. It is followed by the message {{msg-mw|Viewprevnext}}.\n\n{{Identical|Last}}",
        "histlegend": "Text in history page.\n\nSee also:\n* {{msg-mw|Cur}}\n* {{msg-mw|Last}}\n* {{msg-mw|Minoreditletter}}",
        "badsig": "Error message displayed when entering invalid signature in user preferences",
        "badsiglength": "Warning message that is displayed on [[Special:Preferences]] when trying to save a signature that is too long.\n\nParameters\n* $1 - the maximum number of characters that is allowed in a signature (multi-byte characters are counted as one character)",
        "yourgender": "Used in [[Special:Preferences]], first tab, in the Internationalisation section.\nThis may be customized for other languages. This should sound like a question, the answer to which can be selected in one of these:\n* {{msg-mw|gender-unknown}}\n* {{msg-mw|gender-male}}\n* {{msg-mw|gender-female}}\nThe idea is that this preference is used for speaking to the user and about the user, and the label and the preference are supposed to demonstrate it.",
-       "gender-unknown": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name is not to be made public, cannot be determined, or matches none of the other choices preset in the select.\n\nThis may appropriately customized for your language. It should sound like a reply to {{msg-mw|yourgender}}.",
+       "gender-unknown": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name is gender neutral or unknown.\n\nThis may be appropriately customized for your language. It should sound like a reply to {{msg-mw|yourgender}}.",
        "gender-male": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt.\nChoosing it indicates that the grammatical gender of the user name should be \"male\" for those languages having a \"normal\" male grammatical gender.\n\nYou have to customize this example for your language if needed to have a sentence which varies depending on the grammatical gender.\nThe wording must demonstrate the actual usage of the option. It should sound like a reply to {{msg-mw|Yourgender}}.\n\nFor example, if the verb \"I edit\" in your language is different in masculine and feminine, translate \"I edit\" in masculine here.\nIf your language does not make a distinction at all, use sentences like \"he is male/a man\".",
        "gender-female": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt.\nChoosing it indicates that the grammatical gender of the user name should be \"female\" for those languages having a \"normal\" female grammatical gender.\n\nYou have to customize this example for your language if needed to have a sentence which varies depending on the grammatical gender.\nThe wording must demonstrate the actual usage of the option. It should sound like a reply to {{msg-mw|Yourgender}}.\n\nFor example, if the verb \"I edit\" in your language is different in masculine and feminine, translate \"I edit\" in feminine here.\nIf your language does not make a distinction at all, use sentences like \"she is female/woman\".",
        "prefs-help-gender": "Used as additional description for {{msg-mw|yourgender}} field in [[Special:Preferences]], section {{msg-mw|prefs-i18n}}.",
        "randomincategory-nopages": "Message shown from [[Special:RandomInCategory]] if the category is empty.\n\nParameters:\n* $1 - the category name (without the namespace prefix)",
        "randomincategory-category": "Shown on [[Special:RandomInCategory]] as a label for a text box allowing the user to input a category name.\n{{Identical|Category}}",
        "randomincategory-legend": "Used as fieldset label for the form on [[Special:RandomInCategory]].",
+       "randomincategory-submit": "Used as label for the Submit button on [[Special:RandomInCategory]].\n{{Identical|Go}}",
        "randomredirect": "{{doc-special|RandomRedirect}}",
        "randomredirect-nopages": "Parameters:\n* $1 - list of namespaces\n* $2 - (Unused) number of namespaces\nSee also:\n* {{msg-mw|Randompage-nopages}}",
        "statistics": "{{doc-special|Statistics}}\n{{Identical|Statistics}}",
        "nmembers": "Appears in brackets after each category listed on the special page [[Special:WantedCategories]].\n\nParameters:\n* $1 - the number of members of the category\nSee also:\n* {{msg-mw|Nmemberschanged}}",
        "nmemberschanged": "Appears in brackets after each category listed on the special page [[Special:WantedCategories]] if the number of pages in the category has changed since the list was last refreshed.\n\nParameters:\n* $1 - the original number of members of the category\n* $2 - the current one\nSee also:\n* {{msg-mw|Nmembers}}",
        "nrevisions": "Used as link text in [[Special:FewestRevisions]].\n\nThe link points to the page history (action=history).\n\nParameters:\n* $1 - number of revisions",
-       "nviews": "This message is used on [[Special:PopularPages]] to say how many times each page has been viewed.\n\nPreceded by the page title, like: Page title ($1 views)\n\nParameters:\n* $1 - the number of views",
        "nimagelinks": "Used on [[Special:MostLinkedFiles]] to indicate how often a specific file is used.\n\nParameters:\n* $1 - number of pages\nSee also:\n* {{msg-mw|Ntransclusions}}",
        "ntransclusions": "Used on [[Special:MostTranscludedPages]] to indicate how often a template is in use.\n\nParameters:\n* $1 - number of pages\nSee also:\n* {{msg-mw|Nimagelinks}}",
        "specialpage-empty": "Used on a special page when there is no data. For example on [[Special:Unusedimages]] when all images are used.",
        "rollback-success": "This message shows up on screen after successful revert (generally visible only to admins). $1 describes user whose changes have been reverted, $2 describes user which produced version, which replaces reverted version.\n{{Identical|Revert}}\n{{Identical|Rollback}}",
        "sessionfailure-title": "Used as title of the error message {{msg-mw|Sessionfailure}}.",
        "sessionfailure": "Used as error message.\n\nThe title for this error message is {{msg-mw|Sessionfailure-title}}.",
+       "changecontentmodel": "Title of the change content model special page",
+       "changecontentmodel-legend": "Legend of the fieldset on the change content model special page",
+       "changecontentmodel-title-label": "Label for the input field where the target page title should be entered\n{{Identical|Page title}}",
+       "changecontentmodel-model-label": "Label of the dropdown listing available content model types the user can change a page to",
+       "changecontentmodel-reason-label": "{{Identical|Reason}}",
+       "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]].",
+       "logentry-contentmodel-change": "{{Logentry}}\n$4 is the original content model.\n$5 is the new content model.",
+       "logentry-contentmodel-change-revertlink": "Text on a link that reverts the content model change. {{identical|revertmove}}.",
+       "logentry-contentmodel-change-revert": "Prefilled edit summary when reverting a content model change. {{identical|revertmove}}",
        "protectlogpage": "{{doc-logpage}}\n\nTitle of [[Special:Log/protect]].",
        "protectlogtext": "Text in [[Special:Log/protect]].",
        "protectedarticle": "Text describing an action on [[Special:Log]]. $1 is a page title.",
        "tooltip-pt-logout": "Tooltip shown when hovering over the {{msg-mw|Logout}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}\n{{Identical|Log out}}",
        "tooltip-pt-createaccount": "Tooltip shown when hovering over the link 'Create account' in the upper right corner show on all pages while not logged in.",
        "tooltip-ca-talk": "Tooltip shown when hovering over the {{msg-mw|Talk}} tab.\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 a 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\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}\n{{Identical|Content page}}",
-       "tooltip-ca-edit": "The tooltip when hovering over the {{msg-mw|Edit}} tab.\n\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Accesskey-ca-edit}}\n* {{msg-mw|Tooltip-ca-edit}}",
+       "tooltip-ca-edit": "Over-ridden tooltip of the wikitext \"Edit source\" tab.\n{{Identical|Edit this page}}",
        "tooltip-ca-addsection": "Tooltip shown when hovering over the \"addsection\" tab (shown on talk pages).\n\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
        "tooltip-ca-viewsource": "Tooltip displayed when hovering over the {{msg-mw|Viewsource}} tab.\n\nSee also:\n* {{msg-mw|Viewsource}}\n* {{msg-mw|Accesskey-ca-viewsource}}\n* {{msg-mw|Tooltip-ca-viewsource}}",
        "tooltip-ca-history": "Used as tooltip for {{msg-mw|Vector-view-history}}.\n\nSee for example [{{canonicalurl:Main Page|useskin=vector}} Main Page]\n\nSee also:\n* {{msg-mw|Vector-view-history}}\n* {{msg-mw|Accesskey-ca-history}}",
        "pageinfo-robot-index": "An indication that the page is indexable by search engines, that is listed in their search results.\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.\n{{Identical|Allowed}}",
        "pageinfo-robot-noindex": "An indication that the page is not indexable (that is, is not listed on the results page of a search engine).\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
        "pageinfo-watchers": "Header of the row in the first table of the info action.",
+       "pageinfo-visiting-watchers": "Header of the row in the first table of the info action. More explicitly, the number counts how many users have last visited the page 26 weeks or less (by default) before the latest edit to the page; in other words, watching users who may see a future edit within about 6 months.",
        "pageinfo-few-watchers": "Message displayed when there are fewer than $wgUnwatchedPageThreshold watchers. $1 is the value of $wgUnwatchedPageThreshold.",
+       "pageinfo-few-visiting-watchers": "Message displayed when there are fewer than 2 \"active\" watchers.",
        "pageinfo-redirects-name": "Header of the row in the first table of the info action.\n\nFollowed by {{msg-mw|Pageinfo-redirects-value}}.\n\nUsed as link text. The link points to \"{{int:Whatlinkshere-title}}\" page ([[Special:WhatLinksHere]]).\n\nSee example: [{{canonicalurl:Main page|action=info}} Main page?action=info]",
        "pageinfo-redirects-value": "{{Optional}}\nParameters:\n* $1 - the number of redirects to the page",
        "pageinfo-subpages-name": "Header of the row in the first table of the info action.\n\nFollowed by {{msg-mw|Pageinfo-subpages-value}}.\n\nUsed as link text. The link points to the \"{{int:Prefixindex}}\" page ([[Special:PrefixIndex]]).\n\nSee example: [{{canonicalurl:Main page|action=info}} Main page?action=info]",
        "exif-ycbcrpositioning-2": "If the Chrominance samples are on top of to the Luminance samples.\nSee: http://www.awaresystems.be/imaging/tiff/tifftags/ycbcrpositioning.html\n{{Related|Exif-ycbcrpositioning}}",
        "exif-dc-contributor": "People who helped make the resource, but are secondary in contribution to the author.\n{{Identical|Contributor}}",
        "exif-dc-coverage": "\"The extent or scope of the resource\" see dc:coverage in http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf",
-       "exif-dc-date": "One or more dates associated with the image. How they are associated is not really defined. From the dc:date XMP property.",
+       "exif-dc-date": "One or more dates associated with the image. How they are associated is not really defined. From the dc:date XMP property.\n{{Identical|Date}}",
        "exif-dc-publisher": "One or more publisher of resource.\n{{Identical|Publisher}}",
        "exif-dc-relation": "Something related to this image. Often a list of URL's to related images.",
        "exif-dc-rights": "Copyright information about the image/media given in informal language.\n{{Identical|Right}}",
        "deletedwhileediting": "Used as warning in the EditPage page.",
        "confirmrecreate": "Followed by the checkbox which has the label {{msg-mw|Recreate}}.\n\nParameters:\n* $1 - username\n* $2 - reason\nSee also:\n* {{msg-mw|Confirmrecreate-noreason}}",
        "confirmrecreate-noreason": "Followed by the checkbox which has the label {{msg-mw|Recreate}}.\n\nParameters:\n* $1 - username\n* $2 - (Unused) reason\nSee also:\n* {{msg-mw|Confirmrecreate}}",
-       "recreate": "Used as link text.\n\nSee also:\n* {{msg-mw|Recreate}}\n* {{msg-mw|Tooltip-recreate}}",
+       "recreate": "Text shown when the editor fails to save the page due to it having been deleted since they opened VE. $1 is the message {{msg-mw|ooui-dialog-process-continue}}.",
        "unit-pixel": "{{optional}}\npx is the abbreviation for \"pixel\".",
        "confirm_purge_button": "Used as Submit button text.\n{{Identical|OK}}",
        "confirm-purge-top": "Used as confirmation message.",
        "version-libraries": "Header on [[Special:Version]] above a table that lists installed external libraries and their version numbers.",
        "version-libraries-library": "Column header for the library's name\n{{Identical|Library}}",
        "version-libraries-version": "Column header for the library's version number\n{{Identical|Version}}",
+       "version-libraries-license": "Column header for the library's license\n{{Identical|License}}",
+       "version-libraries-description": "Column header for the library's description\n{{Identical|Description}}",
+       "version-libraries-authors": "Column header for the library's authors\n{{Identical|Author}}",
        "redirect": "{{doc-special|Redirect}}\nThis means \"Redirect by file'''name''', user '''ID''', page '''ID''', or revision ID\".",
        "redirect-legend": "Legend of fieldset around input box in [[Special:Redirect]]",
        "redirect-text": "Inside fieldset for [[Special:Redirect]]",
        "deletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - deleted page name\n{{Identical|Deleted}}",
        "suppressedarticle": "Part of a [[mw:Manual:RevisionDelete|RevisionDelete]] log entry. Parameters:\n* $1 - suppressed page name\n{{Identical|Suppressed}}",
        "undeletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - restored (undeleted) page name",
-       "patrol-log-line": "Text of notes on entries in the [http://translatewiki.net/w/i.php?title=Special%3ALog&type=patrol&user=&page=&year=&month=-1 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-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}}",
        "special-characters-group-khmer": "{{Identical|Khmer}}",
        "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"
+       "special-characters-title-minus": "Title tooltip for the minus sign character (−), not to be confused with a hyphen",
+       "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 8d4a1e8..fdb1d76 100644 (file)
        "otherlanguages": "Huk simikunapi",
        "redirectedfrom": "($1-manta pusampusqa)",
        "redirectpagesub": "Pusampusqa p'anqa",
+       "redirectto": "Kayman pusampuy:",
        "lastmodifiedat": "Kay p'anqaqa $2, $1 qhipaq kutitam hukchasqa karqan.",
        "viewcount": "Kay p'anqaqa {{PLURAL:$1|huk kuti|$1 kuti}} watukusqañam.",
        "protectedpage": "Amachasqa p'anqa",
        "preview": "Manaraq waqaychaspa qhawariy",
        "showpreview": "Ñawpaqta qhawallay",
        "showdiff": "Hukchasqakunata rikuchiy",
-       "anoneditwarning": "''Paqtataq:'' Manaraqmi ruraqpa sutiykita qumurqunkichu. IP huchhaykim kay p'anqap hukchay hallch'ayninpi waqaychasqa kanqa.",
+       "anoneditwarning": "<strong>Paqtataq:</strong> Manaraqmi ruraqpa sutiykita qumurqunkichu. Llamk'apuptiykiqa, IP huchhaykim kay p'anqap hukchay hallch'ayninpi wakin runakunapaq rikuna waqaychasqa kanqa. Ruraqpa sutiykiwan <strong>[$1 yaykuptiykiqa]</strong> icha musuq <strong>[$2 rakiqunata kamariptiykiqa]</strong>, llamk'apusqaykikuna ruraqpa sutiykiwanmi hallch'aypi waqaychasqa kanqa, wakin allinkunapas qampaqmi kanqa.",
        "anonpreviewwarning": "''Manam ruraqpa sutiykiwan yaykusqa kachkankichu. Imatapas waqaychaptiykiqa, IP huchhaykim hallch'asqa kanqa kay p'anqap llamk'apuy wiñay kawsayninpi.''",
        "missingsummary": "'''Paqtataq:''' Manaraqmi llamk'apusqaykimanta pisichaytachu qillqamurqunki. Musuqmanta «{{int:savearticle}}» nisqapi ñit'iptiykiqa, llamk'apusqayki waqaychasqam kanqa mana pisichay kaptinpas.",
        "missingcommenttext": "Ama hina kaspa, kay qatiqpi willaspa qillqamuy.",
        "showhideselectedversions": "Akllasqa musuqchasqakunata rikuchiy/pakay",
        "editundo": "kutichiy",
        "diff-empty": "(Manam wak hina kanchu)",
+       "diff-multi-sameuser": "Kikin ruraqpa {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}}",
+       "diff-multi-otherusers": "(Wakin {{PLURAL:$2|huk|$2}} ruraqpa {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})",
        "diff-multi-manyusers": "({{PLURAL:$2|Hukmanta|$2-manta}} aswan ruraqkunap {{PLURAL:$1|chawpipi huk llamk'apusqanqa manam rikuchisqachu|chawpipi $1 llamk'apusqankunaqa manam rikuchisqachu}})",
        "difference-missing-revision": "Kay wakin kaymanta ($1) {{PLURAL:$2|huk musuqchasqa|$2 musuqchasqakuna}} manam tarisqachu.\n\nKayqa tukurqanman qullusqa p'anchaman t'inkimuq mawk'ayasqa wiñay kawsay t'inkiraykuchá.\nImaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy hallch'apim] tariykiman.",
        "searchresults": "Maskaymanta tarisqakuna",
        "spam_reverting": "Qhipaq kaq mana $1-man t'inkimuqniyuq llamk'apusqaman kutichispa",
        "spam_blanking": "Tukuy llamk'apusqakunaqa $1-manmi t'inkimuq, ch'usaqchaspa",
        "spam_deleting": "Tukuy musuqchasqakunaqa $1-manmi t'inkimun, qulluspa",
+       "simpleantispam-label": "Spam hark'ana llanchiy.\nKayta <strong>AMA</strong> hunt'aychu!",
        "pageinfo-title": "\"$1\" sutiyuq p'anqamanta willay",
        "pageinfo-not-current": "Achachaw, manam atinichu mawk'a llamk'apusqakunamanta kay willaykunata qusuyta.",
        "pageinfo-header-basic": "Tiksi willaykuna",
        "tags": "Waliq unancha hukchay",
        "tag-filter": "[[Special:Tags|Unancha]] ch'illchina:",
        "tag-filter-submit": "Ch'illchina",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Unanchacha|Unanchachakuna}}]]: $2)",
        "tags-title": "Unanchakuna",
        "tags-intro": "Kay p'anqapiqa hukchaykunata llamp'u kaqpa sananchananpaq unanchakunatam rikunki, sut'inkunatapas.",
        "tags-tag": "Unanchachap sutin",
        "logentry-rights-rights": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3-pa huñuman kapuyninta hukchan $4-manta $5-man",
        "logentry-rights-rights-legacy": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3-pa huñuman kapuyninta hukchan",
        "logentry-rights-autopromote": "{{GENDER:$2|}}$1 sutiyuq ruraqqa kikinmantam ñawparikun $4-manta $5-man",
+       "logentry-upload-upload": "$1 {{GENDER:$2|churkusqa}} $3",
        "rightsnone": "(-)",
        "revdelete-summary": "yuyarinata llamk'apuy",
        "feedback-adding": "Willapuyniykita kay p'anqaman yapay: ...",
index 6a3546f..555e802 100644 (file)
        "passwordreset": "Resetare parolă",
        "passwordreset-text-one": "Completați acest formular pentru a vă reseta parola.",
        "passwordreset-text-many": "{{PLURAL:$1|Completați unul din câmpuri pentru a primi o parolă temporară prin e-mail.}}",
-       "passwordreset-legend": "Resetare parolă",
        "passwordreset-disabled": "Resetarea parolei a fost dezactivată pe acest wiki.",
        "passwordreset-emaildisabled": "Funcțiile de e-mail au fost dezactivate de pe acest wiki.",
        "passwordreset-username": "Nume de utilizator:",
        "resettokens": "Resetare jetoane",
        "resettokens-text": "Puteți reseta, aici, jetoanele care permit accesul la anumite date asociate contului dumneavoastră.\n\nAr trebui să faceți acest lucru numai dacă le-ați partajat accidental cu altcineva ori contul dumneavoastră a fost compromis.",
        "resettokens-no-tokens": "Nu există jetoane de resetat.",
-       "resettokens-legend": "Resetare jetoane",
        "resettokens-tokens": "Jetoane:",
        "resettokens-token-label": "$1 (valoare actuală: $2)",
        "resettokens-watchlist-token": "Jeton pentru fluxul web (Atom/RSS) al [[Special:Watchlist|modificărilor aduse paginilor pe care le urmăriți]]",
        "yourdiff": "Diferențe",
        "copyrightwarning": "Reține că toate contribuțiile la {{SITENAME}} sunt distribuite sub licența $2 (vezi $1 pentru detalii).\nDacă nu doriți ca ceea ce scrieți să fie modificat fără milă și redistribuit în voie, atunci nu trimiteți materialele respective aici.<br />\nDe asemenea, ne asigurați că ceea ce ați scris a fost compoziție proprie sau copie dintr-o resursă publică sau liberă.\n'''Nu introduceți materiale aflate sub incidența drepturilor de autor fără a avea permisiune!'''",
        "copyrightwarning2": "Rețineți că toate contribuțiile la {{SITENAME}} pot fi modificate, alterate sau șterse de alți contribuitori.\nDacă nu doriți ca ceea ce scrieți să fie modificat fără milă și redistribuit în voie, atunci nu trimiteți materialele respective aici.<br />\nDe asemenea, ne asigurați că ceea ce ați scris a fost compoziție proprie sau copie dintr-o resursă publică sau liberă (vedeți $1 pentru detalii).\n'''Nu introduceți materiale aflate sub incidența drepturilor de autor fără a avea permisiune!'''",
+       "editpage-cannot-use-custom-model": "Modelul de conținut al acestei pagini nu poate fi modificat.",
        "longpageerror": "'''Eroare: Textul pe care l-ați trimis are o lungime de {{PLURAL:$1|un kilooctet|$1 kiloocteți|$1 de kiloocteți}}, ceea ce înseamnă mai mult decât maximul de {{PLURAL:$2|un kilooctet|$2 kiloocteți|$2 de kiloocteți}}.'''\nSalvarea nu este posibilă.",
        "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ță:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Obiect vid",
        "content-json-empty-array": "Matrice vidă",
+       "duplicate-args-warning": "<strong>Atenție:</strong> [[:$1]] apelează [[:$2]] cu mai mult de o valoare pentru parametrul „$3”. Se va lua în calcul doar ultima valoare specificată.",
        "duplicate-args-category": "Pagini care folosesc argumente duplicate în apelarea formatelor",
        "duplicate-args-category-desc": "Pagina conține apelări ale formatelor care folosesc argumente duplicate, cum ar fi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> sau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Atenție: Această pagină conține prea multe apelări costisitoare ale funcțiilor parser.\n\nAr trebui să existe mai puțin de $2 {{PLURAL:$2|apelare|apelări}}, acolo există {{PLURAL:$1|$1 apelare|$1 apelări}}.",
        "badsig": "Semnătură brută incorectă; verificați tagurile HTML.",
        "badsiglength": "Semnătura este prea lungă.\nLungimea trebuie să fie mai mică de $1 {{PLURAL:$1|caracter|caractere}}.",
        "yourgender": "Cum preferați să se facă referire la dumneavoastră?",
-       "gender-unknown": "Prefer să nu menționez",
+       "gender-unknown": "Când face referire la dumnevoastră, software-ul va utiliza cuvinte la genul neutru oricând va fi posibil",
        "gender-male": "El modifică pagini wiki",
        "gender-female": "Ea modifică pagini wiki",
        "prefs-help-gender": "Stabilirea acestei preferințe este opțională.\nAcest software folosește datele pentru a vi se adresa și pentru a face referire la dumneavoastră utilizând genul gramatical corespunzător.\nAceastă informație va fi publică.",
        "uploaddisabledtext": "Încărcările de fișiere sunt dezactivate.",
        "php-uploaddisabledtext": "Încărcarea de fișiere este dezactivată în PHP.\nVă rugăm să verificați setările din file_uploads.",
        "uploadscripted": "Fișierul conține HTML sau cod script care poate fi interpretat în mod eronat de un browser.",
-       "upload-scripted-pi-callback": "Nu se poate încărca un fișier care conține instrucțiuni de procesare a foii de stil xml.",
+       "upload-scripted-pi-callback": "Nu se poate încărca un fișier care conține instrucțiuni de procesare a foii de stil XML.",
        "uploaded-script-svg": "S-a găsit elementul „$1” scriptabil în fișierul SVG încărcat.",
        "uploaded-hostile-svg": "S-a descoperit CSS vulnerabil în elementul de stil al fișierului SVG încărcat.",
+       "uploaded-event-handler-on-svg": "Setarea atributelor <code>$1=„$2”</code> de gestionare a evenimentului nu este permisă pentru fișierele SVG.",
+       "uploaded-href-attribute-svg": "Atributele href <code>&lt;$1 $2=„$3”&gt;</code> cu alte destinații decât cele locale (de ex. http://, javascript: etc.) nu sunt permise în fișierele SVG.",
+       "uploaded-href-unsafe-target-svg": "S-a găsit href către o destinație nesigură <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
+       "uploaded-animate-svg": "S-a găsit în fișierul SVG încărcat eticheta „animate” care ar putea modifica valoarea href folosind atributul „from” <code>&lt;$1 $2=„$3”&gt;</code>.",
+       "uploaded-setting-event-handler-svg": "Setarea atributelor de gestionare a evenimentului nu este permisă; s-a găsit <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
+       "uploaded-setting-href-svg": "Este blocată utilizarea etichetei „set” pentru a adăuga atributul „href” în elementul-părinte.",
+       "uploaded-wrong-setting-svg": "Este blocată utilizarea etichetei „set” pentru a adăuga în orice atribute o destinație de tip remote/data/script. S-a găsit <code>&lt;set to=„$1”&gt;</code> în fișierul SVG încărcat.",
+       "uploaded-setting-handler-svg": "Sunt blocate fișierele SVG care setează atributul „handler” cu remote/data/script. S-a găsit <code>$1=„$2”</code> în fișierul SVG încărcat.",
+       "uploaded-remote-url-svg": "Sunt blocate fișierele SVG care setează orice atribut de stil către adrese URL la distanță. S-a găsit <code>$1=„$2”</code> în fișierul SVG încărcat.",
        "uploaded-image-filter-svg": "S-a găsit filtru de imagine cu URL: <code>&lt;$1 $2=\"$3\"&gt;</code> în fișierul SVG încărcat.",
        "uploadscriptednamespace": "Acest fișier SVG conține un spațiu de nume „$1” neautorizat.",
        "uploadinvalidxml": "Nu s-a putut analiza conținutul XML din fișierul încărcat.",
        "randomincategory-nopages": "Nu există pagini în [[:Category:$1]].",
        "randomincategory-category": "Categorie:",
        "randomincategory-legend": "Pagină aleatorie din categoria",
+       "randomincategory-submit": "Du-te",
        "randomredirect": "Redirecționare aleatorie",
        "randomredirect-nopages": "Nu există redirecționări în spațiul de nume \"$1\".",
        "statistics": "Statistici",
        "nmembers": "$1 {{PLURAL:$1|membru|membri|de membri}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membru|membri|de membri}}",
        "nrevisions": "{{PLURAL:$1|o versiune|$1 versiuni|$1 de versiuni}}",
-       "nviews": "{{PLURAL:$1|o accesare|$1 accesări|$1 de accesări}}",
        "nimagelinks": "Utilizat pe $1 {{PLURAL:$1|pagină|pagini}}",
        "ntransclusions": "utilizat pe $1 {{PLURAL:$1|pagină|pagini}}",
        "specialpage-empty": "Această pagină este goală.",
        "rollback-success": "Anularea modificărilor făcute de $1;\nrevenire la ultima versiune de $2.",
        "sessionfailure-title": "Eroare de sesiune",
        "sessionfailure": "Se pare că este o problemă cu sesiunea de autentificare; această acțiune a fost oprită ca o precauție împotriva hijack. Apăsați \"back\" și reîncărcați pagina de unde ați venit, apoi reîncercați.",
+       "changecontentmodel": "Modificare model de conținut al unei pagini",
+       "changecontentmodel-legend": "Modifică modelul de conținut",
+       "changecontentmodel-title-label": "Titlul paginii",
+       "changecontentmodel-model-label": "Model de conținut nou",
+       "changecontentmodel-reason-label": "Motiv:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|a modificat}} modelul de conținut al paginii $3 din „$4” în „$5”",
+       "logentry-contentmodel-change-revertlink": "revenire",
+       "logentry-contentmodel-change-revert": "revenire",
        "protectlogpage": "Jurnal protecții",
        "protectlogtext": "Mai jos se află o listă cu schimbări în ceea ce privește protejarea paginilor.\nConsultați [[Special:ProtectedPages|indexul paginilor protejate]] pentru o listă cu protecțiile în vigoare.",
        "protectedarticle": "a protejat \"[[$1]]\"",
        "tooltip-pt-logout": "Închide sesiunea de lucru",
        "tooltip-pt-createaccount": "Vă încurajăm să vă creați un cont și să vă autentificați; totuși, nu este obligatoriu",
        "tooltip-ca-talk": "Discuții despre această pagină",
-       "tooltip-ca-edit": "Puteți modifica această pagină. Înainte de a o salva vă rugăm s-o previzualizați.",
+       "tooltip-ca-edit": "Modificați această pagină",
        "tooltip-ca-addsection": "Adaugă o nouă secțiune.",
        "tooltip-ca-viewsource": "Această pagină este protejată. Puteți vizualiza doar codul sursă",
        "tooltip-ca-history": "Versiunile anterioare ale paginii și autorii lor.",
        "pageinfo-robot-index": "Permisă",
        "pageinfo-robot-noindex": "Nepermisă",
        "pageinfo-watchers": "Număr de utilizatori care urmăresc pagina",
+       "pageinfo-visiting-watchers": "Numărul de urmăritori ai paginii care au vizualizat modificările recente",
        "pageinfo-few-watchers": "Mai puțin de {{PLURAL:$1|un urmăritor|$1 urmăritori|$1 de urmăritori}}",
+       "pageinfo-few-visiting-watchers": "Ar putea să existe sau nu un urmăritor al paginii care să fi vizualizat modificările recente",
        "pageinfo-redirects-name": "Număr de redirecționări către această pagină",
        "pageinfo-subpages-name": "Subpagini ale acestei pagini",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecționare|redirecționări|de redirecționări}}; $3 {{PLURAL:$3|non-redirecționare|non-redirecționări|de non-redirecționări}})",
        "version-libraries": "Biblioteci instalate",
        "version-libraries-library": "Bibliotecă",
        "version-libraries-version": "Versiune",
+       "version-libraries-license": "Licență",
+       "version-libraries-description": "Descriere",
+       "version-libraries-authors": "Autori",
        "redirect": "Redirecționare după fișier, utilizator, ID-ul paginii sau al versiunii",
        "redirect-legend": "Redirecționare către un fișier sau o pagină",
        "redirect-summary": "Această pagină specială vă redirecționează către un fișier (dat fiind un nume de fișier), o pagină (dat fiind ID-ul unei versiuni sau ID-ul unei pagini) sau o pagină de utilizator (dat fiind un ID numeric al utilizatorului). Utilizare: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] sau [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmeră",
        "special-characters-title-endash": "linie de pauză (en dash)",
        "special-characters-title-emdash": "linie de pauză (em dash)",
-       "special-characters-title-minus": "semnul minus"
+       "special-characters-title-minus": "semnul minus",
+       "mw-widgets-titleinput-description-new-page": "pagina nu există încă",
+       "mw-widgets-titleinput-description-redirect": "redirecționare către $1"
 }
index 87f2044..54c4084 100644 (file)
        "passwordreset": "Azzere 'a passuord",
        "passwordreset-text-one": "Comblete stu module pe azzerà 'a passuord toje.",
        "passwordreset-text-many": "{{PLURAL:$1|Inghie une de le cambe pe azzerà 'a passuord toje.}}",
-       "passwordreset-legend": "Azzere 'a passuord",
        "passwordreset-disabled": "'U reset de le passuord ha state desabbilitate sus a sta uicchi.",
        "passwordreset-emaildisabled": "Le funziune de l'email onne state disabbilitate sus a sta uicchi.",
        "passwordreset-username": "Nome utende:",
        "resettokens": "Azzere le gettone",
        "resettokens-text": "Tu puè azzerà le gettone le quale te donne l'accesse a certe date private collegate cu 'u cunde tune aqquà.\n\nTu avissa farle ce pe sbaglie l'è condivise cu otre o ce 'u cunde tune ha state combromesse.",
        "resettokens-no-tokens": "Non ge stonne gettone de azzerà.",
-       "resettokens-legend": "Azzere le gettone",
        "resettokens-tokens": "Gettone:",
        "resettokens-token-label": "$1 (valore de mò: $2)",
        "resettokens-watchlist-token": "Gettone pu feed web (Atom/RSS) de [[Special:Watchlist|le cangiaminde de le pàggene condrollate]]",
        "creating": "Stoche a ccreje $1",
        "editingsection": "Cangiaminde de $1 (sezione)",
        "editingcomment": "Cangiaminde de $1 (seziona nove)",
-       "editconflict": "Conflitte de cangiaminde: $1",
+       "editconflict": "Le cangiaminde tune non ge ponne essere reggistrate purcé ste 'nu conflitte de cangiaminde. Vuè {{GENDER:|ccu}} resolve stu conflitte a màne?",
        "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",
        "yourdiff": "Differenze",
        "copyrightwarning": "Pe piacere vide ca tutte le condrebbute de {{SITENAME}} sonde considerete de essere rilasciete sotte 'a $2 (vide $1 pe le dettaglie).\nCe tu non ge vuè ca le condrebbute tue avènene ausete da otre o avènene cangete, non le scè mettènne proprie.<br />\nTu na promettere pure ca le cose ca scrive tu, sonde 'mbormaziune libbere o copiete da 'nu pubbleche dominie.<br />\n'''NON METTE' NISCIUNA FATJE CA JE' PROTETTE DA DERITTE SENZA PERMESSE!'''",
        "copyrightwarning2": "Pe piacere vide ca tutte le condrebbute de {{SITENAME}} ponne essere cangete, alterate o luvete da otre condrebbutore.\nCe tu non ge vuè ca quidde ca scrive avène cangete da tre, allore non scè scrivenne proprie aqquà.<br />\nTu ne stè promitte ca quidde ca scrive tu, o lè scritte cu 'u penziere tue o lè cupiate da risorse de pubbliche dominie o sembre robba libbere (vide $1 pe cchiù dettaglie).\n'''NO REGGISTRA' FATIJE CUPERTE DA 'U COPYRIGHT SENZA PERMESSE! NO FA STUDECARIE!'''",
+       "editpage-cannot-use-custom-model": "'U modelle de condenute de sta pàgene non ge pò essere cangiate.",
        "longpageerror": "'''ERRORE: 'U teste ca tu vuè ccu reggistre è luenghe {{PLURAL:$1|'nu kilobyte|$1 kilobyte}}, invece 'u limite massime jè de {{PLURAL:$2|'nu kilobyte|$2 kilobyte}}.'''\nNon ge puè reggistrà sta pàggene.",
        "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:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oggette vacande",
        "content-json-empty-array": "Matrice vacande",
+       "duplicate-args-warning": "<strong>Attenziò:</strong> [[:$1]] ste chiame [[:$2]] cu cchiù de 'nu valore pu parametre \"$3\". Sulamende l'urteme valore date avène ausate.",
        "duplicate-args-category": "Pàggene ca ausane le argumende a doppie jndr'à le chiamate d'u template",
        "duplicate-args-category-desc": "'A pàgene téne chiamate a template ca ausane arguminde a doppie, cumme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Fà attenziò: Sta vosce tène 'nu sbuenne de funziune de chiamate a l'analizzatore.\n\nAvessere a essere mene de $2 {{PLURAL:$2|chiamate|chiamate}}, 'nvece mò {{PLURAL:$1|ste $1 chiamate|ne stonne $1 chiamate}}.",
        "badsig": "'A firme grezze jè sbagliete.\nCondrolle le tag HTML.",
        "badsiglength": "'A firme jè troppe longhe.\nAddà essere assaje assaje sotte a $1 {{PLURAL:$1|carattere|carattere}}.",
        "yourgender": "Sesse:",
-       "gender-unknown": "Non apirte",
+       "gender-unknown": "Quanne parlane de te, 'u software ause 'u genere neutrale cumme parole ce jè possibbile",
        "gender-male": "Maschele",
        "gender-female": "Femmene",
        "prefs-help-gender": "Opzionale: ausate pe l'indirizzamende corrette d'u sesse jndr'à 'u softwer. Sta 'mbormazione jè pubbleche.",
        "uploaddisabledtext": "Le carecaminde de le file sonde disabbilitete.",
        "php-uploaddisabledtext": "Le carecaminde de file sonde disabilitate in PHP.<br />\nPe piacere verifiche le 'mbostaziune d'u ''file_uploads''.",
        "uploadscripted": "Stu file condene HTML o codece de script ca ponne essere inderpretete jndr'à 'nu mode sbagliete da le browser.",
-       "upload-scripted-pi-callback": "Non ge pozze carecà 'nu file ca téne istruziune de processe de xml-stylesheet.",
+       "upload-scripted-pi-callback": "Non ge pozze carecà 'nu file ca téne istruziune de processe de XML-stylesheet.",
        "uploaded-script-svg": "Acchiate elemende pe script \"$1\" jndr'à 'u file SVG carecate.",
        "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.",
        "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",
        "randomincategory-nopages": "Non ge stonne pàggene jndr'à [[:Category:$1]].",
        "randomincategory-category": "Categorije:",
        "randomincategory-legend": "Pàgene a uecchije jndr'à categorije",
+       "randomincategory-submit": "Veje",
        "randomredirect": "Redirezionamende a uecchie",
        "randomredirect-nopages": "Non ge stonne redirezionaminde jndr'à 'u namespace \"$1\".",
        "statistics": "Statisteche",
        "nmembers": "$1 {{PLURAL:$1|membre|membre}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membre}}",
        "nrevisions": "$1 {{PLURAL:$1|revisione|revisiune}}",
-       "nviews": "$1 {{PLURAL:$1|visite|visite}}",
        "nimagelinks": "Ausate sus a $1 {{PLURAL:$1|pàgene|pàggene}}",
        "ntransclusions": "ausate sus a $1 {{PLURAL:$1|pàgene|pàggene}}",
        "specialpage-empty": "Non ge stonne resultete pe stu report.",
        "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.\nPe piacere ause 'u buttone de l'andeprime apprime de salvà.",
+       "tooltip-ca-edit": "Tu puè cangià sta pàgene. Pe piacere ause 'u buttone de l'andeprime apprime de salvà.",
        "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",
        "version-libraries": "Libbrerie installate",
        "version-libraries-library": "Libbrerie",
        "version-libraries-version": "Versione",
+       "version-libraries-license": "Licenze",
+       "version-libraries-description": "Descrizione",
+       "version-libraries-authors": "Auture",
        "redirect": "Redirette da 'u file, utende o ID d'a revisione",
        "redirect-legend": "Redirette a 'nu file o 'na pàgene",
        "redirect-summary": "Sta pàgena speciale redirezione a 'nu file (date 'u nome d'u file), 'na pàgene (date 'n'ID de revisione), o 'na pàgene utende (date 'n'ID numeriche de l'utende). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "trattine en",
        "special-characters-title-emdash": "trattine em",
-       "special-characters-title-minus": "segne mene"
+       "special-characters-title-minus": "segne mene",
+       "mw-widgets-titleinput-description-new-page": "'a pàgene non g'esiste angore",
+       "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1"
 }
index afeccc7..5183fdc 100644 (file)
@@ -81,7 +81,8 @@
                        "DonRumata",
                        "Mariya",
                        "Marina Melik-Adamyan",
-                       "Normalex"
+                       "Normalex",
+                       "WindEwriX"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "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|изменений страниц в вашем списке наблюдения]]",
        "yourdiff": "Различия",
        "copyrightwarning": "Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии $2 (см. $1).\nЕсли вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из\nисточника, допускающего свободное распространение и изменение своего содержимого.<br />\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!'''",
        "copyrightwarning2": "Пожалуйста, учтите, что любой ваш вклад в проект «{{SITENAME}}» может быть отредактирован или удалён другими участниками.\nЕсли вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. $1).\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''",
+       "editpage-cannot-use-custom-model": "Модель содержимого этой страницы не может быть изменена.",
        "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайта|килобайт}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайта|килобайт}}. Страница не может быть сохранена.'''",
        "readonlywarning": "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''\nВозможно, вам следует скопировать этот текст в текстовый файл, чтобы сохранить его на будущее.\n\nАдминистратор, заблокировавший базу данных, оставил следующее объяснение: $1",
        "protectedpagewarning": "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''\nНиже для справки приведена последняя запись журнала:",
        "badsig": "Неверная подпись. Проверьте корректность HTML-тегов.",
        "badsiglength": "Слишком длинная подпись.\nПодпись не должна превышать $1 {{PLURAL:$1|символа|символа|символов}}.",
        "yourgender": "Какое описание вам более подходит?",
-       "gender-unknown": "Я Ð¿Ñ\80едпоÑ\87иÑ\82аÑ\8e Ð½Ðµ Ñ\83казÑ\8bваÑ\82Ñ\8c",
+       "gender-unknown": "Ð\9fÑ\80и Ñ\83поминании Ð²Ð°Ñ\81 Ð¿Ñ\80огÑ\80аммное Ð¾Ð±ÐµÑ\81пеÑ\87ение, ÐºÐ¾Ð³Ð´Ð° Ñ\8dÑ\82о Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ð±Ñ\83деÑ\82 Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð³ÐµÐ½Ð´ÐµÑ\80но-нейÑ\82Ñ\80алÑ\8cнÑ\8bе Ñ\81лова",
        "gender-male": "Он редактирует страницы вики",
        "gender-female": "Онa редактирует страницы вики",
        "prefs-help-gender": "Этот параметр задавать необязательно.\nДвижок использует это значение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
        "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": "Запрос не дал результатов.",
        "cachedspecial-viewing-cached-ts": "Вы просматриваете кэшированную версию этой страницы, которая может серьёзно отличаться от текущей версии.",
        "cachedspecial-refresh-now": "Просмотреть последнюю версию.",
        "categories": "Категории",
-       "categoriespagetext": "{{PLURAL:$1|1=Следующая категория содержит|Следующие категории содержат}} страницы или медиа-файлы.\nЗдесь не показаны [[Special:UnusedCategories|неиспользуемые категории]].\nСм. также [[Special:WantedCategories|список требуемых категорий]].",
+       "categoriespagetext": "{{PLURAL:$1|1=Следующая категория содержит|Следующие категории содержат}} страницы или медиафайлы.\nЗдесь не показаны [[Special:UnusedCategories|неиспользуемые категории]].\nСм. также [[Special:WantedCategories|список требуемых категорий]].",
        "categoriesfrom": "Показать категории, начинающиеся с:",
        "special-categories-sort-count": "упорядочить по количеству",
        "special-categories-sort-abc": "упорядочить по алфавиту",
        "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-title-cantexist": "Невозможно иметь страницу в $1.",
+       "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]]»",
        "tooltip-pt-logout": "Завершить сеанс работы",
        "tooltip-pt-createaccount": "Мы предлагаем вам создать учётную запись и войти в систему, хотя это и не обязательно.",
        "tooltip-ca-talk": "Обсуждение основной страницы",
-       "tooltip-ca-edit": "Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83. Ð\9fеÑ\80ед Ñ\82ем, ÐºÐ°Ðº Ð·Ð°Ð¿Ð¸Ñ\81аÑ\82Ñ\8c Ñ\81вои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f, Ð²Ð¾Ñ\81полÑ\8cзÑ\83йÑ\82еÑ\81Ñ\8c, Ð¿Ð¾Ð¶Ð°Ð»Ñ\83йÑ\81Ñ\82а, ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ Ð¿Ñ\80едваÑ\80иÑ\82елÑ\8cного Ð¿Ñ\80оÑ\81моÑ\82Ñ\80а.",
+       "tooltip-ca-edit": "РедакÑ\82иÑ\80оваÑ\82Ñ\8c Ð´Ð°Ð½Ð½Ñ\83Ñ\8e Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
        "tooltip-ca-addsection": "Создать новый раздел",
        "tooltip-ca-viewsource": "Эта страница защищена от изменений, но вы можете посмотреть и скопировать её исходный текст",
        "tooltip-ca-history": "Журнал изменений страницы",
        "tooltip-t-permalink": "Постоянная ссылка на эту версию страницы",
        "tooltip-ca-nstab-main": "Просмотр основной страницы",
        "tooltip-ca-nstab-user": "Персональная страница участника",
-       "tooltip-ca-nstab-media": "Медиа-файл",
+       "tooltip-ca-nstab-media": "Медиафайл",
        "tooltip-ca-nstab-special": "Это служебная страница, она недоступна для редактирования",
        "tooltip-ca-nstab-project": "Страница проекта",
        "tooltip-ca-nstab-image": "Страница файла",
        "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": "Подстраницы данной страницы",
        "exif-ycbcrpositioning-1": "Центрированный",
        "exif-ycbcrpositioning-2": "CO-sited",
        "exif-dc-contributor": "Соавторы",
-       "exif-dc-coverage": "Пространственные или временные рамки медиа",
+       "exif-dc-coverage": "Пространственные или временные рамки медиафайлов",
        "exif-dc-date": "Дата(ы)",
        "exif-dc-publisher": "Издатель",
        "exif-dc-relation": "Связанные медиа",
        "exif-dc-rights": "Права",
-       "exif-dc-source": "Исходное медиа",
-       "exif-dc-type": "Тип медиа",
+       "exif-dc-source": "Исходный медиафайл",
+       "exif-dc-type": "Тип медиафайла",
        "exif-rating-rejected": "Отклонено",
        "exif-isospeedratings-overflow": "Более 65535",
        "exif-iimcategory-ace": "Искусство, культура и развлечения",
        "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/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
        "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 0455ebd..fa51788 100644 (file)
        "delete-hook-aborted": "hook द्वारा अपाकरणक्रिया मध्ये एव स्थगिता । स्थगनस्य कारणं न दत्तम् ।",
        "no-null-revision": "\"$1\" एतस्मै पृष्ठाय नवीनं रिक्तं संस्करणं रचितुं न शक्यते",
        "badtitle": "अशुद्धं शिरोनाम",
-       "badtitletext": "à¤\88पà¥\8dसितं शीर्षकम् अमान्यं, रिक्तम्, अयोग्यम्, अन्यभाषीयं, भाषान्तरात् विकि-जालस्थलात् च अस्ति । पृष्ठशीर्षकाय अयोग्यानि अक्षराणि चिह्नानि वा तस्मिन् भवेयुः ।",
-       "title-invalid-empty": "à¤\88पà¥\8dसितं पृष्ठं रिक्तम् अस्ति उत नामाकाश एव अस्ति ।",
+       "badtitletext": "à¤\88षà¥\8dà¤\9fं शीर्षकम् अमान्यं, रिक्तम्, अयोग्यम्, अन्यभाषीयं, भाषान्तरात् विकि-जालस्थलात् च अस्ति । पृष्ठशीर्षकाय अयोग्यानि अक्षराणि चिह्नानि वा तस्मिन् भवेयुः ।",
+       "title-invalid-empty": "à¤\88षà¥\8dà¤\9fं पृष्ठं रिक्तम् अस्ति उत नामाकाश एव अस्ति ।",
        "title-invalid-utf8": "ईप्सिते पृष्ठे केलवं UTF-8 इत्यस्य अमान्यः अनुक्रमः अस्ति ।",
        "title-invalid-interwiki": "ईप्सिते लेखे आन्तरिकविकिपरिसन्धिः अस्ति, यस्याः शीर्षकत्वेन उपयोगः न शक्यते ।",
-       "title-invalid-talk-namespace": "à¤\88पà¥\8dसितं पृष्ठं सम्भाषणपृष्ठेन सह परिसन्धितम् अस्ति, यत् न विद्यते ।",
+       "title-invalid-talk-namespace": "à¤\88षà¥\8dà¤\9fं पृष्ठं सम्भाषणपृष्ठेन सह परिसन्धितम् अस्ति, यत् न विद्यते ।",
        "title-invalid-characters": "ईप्सिते पृष्ठे \"$1\" इत्येतानि अमान्यानि अक्षराणि सन्ति ।",
        "title-invalid-relative": "शीर्षकम् एकः सन्दर्भितः मार्गः स्थापयति । सन्दर्भितपृष्ठस्य शीर्षके (./, ../) अवैधं भवति । यतो हि यदा उपयोगकर्ता गवेषणे तेषां प्रयोगं करोति, तदा तेषाम् अधिकांशरूपम् अप्राप्यं भवति ।",
        "title-invalid-magic-tilde": "(<nowiki>~~~</nowiki>) इत्येतानि अमान्यानि टिल्ड्-अक्षाराणि ईप्सिते पृष्ठे सन्ति ।",
        "userlogin-resetlink": "स्वस्य प्रवेशविवरणानि विस्मृतानि किम् ?",
        "userlogin-resetpassword-link": "स्वस्य कूटशब्दः विस्मृतः किम् ?",
        "userlogin-helplink2": "प्रवेशविषयकं साहाय्यम्",
-       "userlogin-loggedin": "भवाता/भवतà¥\8dया à¤ªà¥\82रà¥\8dवसà¥\8dमादेव {{GENDER:$1|$1}} योजकत्वेन प्रवेशः प्राप्तः अस्ति । भिन्नयोजकत्वेन प्रवेष्टुं निम्नप्रपत्रं पूरयतु ।",
+       "userlogin-loggedin": "भवाता/भवतà¥\8dया à¤ªà¥\82रà¥\8dवमेव {{GENDER:$1|$1}} योजकत्वेन प्रवेशः प्राप्तः अस्ति । भिन्नयोजकत्वेन प्रवेष्टुं निम्नप्रपत्रं पूरयतु ।",
        "userlogin-createanother": "अन्यसदस्यता प्राप्यताम्",
        "createacct-emailrequired": "वि-पत्रसङ्केतः",
        "createacct-emailoptional": "वि-पत्रसङ्केतः (ऐच्छिकः)",
        "createacct-benefit-body2": "{{PLURAL:$1|पृष्ठम्|पृष्ठानि}}",
        "createacct-benefit-body3": "नवीन{{PLURAL:$1|योजकः|योजकाः}}",
        "badretype": "भवता/भवत्या लिखितौ कूटशब्दौ समानौ न स्तः ।",
-       "userexists": "भवता/भवतà¥\8dया à¤\88पà¥\8dसितà¤\82 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤ªà¥\82रà¥\8dवसà¥\8dमादेव विद्यते । \nकृपया अपरं प्रयोक्तृनाम चिनोतु ।",
+       "userexists": "भवता/भवतà¥\8dया à¤\88षà¥\8dà¤\9fà¤\82 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\83नाम à¤ªà¥\82रà¥\8dवमेव विद्यते । \nकृपया अपरं प्रयोक्तृनाम चिनोतु ।",
        "loginerror": "प्रवेशे दोषः",
        "createacct-error": "सदस्यताप्राप्तिकाले दोषः",
        "createaccounterror": "$1 सदस्यता न प्राप्ता :",
        "login-migrated-generic": "भवतः/भवत्याः सदस्यत्वं स्थानान्तरितं, येन भवतः/भवत्याः प्रयोक्तृनाम एतस्मिन् विकि-प्रकल्पे न विद्यते ।",
        "loginlanguagelabel": "भाषा : $1",
        "suspicious-userlogout": "भवतः/भवत्याः \"निर्गम्यताम्\" इत्यस्य विज्ञप्तिं स्वीकर्तुं न शक्यते । यतः भवता/भवत्या एषा विज्ञप्तिं तृटियुक्तगवेक्षणात् प्रतिनिधि(proxy)-तः वा कृता ।",
-       "createacct-another-realname-tip": "वासà¥\8dतविà¤\95नाम à¤\90à¤\9aà¥\8dà¤\9bिà¤\95मà¥\8d à¤\85सà¥\8dति à¥¤ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\8fनà¤\82 à¤µà¤¿à¤\95लà¥\8dपà¤\82 à¤¸à¤®à¤°à¥\8dथयति à¤\9aà¥\87तà¥\8d, à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¯à¥\8bà¤\97दानशà¥\8dरà¥\87यसà¥\8dय उल्लेखसमये अस्य उपयोगः भविष्यति ।",
+       "createacct-another-realname-tip": "वासà¥\8dतविà¤\95नाम à¤\90à¤\9aà¥\8dà¤\9bिà¤\95मà¥\8d à¤\85सà¥\8dति à¥¤ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\8fनà¤\82 à¤µà¤¿à¤\95लà¥\8dपà¤\82 à¤¸à¤®à¤°à¥\8dथयति à¤\9aà¥\87तà¥\8d, à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¯à¥\8bà¤\97दानशà¥\8dरà¥\87यसà¤\83 उल्लेखसमये अस्य उपयोगः भविष्यति ।",
        "pt-login": "प्रविश्यताम्",
        "pt-login-button": "प्रविश्यताम्",
        "pt-createaccount": "सदस्यता प्राप्यताम्",
        "postedit-confirmation-created": "नूतनपृष्ठस्य रचना अभवत् ।",
        "postedit-confirmation-restored": "एतत् पृष्ठं पुनः सङ्गृहीतम् ।",
        "postedit-confirmation-saved": "सम्पादनं रक्षितम् ।",
-       "edit-already-exists": "नà¥\82तनपà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¿à¤°à¥\8dमाणà¤\82 à¤¨à¤¾à¤­à¥\82तà¥\8d à¥¤\nपà¥\82रà¥\8dवसà¥\8dमादेव एतत् पृष्ठं विद्यते ।",
+       "edit-already-exists": "नà¥\82तनपà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¿à¤°à¥\8dमाणà¤\82 à¤¨à¤¾à¤­à¥\82तà¥\8d à¥¤\nपà¥\82रà¥\8dवमेव एतत् पृष्ठं विद्यते ।",
        "defaultmessagetext": "मूलसन्देशः",
        "content-failed-to-parse": "$1 कृते $2 इत्यस्य विभाजनं विफलम् अभवत् । दोषः : $3",
        "invalid-content-data": "अयोग्यः लेखः",
        "rev-deleted-user": "(प्रयोक्तृनाम अपाकृतमस्ति)",
        "rev-deleted-event": "(संरक्षिताऽऽवल्यः(log) अपाकृताः)",
        "rev-deleted-user-contribs": "[प्रयोक्तृनाम अन्तर्जालसंविद् वा अपाकृतम् - योगदानाऽऽवल्याम् एतानि परिवर्तनानि निगूहितानि सन्ति ।]",
-       "rev-deleted-text-permission": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤µà¤¿à¤µà¤°à¤£à¤®à¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-deleted-text-permission": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤µà¤¿à¤µà¤°à¤£à¤®à¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "rev-suppressed-text-permission": "एतस्य पृष्ठस्य संस्कृतम् <strong>अपाकृतम्</strong> । तस्य विस्तृतं विवकणं [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} गूहितऽऽवल्याः] प्राप्यते ।",
-       "rev-deleted-text-unhide": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
-       "rev-suppressed-text-unhide": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
-       "rev-deleted-text-view": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-       "rev-suppressed-text-view": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-       "rev-deleted-no-diff": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-deleted-text-unhide": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
+       "rev-suppressed-text-unhide": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
+       "rev-deleted-text-view": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-text-view": "à¤\8fतसà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-deleted-no-diff": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>à¤\85पाà¤\95à¥\83तमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "rev-suppressed-no-diff": "भवान्/भवती संस्करणस्य भेदं द्रष्टुं न शक्नोति । कारणम् एतस्य किमपि संस्करणं <strong>अपाकृतमस्ति</strong> ।",
        "rev-deleted-unhide-diff": "भवान्/भवती संस्करणस्य भेदं द्रष्टुं न शक्नोति । कारणम् एतस्य किमपि संस्करणं <strong>अपाकृतमस्ति</strong> ।\n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
-       "rev-suppressed-unhide-diff": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
-       "rev-deleted-diff-view": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-       "rev-suppressed-diff-view": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dनà¥\8bति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-unhide-diff": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
+       "rev-deleted-diff-view": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+       "rev-suppressed-diff-view": "भवानà¥\8d/भवतà¥\80 à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤­à¥\87दà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤¨ à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤\95ारणमà¥\8d à¤\8fतसà¥\8dय à¤\95िमपि à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 <strong>निषिदà¥\8dधमसà¥\8dति</strong> à¥¤\nविसà¥\8dतà¥\83तà¤\82 à¤\9cà¥\8dà¤\9eानमà¥\8d à¤\85तà¥\8dर à¤ªà¥\8dरापà¥\8dसà¥\8dयति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "rev-delundel": "दृश्यताम्/गोप्यताम्",
        "rev-showdeleted": "दर्श्यताम्",
        "revisiondelete": "संस्करणानि निष्कासयतु/पुनस्स्थापयतु",
        "revdelete-show-no-access": "$2 दिनाङ्कस्य $1 समयस्य वस्तुनि दोषः दृष्टः । तत् वस्तु निषिद्धावल्याम् अस्ति । भवान्/भवती तत् परिवर्तितुं न शक्नोति ।",
        "revdelete-modify-no-access": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तितवस्तुनि दोषः दृष्टः । तत् वस्तु निषिद्धावल्याम् अस्ति । भवान्/भवती तत् परिवर्तितुं न शक्नोति ।",
        "revdelete-modify-missing": "ID $1 इत्यस्य परिवर्तने दोषः : एतत् दत्तांशे न प्राप्तम् !",
-       "revdelete-no-change": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना :''' $2, $1 à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤¯à¤¾à¤\9aितवसà¥\8dतà¥\82नि à¤ªà¥\82रà¥\8dवसà¥\8dमादेव विद्यन्ते ।",
+       "revdelete-no-change": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना :''' $2, $1 à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤¯à¤¾à¤\9aितवसà¥\8dतà¥\82नि à¤ªà¥\82रà¥\8dवमेव विद्यन्ते ।",
        "revdelete-concurrent-change": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तनेषु दोषः दृष्टः । अस्य पृष्ठस्य यदा भवान्/भवती सम्पादनं करोति स्म, तदा अन्य कोऽपि अत्र परिवर्तनम् अकरोत् । अतः परिवर्तनस्य इतिहासे अन्यस्य नाम दृश्यते । \nकृपया स्वस्य संरक्षिताऽऽवलिं पश्यतु ।",
        "revdelete-only-restricted": "$2 दिनाङ्कस्य $1 समयस्य निगूढनकार्ये दोषः दृष्टः । भावान्/भवती दृश्यता-विकल्पे परिवर्तनं अकृत्वा प्रबन्धकेभ्यः एतत् परिवर्तनं निगूहितुं न शक्नोति ।",
        "revdelete-reason-dropdown": "* अपाकरणस्य सामान्यकारणानि\n** प्रतिकृत्यधिकारस्य उल्लङ्घनम्\n** अयोग्या टिप्पणी वैयक्तिकसूचनाधारः वा\n** अयोग्यं योजकनाम\n** हानिकारकसूचनाधारः",
        "prefs-watchlist": "निरीक्षासूचिः",
        "prefs-editwatchlist": "निरीक्षासूचिः सम्पाद्यताम्",
        "prefs-editwatchlist-label": "स्वस्य निरीक्षासूचौ प्रविष्टयः सम्पाद्यन्ताम् :",
-       "prefs-editwatchlist-edit": "सà¥\8dवसà¥\8dय à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवसà¥\8dयाà¤\82 à¤ªà¥\8dरविषà¥\8dà¤\9fयà¤\83 à¤¦à¥\83ष्यन्ताम्, अपाक्रियन्तां च",
+       "prefs-editwatchlist-edit": "सà¥\8dवसà¥\8dय à¤\85वà¥\87à¤\95à¥\8dषणाऽऽवसà¥\8dयाà¤\82 à¤ªà¥\8dरविषà¥\8dà¤\9fयà¤\83 à¤¦à¥\83à¤्यन्ताम्, अपाक्रियन्तां च",
        "prefs-editwatchlist-raw": "अपक्वावेक्षणाऽऽवलिः सम्पाद्यताम्",
        "prefs-editwatchlist-clear": "स्वस्य निरीक्षासूचिः रिक्तीक्रियताम्",
        "prefs-watchlist-days": "निरीक्षासूचौ दर्शनियानि दिनानि :",
        "recentchangesdays-max": "$1 अधिकतम{{PLURAL:$1|दिनं|दिनानि}}",
        "recentchangescount": "फलकेषु सामान्यतया यानि परिवर्तनानि अभवन्, तेषां सङ्ख्या :",
        "prefs-help-recentchangescount": "अत्र नूतनपरिवर्तनानि, पृष्ठेतिहासः, संरक्षिताऽऽवल्यश्च अन्तर्भवन्ति ।",
-       "prefs-help-watchlist-token2": "भवतà¤\83/भवतà¥\8dयाà¤\83 à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aà¥\87à¤\83 à¤\9cालà¤\95रसà¥\8dय (web feed) à¤\97à¥\81पà¥\8dतà¤\95à¥\81à¤\9eà¥\8dà¤\9aिà¤\95ा à¤\85सà¥\8dतà¥\8dयà¥\87षा à¥¤ \nà¤\8fषा à¤\95à¥\81à¤\9eà¥\8dà¤\9aिà¤\95ा à¤¯à¤¸à¥\8dय à¤ªà¤¾à¤°à¥\8dशà¥\8dवà¥\87 à¤­à¤µà¤¿à¤·à¥\8dयति, à¤¸à¤\83 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¥\8dरभविषà¥\8dयति à¥¤ à¤\85तà¤\83 à¤\8fनाà¤\82 गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
+       "prefs-help-watchlist-token2": "भवतà¤\83/भवतà¥\8dयाà¤\83 à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aà¥\87à¤\83 à¤\9cालà¤\95रसà¥\8dय (web feed) à¤\97à¥\81पà¥\8dतà¤\95à¥\81à¤\9eà¥\8dà¤\9aिà¤\95ा à¤\85सà¥\8dतà¥\8dयà¥\87षा à¥¤ \nà¤\8fषा à¤\95à¥\81à¤\9eà¥\8dà¤\9aिà¤\95ा à¤¯à¤¸à¥\8dय à¤ªà¤¾à¤°à¥\8dशà¥\8dवà¥\87 à¤­à¤µà¤¿à¤·à¥\8dयति, à¤¸à¤\83 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\82 à¤¦à¥\8dरषà¥\8dà¤\9fà¥\81à¤\82 à¤ªà¥\8dरभविषà¥\8dयति à¥¤ à¤\85तà¤\83 à¤\8fषा गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
        "savedprefs": "भवतः/भवत्याः इष्टतमानि रक्षितानि ।",
        "timezonelegend": "समयवलयः (time zone) :",
        "localtime": "स्थानीयसमयः :",
        "yourrealname": "वास्तविकनाम :",
        "yourlanguage": "भाषा :",
        "yourvariant": "भाषायाः सामग्रीवैविध्यम् :",
-       "prefs-help-variant": "एतस्य विकि-जालस्य पृष्ठगतविषयेषु भवता/भवत्या इष्टः प्रकारः वर्णविन्यासो वा प्रदर्शितुम् ।",
+       "prefs-help-variant": "à¤\8fतसà¥\8dय à¤µà¤¿à¤\95ि-à¤\9cालसà¥\8dय à¤ªà¥\83षà¥\8dठà¤\97तविषयà¥\87षà¥\81 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤\87षà¥\8dà¤\9fà¤\83 à¤ªà¥\8dरà¤\95ारà¤\83 à¤µà¤°à¥\8dणविनà¥\8dयासà¥\8b à¤µà¤¾ à¤ªà¥\8dरदरà¥\8dशयितà¥\81मà¥\8d à¥¤",
        "yournick": "नूतनहस्ताक्षरम् :",
        "prefs-help-signature": "सम्भाषणपृष्ठेषु टिप्पणीं लिखित्वा अन्ते \"<nowiki>~~~~</nowiki>\" लिखतु । अनेन स्वस्य हस्ताक्षरेण सह टिप्पणीलेखनकालस्यापि उल्लेखः भविष्यति ।",
        "badsig": "प्रारूपरहितं (raw) अयोग्यं हस्ताक्षरम् ।\nHTML चिह्नानि पश्यतु ।",
        "prefs-help-email-others": "योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन, वि-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।\nसम्पर्केऽस्मिन् भवतः/भवत्याः वि-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवन्ति ।",
        "prefs-help-email-required": "वि-पत्रसङ्केतः अनिवार्यः ।",
        "prefs-info": "मूलसूचना",
-       "prefs-i18n": "अन्ताराष्ट्रिकरणम्",
+       "prefs-i18n": "à¤\85नà¥\8dताराषà¥\8dà¤\9fà¥\8dरियà¤\95रणमà¥\8d",
        "prefs-signature": "हस्ताक्षरम्",
        "prefs-dateformat": "दिनाङ्कस्य प्रारूपः",
        "prefs-timeoffset": "समयान्तरम्",
        "prefs-tokenwatchlist": "स्तोकम् (token)",
        "prefs-diffs": "अन्तरम्",
        "prefs-help-prefershttps": "आगामिप्रेवेशकाले एतत् परिवर्तनं सक्रियं भवष्यति ।",
-       "prefswarning-warning": "सà¥\8dवसà¥\8dय à¤\87षà¥\8dà¤\9fतमानि-पà¥\81षà¥\8dठà¥\87 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤¯à¤¤à¥\8d, à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¤\82 à¤\95à¥\83तà¤\82, à¤¤à¤¤à¥\8d à¤\8fतावता à¤¨ à¤°à¤\95à¥\8dषितमà¥\8d à¥¤\n\"$1\" à¤\8fततà¥\8d à¤\85नà¥\81दितà¥\8dवा यदि भवान्/भवती एतत् पृष्ठं त्यक्ष्यति, तर्हि परिवर्तनं रक्षितं न भविष्यति ।",
-       "prefs-tabs-navigation-hint": "परामरà¥\8dशà¤\83 : à¤ªà¥\8dलवनयà¥\8bà¤\83 (tabs) à¤®à¤§à¥\8dयà¥\87 à¤\97मनाà¤\97मनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤µà¤¾à¤®à¤¤à¥\80रà¤\95à¥\81डà¥\8dमलसà¥\8dय, à¤¦à¤\95à¥\8dषिणतà¥\80रà¤\95à¥\81ण्मलस्य च उपयोगं कर्तुं शक्नोति ।",
+       "prefswarning-warning": "सà¥\8dवसà¥\8dय à¤\87षà¥\8dà¤\9fतमानि-पà¥\81षà¥\8dठà¥\87 à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤¯à¤¤à¥\8d, à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\82 à¤\95à¥\83तà¤\82, à¤¤à¤¤à¥\8d à¤\8fतावता à¤¨ à¤°à¤\95à¥\8dषितमà¥\8d à¥¤\n\"$1\" à¤\8fततà¥\8d à¤\85नà¥\82दà¥\8dय यदि भवान्/भवती एतत् पृष्ठं त्यक्ष्यति, तर्हि परिवर्तनं रक्षितं न भविष्यति ।",
+       "prefs-tabs-navigation-hint": "परामरà¥\8dशà¤\83 : à¤ªà¥\8dलवनयà¥\8bà¤\83 (tabs) à¤®à¤§à¥\8dयà¥\87 à¤\97मनाà¤\97मनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤µà¤¾à¤®à¤¤à¥\80रà¤\95à¥\81डà¥\8dमलसà¥\8dय, à¤¦à¤\95à¥\8dषिणतà¥\80रà¤\95à¥\81ड्मलस्य च उपयोगं कर्तुं शक्नोति ।",
        "email-address-validity-valid": "वि-पत्रसङ्केतः मान्यः अस्ति इति प्रतीयते",
        "email-address-validity-invalid": "मान्यः वि-पत्रसङ्केतः लिख्यताम्",
        "userrights": "योजकाधिकारस्य प्रबन्धनम्",
        "userrights-nologin": "योजकेभ्यः अधिकारं दातुं प्रबन्धकत्वेन प्रवेशः आवश्यकः । [[Special:UserLogin|प्रविश्यताम्]]",
        "userrights-notallowed": "योजकेभ्यः अधिकारं दातुं, योजकान् अपाकर्तुं च ते अनुमतिः नास्ति ।",
        "userrights-changeable-col": "परिवर्तनार्हाः समूहाः",
-       "userrights-unchangeable-col": "परिवरà¥\8dतनम् अनर्हाः समूहाः",
-       "userrights-conflict": "सदस्याधिकारस्य परिवर्तनेषु अन्तर्विरोधः अस्ति ! कृपया स्वकृतानि परिवर्तनानि पुनरवलोक्य संरक्ष्यताम् ।",
+       "userrights-unchangeable-col": "परिवरà¥\8dतयितà¥\81म् अनर्हाः समूहाः",
+       "userrights-conflict": "सदसà¥\8dयाधिà¤\95ारसà¥\8dय à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\87षà¥\81 à¤\85नà¥\8dतरà¥\8dविरà¥\8bधà¤\83 à¤\85सà¥\8dति ! à¤\95à¥\83पया à¤¸à¥\8dवà¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤ªà¥\81नरवलà¥\8bà¤\95à¥\8dय à¤¸à¤\82रà¤\95à¥\8dषà¥\8dयनà¥\8dतामà¥\8d à¥¤",
        "userrights-removed-self": "भवता/भवत्या सफलतया स्वाधिकाराः अपाकृताः । अतः भवान्/भवती एतत् पृष्ठं द्रष्टुं न प्रभवति ।",
        "group": "समूहः :",
        "group-user": "योजकाः",
        "grouppage-suppress": "{{ns:project}}:अलक्ष्यम्",
        "right-read": "पृष्ठानि पठ्यन्ताम्",
        "right-edit": "पृष्ठानि सम्पाद्यन्ताम्",
-       "right-createpage": "पà¥\83षà¥\8dठानि à¤¨à¤¿à¤°à¥\8dमियन्ताम् ।(येषां सम्भाषणपृष्ठं न स्यात् ।)",
-       "right-createtalk": "समà¥\8dभाषणपà¥\83षà¥\8dठानि à¤¨à¤¿à¤°à¥\8dमियन्ताम्",
+       "right-createpage": "पà¥\83षà¥\8dठानि à¤¨à¤¿à¤°à¥\8dमà¥\80यन्ताम् ।(येषां सम्भाषणपृष्ठं न स्यात् ।)",
+       "right-createtalk": "समà¥\8dभाषणपà¥\83षà¥\8dठानि à¤¨à¤¿à¤°à¥\8dमà¥\80यन्ताम्",
        "right-createaccount": "नूतनप्रयोक्तृवृत्तान्तं रच्यन्ताम्",
        "right-minoredit": "लघुसम्पादनत्वेन अङ्कितं करोतु",
        "right-move": "शीर्षकाणि परिवर्त्यन्ताम्",
        "right-move-subpages": "उपपृष्ठैः सह पृष्ठं चालयतु",
-       "right-move-rootuserpages": "मà¥\82लयà¥\8bà¤\9cà¤\95पà¥\81ष्ठानि चाल्यन्ताम्",
+       "right-move-rootuserpages": "मà¥\82लयà¥\8bà¤\9cà¤\95पà¥\83ष्ठानि चाल्यन्ताम्",
        "right-move-categorypages": "वर्गपृष्ठानि चाल्यन्ताम्",
        "right-movefile": "सञ्चिकाः चाल्यन्ताम्",
        "right-suppressredirect": "पृष्ठं यदा चालयति, तदा मूलपृष्ठात् प्रतिप्रेषणं मास्तु ।",
        "right-autoconfirmed": "सार्वसङ्केत(IP)आधारितेन मूल्यनियन्त्रणेन सह अस्य सम्बन्धः नास्ति",
        "right-bot": "स्वसञ्चालितप्रणालित्वेन एतां स्वीक्रियताम्",
        "right-nominornewtalk": "सम्भाषणपृष्ठस्य लघुपरिवर्तनानां विषये मा सूच्यताम्",
-       "right-apihighlimits": "विदत्तसम्पर्कानुरूपविधेः (API) प्रश्नेषु उन्नतसीमाः उपयुज्यताम्",
+       "right-apihighlimits": "विदतà¥\8dतसमà¥\8dपरà¥\8dà¤\95ानà¥\81रà¥\82पविधà¥\87à¤\83 (API) à¤ªà¥\8dरशà¥\8dनà¥\87षà¥\81 à¤\89नà¥\8dनतसà¥\80माà¤\83 à¤\89पयà¥\81à¤\9cà¥\8dयनà¥\8dतामà¥\8d",
        "right-writeapi": "योग्यस्य विदत्तसम्पर्कानुरूपविधेः (API) उपयोगं करोतु",
        "right-delete": "पृष्ठानि अपाक्रियन्ताम्",
-       "right-bigdelete": "दीर्घेतिहासयुक्तपृष्ठानि अपाक्रियताम्",
+       "right-bigdelete": "दà¥\80रà¥\8dà¤\98à¥\87तिहासयà¥\81à¤\95à¥\8dतपà¥\83षà¥\8dठानि à¤\85पाà¤\95à¥\8dरियनà¥\8dतामà¥\8d",
        "right-deletelogentry": "योग्यसंरक्षिताऽऽवल्याः प्रविष्टयः (entries) अपाक्रियन्ताम्, पुनः स्थाप्यन्तां च",
        "right-deleterevision": "योग्यपृष्ठस्य संस्करणानि अपाक्रियन्ताम्",
        "right-deletedhistory": "अपाकृत-प्रविष्टीनाम् (Entry) इतिहासं पश्यतु (तत्सम्बद्धपाठं विना)",
        "right-deletedtext": "अपाकृतपाठस्य, अपाकृतसंस्करणस्य च परिवर्तनानि च पश्यतु",
        "right-browsearchive": "अपाकृतपृष्ठानि अन्विष्यन्ताम्",
        "right-undelete": "इदं पृष्ठं न अपाक्रियताम्",
-       "right-suppressrevision": "प्रबन्धकैः निगूहितानि, सम्मुखं स्थापितानि च विशिष्टसंस्करणानि पुनः पश्यतु, पुनस्थापयतु च",
-       "right-viewsuppressed": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤\97à¥\82हितà¤\82 à¤¸à¤\82सà¥\8dà¤\95à¥\83रणà¤\82 à¤¦à¥\83ष्यताम्",
+       "right-suppressrevision": "पà¥\8dरबनà¥\8dधà¤\95à¥\88à¤\83 à¤¨à¤¿à¤\97à¥\82हितानि, à¤¸à¤®à¥\8dमà¥\81à¤\96à¤\82 à¤¸à¥\8dथापितानि à¤\9a à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9fसà¤\82सà¥\8dà¤\95रणानि à¤ªà¥\81नà¤\83 à¤ªà¤¶à¥\8dयतà¥\81, à¤ªà¥\81नसà¥\8dसà¥\8dथापयतà¥\81 à¤\9a",
+       "right-viewsuppressed": "à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\88à¤\83 à¤\97à¥\82हितà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 à¤¦à¥\83श्यताम्",
        "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यन्ताम्",
        "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यन्ताम्",
-       "right-blockemail": "वि-पतà¥\8dरपà¥\8dरà¥\87षयितà¥\81मà¥\8d à¤\8fनà¤\82 à¤¯à¥\8bà¤\9cà¤\95मà¥\8d à¤\85वरà¥\81दà¥\8dधà¥\8dयनà¥\8dताम्",
+       "right-blockemail": "वि-पतà¥\8dरपà¥\8dरà¥\87षयितà¥\81मà¥\8d à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤\85वरà¥\81धà¥\8dयताम्",
        "right-hideuser": "प्रयोक्तृनाम अवरुध्यताम्, तत् अन्ययोजकेभ्यः गोप्यतां च",
-       "right-ipblock-exempt": "स्वयम् अवरोधितं, समूहावरोधिम् अन्तर्जालसङ्केतम् (IP) अवगण्य अग्रे गच्छतु",
+       "right-ipblock-exempt": "सà¥\8dवयमà¥\8d à¤\85वरà¥\8bधितà¤\82, à¤¸à¤®à¥\82हावरà¥\8bधितमà¥\8d à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\99à¥\8dà¤\95à¥\87तमà¥\8d (IP) à¤\85वà¤\97णà¥\8dय à¤\85à¤\97à¥\8dरà¥\87 à¤\97à¤\9aà¥\8dà¤\9bतà¥\81",
        "right-proxyunbannable": "प्रतिनिधीनां (of prxies) स्वयम्-अवरोधान् अवगण्य अग्रे गच्छतु",
-       "right-unblockself": "सà¥\8dवमà¥\8d à¤\85नवरुध्यताम्",
-       "right-protect": "सुरक्षास्तरं परिवर्त्यतां, क्रमबद्धानि सुरक्षितपृष्ठानि सम्पाद्यतां च",
+       "right-unblockself": "सà¥\8dवà¤\82 à¤®à¤¾ à¤\85वरुध्यताम्",
+       "right-protect": "सà¥\81रà¤\95à¥\8dषासà¥\8dतरà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतà¥\8dयताà¤\82, à¤\95à¥\8dरमबदà¥\8dधानि à¤¸à¥\81रà¤\95à¥\8dषितपà¥\83षà¥\8dठानि à¤¸à¤®à¥\8dपादà¥\8dयनà¥\8dताà¤\82 à¤\9a",
        "right-editprotected": "\"{{int:protect-level-sysop}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
        "right-editcontentmodel": "एकस्य पृष्ठस्य विषयोदाहरणं सम्पाद्यताम्",
        "right-edituserjs": "अन्यस्य योजकस्य JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
        "right-editmyusercss": "स्वस्य CSS सञ्चिकाः सम्पाद्यन्ताम्",
        "right-editmyuserjs": "स्वस्य JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
-       "right-viewmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¦à¥\83ष्यताम्",
-       "right-editmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयतामà¥\8d à¥¤ à¤\85तà¥\8dर à¤§à¥\8dयातवà¥\8dयà¤\82 à¤¯à¤¤à¥\8d, à¤µà¤¿à¤¨à¤¾ à¤\85धिà¤\95ारà¥\87ण à¤\85तà¥\8dर à¤\85नà¥\8dयपà¥\81ष्ठानि योजयितुम् अवसरः अस्ति ।",
-       "right-viewmyprivateinfo": "सà¥\8dवसà¥\8dय à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसूचनाः दृश्यन्ताम् (उदा. वि-पत्रसन्देशः, वास्तविकनाम)",
-       "right-editmyprivateinfo": "सà¥\8dवसà¥\8dय à¤µà¥\8dयà¤\95à¥\8dतिà¤\97तसूचनाः सम्पाद्यन्ताम् (उदा. वि-पत्रसन्देशः, वास्तविकनाम)",
+       "right-viewmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¦à¥\83à¤्यताम्",
+       "right-editmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयतामà¥\8d à¥¤ à¤\85तà¥\8dर à¤§à¥\8dयातवà¥\8dयà¤\82 à¤¯à¤¤à¥\8d, à¤µà¤¿à¤¨à¤¾ à¤\85धिà¤\95ारà¥\87ण à¤\85तà¥\8dर à¤\85नà¥\8dयपà¥\83ष्ठानि योजयितुम् अवसरः अस्ति ।",
+       "right-viewmyprivateinfo": "सà¥\8dवसà¥\8dय à¤µà¥\88यà¤\95à¥\8dतिà¤\95सूचनाः दृश्यन्ताम् (उदा. वि-पत्रसन्देशः, वास्तविकनाम)",
+       "right-editmyprivateinfo": "सà¥\8dवसà¥\8dय à¤µà¥\88यà¤\95à¥\8dतिà¤\95सूचनाः सम्पाद्यन्ताम् (उदा. वि-पत्रसन्देशः, वास्तविकनाम)",
        "right-editmyoptions": "स्वस्य इष्टतमानि सम्पाद्यन्ताम्",
        "right-rollback": "कस्मिंश्चित् पृष्ठे येन अन्तिमयोजकेन परिवर्तनं कृतं, तत् परिवर्तनं शीर्घ्रं पूर्ववत् करोतु",
        "right-markbotedits": "पूर्ववत् यानि सम्पादनानि कृतानि, तानि बॉट्-सम्पादनत्वेन अङ्कितं करोतु",
        "right-autopatrol": "स्वस्य सम्पादनानि निरीक्षितत्वेन अङ्क्यन्ताम्",
        "right-patrolmarks": "नूतनपरिवर्तनेषु निरीक्षित-अङ्कनं दृश्यताम्",
        "right-unwatchedpages": "अदृष्टपृष्टानाम् आवलिः दृश्यताम्",
-       "right-mergehistory": "पà¥\83षà¥\8dठानामà¥\8d à¤\87तिहासमà¥\8d विलीयताम्",
+       "right-mergehistory": "पà¥\83षà¥\8dठानामà¥\8d à¤\87तिहासà¤\83 विलीयताम्",
        "right-userrights": "सर्वयोजकाधिकारः सम्पाद्यताम्",
        "right-userrights-interwiki": "अन्यविकि-जालस्थानानां योजकाधिकारः सम्पाद्यताम्",
        "right-siteadmin": "दत्तांशनिधिं किलतु, अकिलितं च करोतु",
        "right-override-export-depth": "यानि पुष्ठानि पञ्चस्तरपर्यन्तं संलग्नानि सन्ति, तेषां सर्वेषां निर्यातं करोतु ।",
        "right-sendemail": "अन्ययोजकेभ्यः वि-पत्रं प्रेषयतु",
        "right-passwordreset": "निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।",
-       "right-managechangetags": "दतà¥\8dताà¤\82शातà¥\8d [[Special:Tags|à¤\9aिहà¥\8dनानि]] à¤¨à¤¿à¤°à¥\8dमियन्ताम्, अपाक्रियन्तां च",
+       "right-managechangetags": "दतà¥\8dताà¤\82शातà¥\8d [[Special:Tags|à¤\9aिहà¥\8dनानि]] à¤¨à¤¿à¤°à¥\8dमà¥\80यन्ताम्, अपाक्रियन्तां च",
        "right-applychangetags": "[[Special:Tags|चिह्नानि]] एकस्य परिवर्तनेन सह प्रयुञ्जताम् ।",
        "right-changetags": "स्वतन्त्रसंस्करणे, प्रवेशावल्यां च [[Special:Tags|चिह्नानि]] ऐच्छितरीत्या स्थापयतु, निष्कासयतु च",
        "newuserlogpage": "प्रयोक्तृ-सृजन-सूचिका",
        "action-userrights-interwiki": "योजकाधिकारान् अन्यविकिषु सम्पादयतु ।",
        "action-siteadmin": "पाठमूलस्य निशेधनम् अनिशेधनं च ।",
        "action-sendemail": "वि-पत्राणि प्रेषयतु ।",
-       "action-editmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¦à¥\83ष्यताम्",
-       "action-viewmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¦à¥\83ष्यताम्",
+       "action-editmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¦à¥\83à¤्यताम्",
+       "action-viewmywatchlist": "सà¥\8dवसà¥\8dय à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषासà¥\82à¤\9aिà¤\83 à¤¦à¥\83à¤्यताम्",
        "action-viewmyprivateinfo": "स्वस्य व्यक्तिगसूचना दृश्यताम्",
        "action-editmyprivateinfo": "स्वस्य व्यक्तिगतसूचना सम्पाद्यताम्",
        "action-editcontentmodel": "पृष्ठस्य विषयवस्तोः प्रारूपं सम्पाद्यताम्",
        "rc_categories": "वर्गान् नियतीकरोतु ।",
        "rc_categories_any": "कश्चित्",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} परिवर्तनपश्चात् ।",
-       "newsectionsummary": "/* $1 */ नवीन विभागः",
+       "newsectionsummary": "/* $1 */ नवीनविभागः",
        "rc-enhanced-expand": "विवरणानि दृश्यन्ताम्",
        "rc-enhanced-hide": "विवरणानि गोप्यन्ताम्",
        "rc-old-title": "मूलरूपेण $1 इति रचितम् ।",
        "unusedtemplates": "अनुपयुक्ताः प्राकृतयः ।",
        "unusedtemplatestext": "अस्मिन् पुटे {{ns:template}} नामस्थानयुतानि सर्वपुटानि अन्तर्गतानि । यानि अन्यपुटेषु न सन्ति । \nअस्य अपमर्जनात् पूर्वं सञ्चिकायाः अन्यानुबन्धान् परिशीलयतु ।",
        "unusedtemplateswlh": "अन्यानुबन्धाः ।",
-       "randompage": "‎अशृङ्खलं (random) पृष्ठं",
+       "randompage": "यादृच्छिकं (random) पृष्ठं",
        "randompage-nopages": "अधोनिदेशितनामस्थाने पुटानि न सन्ति । {{PLURAL:$2| एतन्नमस्थाने}} नास्ति : $1।",
        "randomincategory": "वर्गे यादृच्छिकं पृष्ठम्",
        "randomincategory-invalidcategory": "\"$1\" इत्येत् अमान्यं वर्गनाम अस्ति ।",
        "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": "अस्य वृत्तस्य परिणामः नास्ति ।",
        "unusedimages": "अनुपयुक्तानि पुटाणी ।",
        "wantedcategories": "आवश्यकाः वर्गाः ।",
        "wantedpages": "आवश्यकपुटानि ।",
-       "wantedpages-summary": "यैः पृष्ठैः सह मुख्यतयापरिसन्धितानि पृष्ठानि सन्ति, तादृशानाम् अविद्यमानानां पृष्ठानाम् आवलिः । अत्र पुनर्निर्दिष्टपृष्ठां परिसन्धयः न सन्ति । पुनर्निर्दिष्टपृष्ठानाम्  अविद्यानानां पृष्ठानाम् आवल्यै अत्र दृश्यताम्,  [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "यैः पृष्ठैः सह मुख्यतया परिसन्धितानि पृष्ठानि सन्ति, तादृशानाम् अविद्यमानानां पृष्ठानाम् आवलिः । अत्र पुनर्निर्दिष्टपृष्ठानां परिसन्धयः न सन्ति । पुनर्निर्दिष्टपृष्ठानाम् अविद्यमानानां पृष्ठानाम् आवल्यै अत्र दृश्यताम्, [[{{#special:BrokenRedirects}}|भङ्गसम्बन्धैः युक्तानि पुनर्निर्दिष्टानि पृष्ठानि]] ।",
        "wantedpages-badtitle": "$1 परिणामनिरूपणे अमान्यशीर्षकम् ।",
        "wantedfiles": "आवश्यकाः सञ्चिकाः ।",
        "wantedfiletext-cat": "अधो दत्तसञ्चिकाः उपयुक्ताः किन्तु न वर्तन्ते । बाह्यकोशानां सञ्चिकाः उपस्थिताः इति एताः सूच्यां स्युः । एतादृशः कोपि सदोषप्रवेशः<del> अवरुद्धः</del> भवति । अपि च यत्पुटं तादृश्याः अनुपस्थितसञ्चिकायाः प्रयोगं कुर्वन्ति तासं सूची  [[:$1]] मध्ये अस्ति ।",
        "protectedpages-summary": "एतत् पृष्ठं सद्यः संरक्षितानि सन्ति । निर्माणात् संरक्षितानां पृष्ठानाम् आवल्यै [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] अत्र दृश्यताम् ।",
        "protectedpages-cascade": "प्रपातसंरक्षणं केवलम् ।",
        "protectedpages-noredirect": "पुनर्निदेशान् गोपयतु",
-       "protectedpagesempty": "à¤\85नà¥\87न à¤µà¤¿à¤¸à¥\8dतारà¥\87ण à¤¨ à¤\95िमपि à¤ªà¥\81à¤\9fं सद्यः न सुरक्षितम् ।",
+       "protectedpagesempty": "à¤\85नà¥\87न à¤µà¤¿à¤¸à¥\8dतारà¥\87ण à¤¨ à¤\95िमपि à¤ªà¥\83षà¥\8dठं सद्यः न सुरक्षितम् ।",
        "protectedpages-timestamp": "समयमुद्रा",
        "protectedpages-page": "पृष्ठम्",
        "protectedpages-expiry": "अवसानम्",
        "allpagesbadtitle": "दत्तपुटशीर्षकम् अमान्यम् अथवा आन्तर्भाषिकम्, आन्तर्विकीयं वा अस्ति । \nअस्मिन् एकं नैकं वा अक्षराणि सन्ति येषां प्रयोगं शीर्षकेषु कर्तुम् अशक्यम् ।",
        "allpages-bad-ns": "{{SITENAME}} इत्यस्मिन् \"$1\" नामस्थानं नास्ति ।",
        "allpages-hide-redirects": "पुनर्निदेशान् गोपयतु ।",
-       "cachedspecial-viewing-cached-ttl": " भवान् अस्यपुटास्य निगूढावृत्तिं पश्यन् अस्ति । यत् $1 कालिकम्  अस्ति ।",
+       "cachedspecial-viewing-cached-ttl": "भवान्/भवती एतस्य पृष्ठस्य उपस्मृतौ (cache) सङ्ग्रहितं संस्करणं पश्यति, यत् $1 यावत् पुरातनं भवितुम् अर्हति ।",
        "cachedspecial-viewing-cached-ts": "भवान् निगूढावृत्तेः पुटम् अवलोकयन् अस्ति । यत् परिपूर्णतया वास्तवं न ।",
        "cachedspecial-refresh-now": "जघन्यम् अवलोकयतु ।",
        "categories": "वर्गाः",
        "mailnologin": "सम्प्रेषणस्य सङ्केतः नास्ति ।",
        "mailnologintext": "अस्य योजकेभ्यः विद्युन्मानपत्रप्रेषणार्थम् [[Special:UserLogin|नामाभिलेखनम्]] आवश्यकम् [[Special:Preferences|आद्यता]]यां प्रेषयितुं विद्युन्मानपत्रसङ्केतः आवश्यकः ।",
        "emailuser": "एतस्मै योजकाय वि-पत्रं प्रेष्यताम्",
-       "emailuser-title-target": "ईपत्र प्रेष्यताम् {{GENDER:$1|योजकः}}",
+       "emailuser-title-target": "{{GENDER:$1|एतस्मै सदस्याय}} वि-पत्रं प्रैष्यताम्",
        "emailuser-title-notarget": "ईपत्र योजकः",
        "emailpage": "वि-पत्रोपयोक्ता",
        "emailpagetext": "{{GENDER:$1|अस्मै}} योजकाय विद्युन्मानपत्रं प्रेषयितुम् अधो दत्तप्रपत्रम् उपयोक्तुं शक्नोति । \n[[Special:Preferences|your user preferences]] अत्र भवता विनिवेशितः वि-पत्रसङ्केतः सकाशात् इति स्थाने प्रतिभाति । अनेन स्वीकर्ता साक्षात् प्रत्युत्तरं दातुं प्रभविष्यति ।",
        "undeletepage": "अपमर्जितपुटानि दृष्ट्वा पुनस्थापयतु ।",
        "undeletepagetitle": "'''अधः [[:$1|$1]] इत्येतेषाम् अपनीतावृत्तीनां दर्शनं भवति ।",
        "viewdeletedpage": "अपमर्जितपुटानि अवलोकयतु ।",
-       "undeletepagetext": "{{PLURAL:$1|$1पुटं|$1 पुटानि}} इत्येतानि अपनीतानि किन्तु  एतानि लेखागारे सन्ति अपि च पुनस्थापितानि कर्तुं शक्यते ।",
+       "undeletepagetext": "{{PLURAL:$1|$1 पृष्ठं|$1 पृष्ठानि}} इत्येतानि अपनीतानि किन्तु एतानि लेखागारे सन्ति अपि च पुनस्थापितानि कर्तुं शक्यते ।",
        "undelete-fieldset-title": "संस्करणं पुनस्थाप्यताम्",
        "undeleteextrahelp": "पुटानाम् इतिहासं प्रत्याहर्तुं चिह्नितमञ्जूषाः अवचिताः कृत्वा '''''{{int:undeletebtn}}''''' इत्येतत् तुदतु ।  \nविचितेतिहासं प्रत्याहर्तुं तद्वृत्तीनां पार्श्वगतचिह्नमञ्जूषासु चयनचिह्नानि विनिवेशयतु । पश्चात्'''''{{int:undeletebtn}}''''' एतत् तुदतु  ।",
        "undeleterevisions": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
        "undeleterevdel": "यदि पुनस्थापनस्य फलस्वरूपशीर्षकपुटं, सञ्चिकां, पुनरावृत्तिं वा आंशिकरूपेण नाशयति चेत् एतत् न क्रियते ।\nएतादस्थितौ नूतनापनीताः पुनरावृत्तीनाम् अपचयनं असङ्गोपनं वा कुर्याट् ।",
        "undeletehistorynoadmin": "एतत्पुटम् अपमर्जितम् ।\nअधः अपमर्जनस्य कारणं दर्शितम् । अपमर्जनात् पूर्वं ये योजकाः सम्पादनं कृतवन्तः तेषां विषयः अपि दर्शिताः । \nअपमर्जितपुनरावृत्तीनां वास्तवपाठः केवलं प्रशासकै दृष्टुं शक्यते ।",
        "undelete-revision": "$3 द्वारा $1 ($4 दिनाङ्के $5 वादने) इत्येतेतस्य पृष्ठस्य अपाकृतं संस्करणम् ।",
-       "undeleterevision-missing": "à¤\85मानà¥\8dयमà¥\8d à¤\85थवा à¤µà¤¿à¤²à¥\81पà¥\8dतà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d à¥¤ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 \nà¤\95दाà¤\9aितà¥\8d à¤\85यà¥\8bà¤\97à¥\8dयपरिसनà¥\8dधà¥\87à¤\83 à¤\89पयà¥\8bà¤\97à¤\82 à¤\95रà¥\8bति, à¤\85थवा à¤¤à¥\81 à¤\8fततà¥\8d à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 à¤ªà¥\82रà¥\8dवसà¥\8dमादेव पुनर्स्थापितम् अस्ति । लेखागारात् निष्कासितं स्याद्वा ।",
+       "undeleterevision-missing": "à¤\85मानà¥\8dयमà¥\8d à¤\85थवा à¤µà¤¿à¤²à¥\81पà¥\8dतà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d à¥¤ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 \nà¤\95दाà¤\9aितà¥\8d à¤\85यà¥\8bà¤\97à¥\8dयपरिसनà¥\8dधà¥\87à¤\83 à¤\89पयà¥\8bà¤\97à¤\82 à¤\95रà¥\8bति, à¤\85थवा à¤¤à¥\81 à¤\8fततà¥\8d à¤¸à¤\82सà¥\8dà¤\95रणà¤\82 à¤ªà¥\82रà¥\8dवमेव पुनर्स्थापितम् अस्ति । लेखागारात् निष्कासितं स्याद्वा ।",
        "undelete-nodiff": "पूर्वतनसंस्करणं न प्राप्तम् ।",
        "undeletebtn": "पुनस्स्थाप्यताम्",
        "undeletelink": "दृश्यताम्/प्रत्यानयताम्",
        "sp-contributions-suppresslog": "अपमर्जितानि योजकयोगदानानि",
        "sp-contributions-deleted": "योजकस्य अपाकृतं योगदानम्",
        "sp-contributions-uploads": "उपारोहणानि",
-       "sp-contributions-logs": "संरक्षितावल्यः (Logs)",
+       "sp-contributions-logs": "सà¤\82रà¤\95à¥\8dषिताऽऽवलà¥\8dयà¤\83 (Logs)",
        "sp-contributions-talk": "सम्भाषणम्",
        "sp-contributions-userrights": "योजकाधिकारस्य व्यवस्थापनम् ।",
        "sp-contributions-blocked-notice": "अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।\nनूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:",
        "whatlinkshere-page": "पृष्ठम्:",
        "linkshere": "'''[[:$1]]''' इत्यनेन सह अधो लिखितानां पृष्ठानां परिसन्धिं करोतु:",
        "nolinkshere": "'''[[:$1]]''' इत्यनेन सह न किमपि पृष्ठं परिसन्धितम्",
-       "nolinkshere-ns": "à¤\9aितनामसà¥\8dथानातà¥\8d  '''[[:$1]]''' à¤\87तà¥\8dयà¥\87नà¤\82 à¤¯à¥\8bà¤\9cनयà¥\8bà¤\97à¥\8dयà¤\82 à¤ªà¥\81à¤\9fं नास्ति  ।",
+       "nolinkshere-ns": "à¤\9aितनामसà¥\8dथानातà¥\8d  '''[[:$1]]''' à¤\87तà¥\8dयà¥\87नà¤\82 à¤¯à¥\8bà¤\9cनयà¥\8bà¤\97à¥\8dयà¤\82 à¤ªà¥\83षà¥\8dठं नास्ति  ।",
        "isredirect": "अनुप्रेषण-पृष्ठम्",
        "istemplate": "अन्यलेखभागः (transclusion)",
        "isimage": "सञ्चिकासम्बन्धः",
        "lockedbyandtime": "(द्वारा {{GENDER:$1|$1}} इत्यस्मिन् $2 अत्र $3)",
        "move-page": " $1 चालयतु ।",
        "move-page-legend": "पृष्ठं रक्ष्यताम्",
-       "movepagetext": "निमà¥\8dनपतà¥\8dरà¤\82 à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤® à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयिषà¥\8dयति à¥¤ à¤¤à¤¸à¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤®à¥\8dपà¥\82रà¥\8dणà¥\87तिहासà¥\8bऽपि à¤¨à¥\82तननामà¥\8dना à¤¦à¤°à¥\8dशिषà¥\8dयति à¥¤\nपà¥\81रातनà¤\82 à¤¶à¥\80रà¥\8dषà¤\95à¤\82 à¤¨à¥\82तनशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87िषà¥\8dà¤\9fà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤\nमà¥\82लशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤¨à¥\87तà¥\84नà¥\8d à¤ªà¥\81नारà¥\8dनिरà¥\8dदà¥\87शानà¥\8d à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¸à¥\8dवà¤\9aालितरà¥\82पà¥\87ण à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81मà¥\8d à¤\85पि à¤¶à¤\95à¥\8dनà¥\8bति à¥¤\nयदि à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\8fवà¤\82 à¤¨ à¤\95रà¥\8bति, à¤¤à¤°à¥\8dहि à¤\95à¥\83पया [[Special:DoubleRedirects|पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शसà¥\8dय à¤¦à¥\8dवितà¥\8dवमà¥\8d]] à¤\89त [[Special:BrokenRedirects|à¤\96णà¥\8dडितपà¥\81नरà¥\8dनिरà¥\8dदà¥\87शà¤\83]] à¤\87तà¥\8dयनयà¥\8bà¤\83 à¤ªà¤°à¥\80à¤\95à¥\8dषणà¤\82 à¤¨à¤¿à¤¶à¥\8dà¤\9aयà¥\87न à¤\95रà¥\8bतà¥\81 à¥¤\nपरिसनà¥\8dधयà¤\83 à¤¯à¥\8bà¤\97à¥\8dयसà¥\8dथानà¤\82 à¤ªà¥\8dरति à¤\97à¤\9aà¥\8dà¤\9bà¥\87तà¥\8d à¤\87ति à¤¸à¥\81निशà¥\8dà¤\9aितà¤\95रणà¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¦à¤¾à¤¯à¤¿à¤¤à¥\8dवमà¥\8d à¤\85सà¥\8dति à¥¤\n\nयदि à¤¨à¤µà¥\80नशà¥\80रà¥\8dषà¤\95सà¥\8dय à¤¨à¤¾à¤®à¥\8dना à¤²à¥\87à¤\96à¤\83 à¤ªà¥\82रà¥\8dवसà¥\8dमादेव विद्यते, तर्हि पुनर्निर्देशः <strong> न </strong> भविष्यति । परन्तु नवीनशीर्षकस्य नाम्ना लेखः नास्ति उत कुत्रापि अनुप्रेषितं नास्ति चेदेव स्थानान्तरणस्य प्रक्रिया भविष्यति ।\n\nअर्थात् त्रुट्या स्थानान्तरणस्य प्रक्रिया अभवत् चेत्, पुरातनपृष्ठे स्थानान्तरणं कर्तुं प्रभविष्यति । तथा च विद्यामाने पृष्ठे सति भवान्/भवती स्थानान्तरणं कर्तुं न प्रभवति ।\n\n<strong>पूर्वसूचना !</strong>\n\nयदि पृष्ठम् अतिलोकप्रियम् अस्ति, तर्हि बृहत् आकस्मिकं परिवर्तनं भवितुं शक्नोति, अतः स्थानान्तरणात् प्राक् अन्तिमपरिणामस्य विषये पूर्वानुमानं करोतु ।",
-       "movepagetext-noredirectfixer": "निमà¥\8dनपतà¥\8dरà¤\82 à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤® à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयिषà¥\8dयति à¥¤ à¤¤à¤¸à¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤®à¥\8dपà¥\82रà¥\8dणà¥\87तिहासà¥\8bऽपि à¤¨à¥\82तननामà¥\8dना à¤¦à¤°à¥\8dशिषà¥\8dयति à¥¤\nपà¥\81रातनà¤\82 à¤¶à¥\80रà¥\8dषà¤\95à¤\82 à¤¨à¥\82तनशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87िषà¥\8dà¤\9fà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤ à¤®à¥\82लशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤¨à¥\87तà¥\84नà¥\8d à¤ªà¥\81नारà¥\8dनिरà¥\8dदà¥\87शानà¥\8d à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¸à¥\8dवà¤\9aालितरà¥\82पà¥\87ण à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81मà¥\8d à¤\85पि à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\8fवà¤\82 à¤¨ à¤\95रà¥\8bति, à¤¤à¤°à¥\8dहि à¤\95à¥\83पया à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शसà¥\8dय [[Special:DoubleRedirects|दà¥\8dवितà¥\8dवमà¥\8d]] à¤\89त [[Special:BrokenRedirects|à¤\96णà¥\8dडितपà¥\81नरà¥\8dनिरà¥\8dदà¥\87शà¤\83]] à¤\87तà¥\8dयनयà¥\8bà¤\83 à¤ªà¤°à¥\80à¤\95à¥\8dषणà¤\82 à¤¨à¤¿à¤¶à¥\8dà¤\9aयà¥\87न à¤\95रà¥\8bतà¥\81 à¥¤ \n\nपरिसनà¥\8dधयà¤\83 à¤¯à¥\8bà¤\97à¥\8dयसà¥\8dथानà¤\82 à¤ªà¥\8dरति à¤\97à¤\9aà¥\8dà¤\9bà¥\87तà¥\8d à¤\87ति à¤¸à¥\81निशà¥\8dà¤\9aितà¤\95रणà¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¦à¤¾à¤¯à¤¿à¤¤à¥\8dवमà¥\8d à¤\85सà¥\8dति à¥¤\nयदि à¤¨à¤µà¥\80नशà¥\80रà¥\8dषà¤\95सà¥\8dय à¤¨à¤¾à¤®à¥\8dना à¤²à¥\87à¤\96à¤\83 à¤ªà¥\82रà¥\8dवसà¥\8dमादेव विद्यते, तर्हि पुनर्निर्देशः न भविष्यति । परन्तु नवीनशीर्षकस्य नाम्ना लेखः नास्ति उत कुत्रापि अनुप्रेषितं नास्ति चेदेव स्थानान्तरणस्य प्रक्रिया भविष्यति ।\n\nअर्थात् त्रुट्या स्थानान्तरणस्य प्रक्रिया अभवत् चेत्, पुरातनपृष्ठे स्थानान्तरणं कर्तुं प्रभविष्यति । तथा च विद्यामाने पृष्ठे सति भवान्/भवती स्थानान्तरणं कर्तुं <strong>न</strong> प्रभवति ।\n\n<strong>पूर्वसूचना !</strong>\nयदि पृष्ठम् अतिलोकप्रियम् अस्ति, तर्हि बृहत् आकस्मिकं परिवर्तनं भवितुं शक्नोति, अतः स्थानान्तरणात् प्राक् अन्तिमपरिणामस्य विषये पूर्वानुमानं करोतु ।\"",
-       "movepagetalktext": "समà¥\8dबदà¥\8dधसमà¥\8dभाषणपà¥\81à¤\9fानि à¤\85नà¥\87न à¤¸à¤¹ à¤¸à¥\8dथानानà¥\8dतरितानि à¤­à¤µà¤¨à¥\8dति à¤\85नà¥\8dयथा  \n* à¤­à¤µà¤¾à¤¨à¥\8d à¤ªà¥\81à¤\9fà¤\82 अन्यस्थानान्तरं कुर्वन् अस्ति । \n* अस्मिन् नाम्नि सम्भाषणपुटं पूर्वनिर्मितमस्ति अस्थवा  \n* अधोदत्ताम् अर्गलनमञ्चूषाम् उत्पाटितवान् । \nअस्मिन् विषये यदि इच्छति तर्हि भवता पुटानि चालनीयानि अथवा संयोजनीयानि ।",
+       "movepagetext": "निमà¥\8dनपतà¥\8dरà¤\82 à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤® à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयिषà¥\8dयति à¥¤ à¤¤à¤¸à¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤®à¥\8dपà¥\82रà¥\8dणà¥\87तिहासà¥\8bऽपि à¤¨à¥\82तननामà¥\8dना à¤¦à¤°à¥\8dशिषà¥\8dयति à¥¤\nपà¥\81रातनà¤\82 à¤¶à¥\80रà¥\8dषà¤\95à¤\82 à¤¨à¥\82तनशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87िषà¥\8dà¤\9fà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤\nमà¥\82लशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤¨à¥\87तà¥\84नà¥\8d à¤ªà¥\81नारà¥\8dनिरà¥\8dदà¥\87शानà¥\8d à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¸à¥\8dवà¤\9aालितरà¥\82पà¥\87ण à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81मà¥\8d à¤\85पि à¤¶à¤\95à¥\8dनà¥\8bति à¥¤\nयदि à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\8fवà¤\82 à¤¨ à¤\95रà¥\8bति, à¤¤à¤°à¥\8dहि à¤\95à¥\83पया [[Special:DoubleRedirects|पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शसà¥\8dय à¤¦à¥\8dवितà¥\8dवमà¥\8d]] à¤\89त [[Special:BrokenRedirects|à¤\96णà¥\8dडितपà¥\81नरà¥\8dनिरà¥\8dदà¥\87शà¤\83]] à¤\87तà¥\8dयनयà¥\8bà¤\83 à¤ªà¤°à¥\80à¤\95à¥\8dषणà¤\82 à¤¨à¤¿à¤¶à¥\8dà¤\9aयà¥\87न à¤\95रà¥\8bतà¥\81 à¥¤\nपरिसनà¥\8dधयà¤\83 à¤¯à¥\8bà¤\97à¥\8dयसà¥\8dथानà¤\82 à¤ªà¥\8dरति à¤\97à¤\9aà¥\8dà¤\9bà¥\87तà¥\8d à¤\87ति à¤¸à¥\81निशà¥\8dà¤\9aितà¤\95रणà¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¦à¤¾à¤¯à¤¿à¤¤à¥\8dवमà¥\8d à¤\85सà¥\8dति à¥¤\n\nयदि à¤¨à¤µà¥\80नशà¥\80रà¥\8dषà¤\95सà¥\8dय à¤¨à¤¾à¤®à¥\8dना à¤²à¥\87à¤\96à¤\83 à¤ªà¥\82रà¥\8dवमेव विद्यते, तर्हि पुनर्निर्देशः <strong> न </strong> भविष्यति । परन्तु नवीनशीर्षकस्य नाम्ना लेखः नास्ति उत कुत्रापि अनुप्रेषितं नास्ति चेदेव स्थानान्तरणस्य प्रक्रिया भविष्यति ।\n\nअर्थात् त्रुट्या स्थानान्तरणस्य प्रक्रिया अभवत् चेत्, पुरातनपृष्ठे स्थानान्तरणं कर्तुं प्रभविष्यति । तथा च विद्यामाने पृष्ठे सति भवान्/भवती स्थानान्तरणं कर्तुं न प्रभवति ।\n\n<strong>पूर्वसूचना !</strong>\n\nयदि पृष्ठम् अतिलोकप्रियम् अस्ति, तर्हि बृहत् आकस्मिकं परिवर्तनं भवितुं शक्नोति, अतः स्थानान्तरणात् प्राक् अन्तिमपरिणामस्य विषये पूर्वानुमानं करोतु ।",
+       "movepagetext-noredirectfixer": "निमà¥\8dनपतà¥\8dरà¤\82 à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤® à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयिषà¥\8dयति à¥¤ à¤¤à¤¸à¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤®à¥\8dपà¥\82रà¥\8dणà¥\87तिहासà¥\8bऽपि à¤¨à¥\82तननामà¥\8dना à¤¦à¤°à¥\8dशिषà¥\8dयति à¥¤\nपà¥\81रातनà¤\82 à¤¶à¥\80रà¥\8dषà¤\95à¤\82 à¤¨à¥\82तनशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87िषà¥\8dà¤\9fà¤\82 à¤­à¤µà¤¿à¤·à¥\8dयति à¥¤ à¤®à¥\82लशà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¥\8dरति à¤¨à¥\87तà¥\84नà¥\8d à¤ªà¥\81नारà¥\8dनिरà¥\8dदà¥\87शानà¥\8d à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤¸à¥\8dवà¤\9aालितरà¥\82पà¥\87ण à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81मà¥\8d à¤\85पि à¤¶à¤\95à¥\8dनà¥\8bति à¥¤ à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\8fवà¤\82 à¤¨ à¤\95रà¥\8bति, à¤¤à¤°à¥\8dहि à¤\95à¥\83पया à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शसà¥\8dय [[Special:DoubleRedirects|दà¥\8dवितà¥\8dवमà¥\8d]] à¤\89त [[Special:BrokenRedirects|à¤\96णà¥\8dडितपà¥\81नरà¥\8dनिरà¥\8dदà¥\87शà¤\83]] à¤\87तà¥\8dयनयà¥\8bà¤\83 à¤ªà¤°à¥\80à¤\95à¥\8dषणà¤\82 à¤¨à¤¿à¤¶à¥\8dà¤\9aयà¥\87न à¤\95रà¥\8bतà¥\81 à¥¤ \n\nपरिसनà¥\8dधयà¤\83 à¤¯à¥\8bà¤\97à¥\8dयसà¥\8dथानà¤\82 à¤ªà¥\8dरति à¤\97à¤\9aà¥\8dà¤\9bà¥\87तà¥\8d à¤\87ति à¤¸à¥\81निशà¥\8dà¤\9aितà¤\95रणà¤\82 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¦à¤¾à¤¯à¤¿à¤¤à¥\8dवमà¥\8d à¤\85सà¥\8dति à¥¤\nयदि à¤¨à¤µà¥\80नशà¥\80रà¥\8dषà¤\95सà¥\8dय à¤¨à¤¾à¤®à¥\8dना à¤²à¥\87à¤\96à¤\83 à¤ªà¥\82रà¥\8dवमेव विद्यते, तर्हि पुनर्निर्देशः न भविष्यति । परन्तु नवीनशीर्षकस्य नाम्ना लेखः नास्ति उत कुत्रापि अनुप्रेषितं नास्ति चेदेव स्थानान्तरणस्य प्रक्रिया भविष्यति ।\n\nअर्थात् त्रुट्या स्थानान्तरणस्य प्रक्रिया अभवत् चेत्, पुरातनपृष्ठे स्थानान्तरणं कर्तुं प्रभविष्यति । तथा च विद्यामाने पृष्ठे सति भवान्/भवती स्थानान्तरणं कर्तुं <strong>न</strong> प्रभवति ।\n\n<strong>पूर्वसूचना !</strong>\nयदि पृष्ठम् अतिलोकप्रियम् अस्ति, तर्हि बृहत् आकस्मिकं परिवर्तनं भवितुं शक्नोति, अतः स्थानान्तरणात् प्राक् अन्तिमपरिणामस्य विषये पूर्वानुमानं करोतु ।\"",
+       "movepagetalktext": "समà¥\8dबदà¥\8dधसमà¥\8dभाषणपà¥\81à¤\9fानि à¤\85नà¥\87न à¤¸à¤¹ à¤¸à¥\8dथानानà¥\8dतरितानि à¤­à¤µà¤¨à¥\8dति à¤\85नà¥\8dयथा  \n* à¤­à¤µà¤¾à¤¨à¥\8d à¤ªà¥\83षà¥\8dठमà¥\8d अन्यस्थानान्तरं कुर्वन् अस्ति । \n* अस्मिन् नाम्नि सम्भाषणपुटं पूर्वनिर्मितमस्ति अस्थवा  \n* अधोदत्ताम् अर्गलनमञ्चूषाम् उत्पाटितवान् । \nअस्मिन् विषये यदि इच्छति तर्हि भवता पुटानि चालनीयानि अथवा संयोजनीयानि ।",
        "movearticle": "शीर्षकं परिवर्त्यताम् :",
-       "moveuserpage-warning": "पà¥\82रà¥\8dवसà¥\82à¤\9aा : à¤¯à¥\8bà¤\9cà¤\95पà¥\81à¤\9fà¤\82 à¤\9aालयितà¥\81मà¥\8d à¤\89दà¥\8dयà¥\81à¤\95à¥\8dतà¤\83 à¥¤ à¤¸à¥\8dमरतà¥\81 à¤\95à¥\87वलà¤\82 à¤ªà¥\81à¤\9fं स्थानान्तरितं भवति न तु योजकनाम परिवर्तनं न भविष्यति ।",
+       "moveuserpage-warning": "पà¥\82रà¥\8dवसà¥\82à¤\9aना : à¤¯à¥\8bà¤\9cà¤\95पà¥\83षà¥\8dठà¤\82 à¤\9aालयितà¥\81मà¥\8d à¤\89दà¥\8dयà¥\81à¤\95à¥\8dतà¤\83 à¥¤ à¤¸à¥\8dमरतà¥\81 à¤\95à¥\87वलà¤\82 à¤ªà¥\83षà¥\8dठं स्थानान्तरितं भवति न तु योजकनाम परिवर्तनं न भविष्यति ।",
        "movecategorypage-warning": "<strong>पूर्वसूचना :</strong> भवान्/भवती वर्गं स्थानान्तरितं कर्तुम् इच्छति । अतः जानातु यत्, केवलं पृष्ठं स्थानान्तरितं भविष्यति पृष्ठे विद्यमानानि पुरातनवर्गाः परिवर्तिताः <em>न</em> भविष्यन्ति ।",
        "movenologintext": " [[Special:UserLogin|logged in]] पञ्जीकृतयोजकः भवता नामाभिलेखनं करणीयं भवति ।",
        "movenotallowed": "पुटानि स्थानान्तरियितुम् अनुमतिः नाश्ति ।",
        "movetalk": "सहगामिनं चर्चापृष्ठं चालयतु।",
        "move-subpages": "उपपुटनि चालयतु । ($1 पर्यन्तम्)",
        "move-talk-subpages": "सम्भाषणपुटानाम् उपपुटानि चालयतु ।($1 पर्यन्तम्)",
-       "movepage-page-exists": "$1 à¤\87तà¥\8dयà¥\87ततà¥\8d à¤ªà¥\81à¤\9fं पूर्वमेव विद्यते । तदुपरि लेखनम् अशक्यम् ।",
-       "movepage-page-moved": "$1 à¤ªà¥\81à¤\9fं $2 प्रति चालितम् अस्ति ।",
-       "movepage-page-unmoved": "$1 à¤ªà¥\81à¤\9fं $2 प्रति चालनम् अशक्यम् ।",
+       "movepage-page-exists": "$1 à¤\87तà¥\8dयà¥\87ततà¥\8d à¤ªà¥\83षà¥\8dठं पूर्वमेव विद्यते । तदुपरि लेखनम् अशक्यम् ।",
+       "movepage-page-moved": "$1 à¤ªà¥\83षà¥\8dठं $2 प्रति चालितम् अस्ति ।",
+       "movepage-page-unmoved": "$1 à¤ªà¥\83षà¥\8dठं $2 प्रति चालनम् अशक्यम् ।",
        "movepage-max-pages": "$1  इत्यस्य {{PLURAL:$1|page|pages}} गरष्टपुटानि चालितानि अतः इतोप्यधिकपुटानि स्वयं चालितानि न भवन्ति ।",
        "movelogpage": "सञ्चितावलिः (log) चाल्यताम्",
        "movelogpagetext": "पुटचालनस्य आवली अधः अस्ति ।",
        "delete_and_move_text": "==अपमर्जनम् आवश्यकम्==\nलक्षितपुटं \"[[:$1]]\" पूर्वमेव अस्ति ।\nचालनपथं सृष्टुम् एतत् अपमर्जितुम् इच्छति वा ?",
        "delete_and_move_confirm": "आम्, पुटम् अपमर्जतु ।",
        "delete_and_move_reason": "\"[[$1]]\" तः स्थानान्तरणं कर्तुं पथनिर्माणार्थम् अपमर्जितम् ।",
-       "selfmove": "सà¥\8dरà¥\8bतà¤\83 à¤²à¤\95à¥\8dषà¥\8dयशà¥\80रà¥\8dषà¤\95à¤\82 à¤\9a à¤¸à¤®à¤¾à¤¨à¥\87 à¥¤\nपà¥\81à¤\9fं स्वस्थानान् स्थानान्तरं न शक्यते ।",
+       "selfmove": "सà¥\8dरà¥\8bतà¤\83 à¤²à¤\95à¥\8dषà¥\8dयशà¥\80रà¥\8dषà¤\95à¤\82 à¤\9a à¤¸à¤®à¤¾à¤¨à¥\87 à¥¤\nपà¥\83षà¥\8dठं स्वस्थानान् स्थानान्तरं न शक्यते ।",
        "immobile-source-namespace": "$1 इति नामस्थाने पुटस्थानान्तरं न शक्यते ।",
        "immobile-target-namespace": "\"$1\" इति नामस्थाने पुटानां स्थानान्तरं न शक्यते ।",
        "immobile-target-namespace-iw": "पुटचालनार्थम् अन्तर्विक्यानुबन्धः मान्यं लक्ष्यं न ।",
        "thumbnail_image-type": "चित्रस्य प्रकारः नानुमोदितः ।",
        "thumbnail_gd-library": "अपूर्णं जि.जि.ग्रन्थालयानुन्यासः : विनष्टः कार्यकलापः $1",
        "thumbnail_image-missing": "सञ्चिका विनष्टा इति भाति : $1",
-       "thumbnail_image-failure-limit": "à¤\8fततà¥\8d à¤¥à¤®à¥\8dबलाà¤\88नà¥\8d à¤¸à¤¿à¤¦à¥\8dधà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¸à¤¦à¥\8dयà¤\83 à¤\9cाताà¤\83 à¤¬à¤¹à¤µà¤\83 à¤\85सफलाà¤\83 à¤ªà¥\8dरयासाà¤\83 à¤¸à¤¨à¥\8dति ($1 à¤\89त à¤\85धिà¤\95ाà¤\83) à¥¤ à¤\95à¥\83पया à¤ªà¥\81नà¤\83 à¤ªà¥\8dरयासà¤\82 à¤\95रà¥\8bतà¥\81 ।",
+       "thumbnail_image-failure-limit": "à¤\8fततà¥\8d à¤¥à¤®à¥\8dबलाà¤\88नà¥\8d à¤¸à¤¿à¤¦à¥\8dधà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¸à¤¦à¥\8dयà¤\83 à¤\9cाताà¤\83 à¤¬à¤¹à¤µà¤\83 à¤\85सफलाà¤\83 à¤ªà¥\8dरयासाà¤\83 à¤¸à¤¨à¥\8dति ($1 à¤\89त à¤\85धिà¤\95ाà¤\83) à¥¤ à¤\95à¥\83पया à¤ªà¥\81नà¤\83 à¤ªà¥\8dरयततामà¥\8d ।",
        "import": "पृष्ठानां निर्यातं करोतु",
        "importinterwiki": "अन्यस्मात् विकि-जालस्थानात् पृष्ठानि आयातं करोतु",
        "import-interwiki-text": "आयातं कर्तुम् कञ्चन विकि-प्रकल्पं, किञ्चित् पृष्ठं च चिनोतु ।\nसंस्करणस्य दिनाङ्कं, सम्पादकस्य नाम यथा स्थाने भविष्यति ।\nअन्यस्मात् विकि-प्रकल्पात् आयातकृताः सर्वाः संरक्षिताऽऽवल्यः [[Special:Log/import|आयातसंरक्षिताऽऽल्यां]] भविष्यन्ति ।",
        "importuploaderrortemp": "अयातसञ्चिकानाम् उत्तारणम् असफलम् ।\nअनित्यः सम्पुटः विनष्टः ।",
        "import-parse-failure": "XML आयातस्य व्यवस्थायाः वैफल्यम् ।",
        "import-noarticle": "आयातं कर्तुं पुटानि न सन्ति ।",
-       "import-nonewrevisions": "नà¥\88à¤\95सà¥\8dयापि à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤\86यातà¤\83 à¤\85भवतà¥\8d à¥¤ (सरà¥\8dवाणि à¤¸à¤\82सà¥\8dà¤\95रणानि à¤ªà¥\82रà¥\8dवसà¥\8dमादेव विद्यामानि सन्ति अथवा दोषयुक्तत्वात् परित्यक्तानि)।",
+       "import-nonewrevisions": "नà¥\88à¤\95सà¥\8dयापि à¤¸à¤\82सà¥\8dà¤\95रणसà¥\8dय à¤\86यातà¤\83 à¤\85भवतà¥\8d à¥¤ (सरà¥\8dवाणि à¤¸à¤\82सà¥\8dà¤\95रणानि à¤ªà¥\82रà¥\8dवमेव विद्यामानि सन्ति अथवा दोषयुक्तत्वात् परित्यक्तानि)।",
        "xml-error-string": "$1 पङ्किः $2 इत्यस्मिन् , स्तम्भः $3 (बैट्स् $4): $5",
        "import-upload": "XML पाठान् उत्तारयतु ।",
        "import-token-mismatch": "सत्रस्य पाठानां नाशः ।\nपुनः प्रयतताम् ।",
        "tooltip-n-portal": "त्वया प्रकल्पविषये किं कर्तुं शक्यते, कुथं साहाय्यं प्राप्तव्यम्",
        "tooltip-n-currentevents": "वर्तमानप्रसङ्गानां पृष्ठभूमिका प्राप्यताम्",
        "tooltip-n-recentchanges": "नवीनपरिवर्तनानाम् आवलिः",
-       "tooltip-n-randompage": "à¤\85शà¥\83à¤\99à¥\8dà¤\96लं (random) पृष्ठं गम्यताम्",
+       "tooltip-n-randompage": "यादà¥\83à¤\9aà¥\8dà¤\9bिà¤\95ं (random) पृष्ठं गम्यताम्",
        "tooltip-n-help": "अन्वेषणस्थलम्",
        "tooltip-t-whatlinkshere": "अत्र सम्बद्धानां परिसन्धितानां विकि-पृष्ठानाम् आवलिः",
        "tooltip-t-recentchangeslinked": "एतत्पृष्ठसम्बद्धेषु पृष्ठेषु जातानि नवीनपरिवर्तनानि",
        "table_pager_empty": "फलितानि न सन्ति",
        "autosumm-blank": "पृष्ठं रिक्तीकृतम्",
        "autosumm-replace": "\"$1\" इत्यनेन सह आधेस्य विनिमयः कृतः ।",
-       "autoredircomment": "[[$1]] à¤ªà¥\8dरति à¤ªà¥\81à¤\9fं पुनर्निदिष्टम् ।",
+       "autoredircomment": "[[$1]] à¤ªà¥\8dरति à¤ªà¥\83षà¥\8dठं पुनर्निदिष्टम् ।",
        "autosumm-new": "$1 नवीन पृष्ठं निर्मीत अस्ती",
        "autosumm-newblank": "रिक्तं पृष्ठं निर्मितम्",
        "lag-warn-normal": "$1 {{PLURAL:$1|क्षणम्|क्षणानि}} इति काले सम्भूतपरिवर्तन प्रायः अस्यां सूचिकायां न दर्शितम् ।",
        "tags": "तर्कसिद्धानि परिवर्तनाङ्कनानि",
        "tag-filter": "[[Special:Tags|Tag]] शोधनी:",
        "tag-filter-submit": "शोधनी",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|अङ्कनम्|अङ्कनानि}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|अङ्कनम्|अङ्कनानि}}]] : $2)",
        "tags-title": "अङ्कनानि",
        "tags-intro": "एतत्पुटं सार्थसूत्राणि दर्शयति यस्य कोऽपि तन्त्रांशः यत्किमपि सम्पादनम् अङ्कयितुं प्रयोजयति ।",
        "tags-tag": "अङ्कननाम",
        "logentry-import-upload": "$1 {{GENDER:$2|आयतं कृतं}} $3 द्वारा सञ्चिका उपारोहिता",
        "logentry-import-interwiki": "$3 अन्यविकि-प्रकल्पात् $1 {{GENDER:$2|आयतं कृतम्}}",
        "logentry-merge-merge": "$1 {{GENDER:$2|मेलितं}} $3 इत्येतत् $4 इत्यस्मिन् ($5 परन्यन्तं संस्करणानि सन्ति)",
-       "logentry-move-move": "$1 {{GENDER:$2|moved}} $3 पुटं $4 प्रति चालितम्",
+       "logentry-move-move": "$1 इत्यनेन {{GENDER:$2|शीर्षकं परिवर्त्य}} $3 पृष्ठं $4 प्रति स्थानान्तरितम्",
        "logentry-move-move-noredirect": "पुनर्निर्देशनम् अत्यक्त्वा $1 इत्यनेन $3 तः $4 पृष्ठं  {{GENDER:$2|स्थानान्तरितं}}",
        "logentry-move-move_redir": "पुनर्निर्देशनं प्रति $1 इत्यनेन $3 तः $4 पृष्ठं  {{GENDER:$2|स्थानान्तरितं}}",
        "logentry-move-move_redir-noredirect": "पुनर्निर्देशनं प्रति पुनर्निर्देशनम् अत्यक्त्वा $1 इत्यनेन $3 तः $4 पृष्ठं {{GENDER:$2|स्थानान्तरितं}}",
        "expand_templates_generate_rawhtml": "अपक्वं HTML दर्श्यताम्",
        "expand_templates_preview": "प्राग्दृश्यम् दर्श्यताम्",
        "expand_templates_preview_fail_html": "'''क्षम्यताम् ! प्रवेशसूचनायाः लोपत्वात् भवता/भवत्या कृतानि परिवर्तनानि रक्षितुं वयं न शक्तवन्तः ।\n\n<em>कारणं {{SITENAME}} इत्यत्र मूल-HTML-समर्थितं भवति । अतः JavaScript इत्यस्मात् रक्षितुं प्राग्दृश्यं निगूहितं भवति ।</em>\n\n<strong>भवता/भवत्या कृतं सम्पादनं यदि उचितमस्ति, तर्हि पुनः प्रयत्यताम् ।</strong>\n\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
-       "expand_templates_preview_fail_html_anon": "<em>यतà¥\8b à¤¹à¤¿ {{SITENAME}} à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤\85पà¤\95à¥\8dवà¤\82 HTML à¤¸à¤®à¤°à¥\8dथितमà¥\8d à¤\85सà¥\8dति, à¤¤à¤¥à¤¾ à¤\9a à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤ªà¥\8dरवà¥\87शà¤\82 à¤¨ à¤ªà¥\8dरापतà¥\8d, à¤\85तà¤\83 JavaScript à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤°à¤\95à¥\8dषितà¥\81à¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¨à¤¿à¤\97à¥\82हितमà¥\8d </em>\n\n<strong>यदि à¤\8fषà¤\83 à¤¨à¥\8dयासà¤\99à¥\8dà¤\97तà¤\83 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयपà¥\8dरयासà¤\83 à¤\85सà¥\8dति, à¤¤à¤°à¥\8dहि à¤\95à¥\83पया [[Special:UserLogin|पà¥\81नà¤\83पà¥\8dरविशà¥\8dय]] à¤ªà¥\8dरयासà¤\82 à¤\95रà¥\8bतà¥\81 </strong>",
+       "expand_templates_preview_fail_html_anon": "<em>यतà¥\8b à¤¹à¤¿ {{SITENAME}} à¤\87तà¥\8dयसà¥\8dमिनà¥\8d à¤\85पà¤\95à¥\8dवà¤\82 HTML à¤¸à¤®à¤°à¥\8dथितमà¥\8d à¤\85सà¥\8dति, à¤¤à¤¥à¤¾ à¤\9a à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤ªà¥\8dरवà¥\87शà¤\82 à¤¨ à¤ªà¥\8dरापतà¥\8d, à¤\85तà¤\83 JavaScript à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤°à¤\95à¥\8dषितà¥\81à¤\82 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयà¤\82 à¤¨à¤¿à¤\97à¥\82हितमà¥\8d </em>\n\n<strong>यदि à¤\8fषà¤\83 à¤¨à¥\8dयासà¤\99à¥\8dà¤\97तà¤\83 à¤ªà¥\8dराà¤\97à¥\8dदà¥\83शà¥\8dयपà¥\8dरयासà¤\83 à¤\85सà¥\8dति, à¤¤à¤°à¥\8dहि à¤\95à¥\83पया [[Special:UserLogin|पà¥\81नà¤\83पà¥\8dरविशà¥\8dय]] à¤ªà¥\8dरयततामà¥\8d </strong>",
        "pagelanguage": "पृष्ठस्य भाषाचयकः",
        "pagelang-name": "पृष्ठम्",
        "pagelang-language": "भाषा",
        "log-description-pagelang": "भाषापृष्ठे जानानां परिवर्तनानाम् अवेक्षणावऽऽवलिः अस्ति ।",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|परिवर्तनानि}} $3 भाषापृष्ठाय $4 तः $5 पर्यन्तम्",
        "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: Skin configuration] for information how to enable {{PLURAL:$4|it|them and choose the default}}.\n\n$2\n\n; MediaWiki इत्येत् सद्यः एव स्थापितम् :\n: git इत्यस्मात् स्थापितं स्यात् उत साक्षात् मूलस्रोतात् उपयञ्जते । एतत् सामान्यम् अस्ति । इतः काश्चन त्वचः अवतार्यताम्  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], द्वारा:\n:* अपवारोपणम् [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* इत्समात् वैय्यक्तिरूपेण त्वचः अवारोपणं शक्यम्  [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: यदि भवान्/भवती मिडियाविकि विधिकारः अस्ति चेत् git द्वारा एतत् समीकर्तुं न शक्योत् ।\n\n; MediaWiki इत्येत् केवलम् अवगच्छति :\n: MediaWiki 1.24, नवीनं च (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following {{PLURAL:$5|line|lines}} into <code>LocalSettings.php</code> to enable {{PLURAL:$5|the|all}} installed {{PLURAL:$5|skin|skins}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; यदि केवलं परिवर्तुम् इच्छति... <code>LocalSettings.php</code>:\n: त्वचि वारद्वयं क्लिक् करोतु...",
-       "default-skin-not-found-no-skins": "à¤\85रà¥\87 ! à¤¤à¤µ à¤µà¤¿à¤\95ि à¤\95à¥\83तà¥\87 à¤¯à¤¦à¤¾à¤­à¤¾à¤µà¥\87 à¤¤à¥\8dवà¤\95à¥\8d <code dir=\"ltr\">$wgDefaultSkin</code> à¤¨à¤¿à¤°à¥\8dधारिता à¤\85सà¥\8dति à¥¤  <code>$1</code>-तà¥\8dवà¥\87न à¤\89पलबà¥\8dधà¤\82 à¤¨à¤¾à¤¸à¥\8dति à¥¤\n\nतव à¤¸à¥\8dथापनायाà¤\82 à¤¨à¤¿à¤®à¥\8dनà¤\82 à¤\85सà¥\8dति à¥¤ \n à¤¦à¥\83शà¥\8dयतामà¥\8d -  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable \n\n; MediaWiki à¤\87तà¥\8dयà¥\87तà¥\8d à¤¸à¤¦à¥\8dयà¤\83 à¤\8fव à¤¸à¥\8dथापितमà¥\8d :\n: git à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤¸à¥\8dथापितà¤\82 à¤¸à¥\8dयातà¥\8d à¤\89त à¤¸à¤¾à¤\95à¥\8dषातà¥\8d à¤®à¥\82लसà¥\8dरà¥\8bतातà¥\8d à¤\89पयà¤\9eà¥\8dà¤\9cतà¥\87 à¥¤ à¤\8fततà¥\8d à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dयमà¥\8d à¤\85सà¥\8dति à¥¤ à¤\87तà¤\83 à¤\95ाशà¥\8dà¤\9aन à¤¤à¥\8dवà¤\9aà¤\83 à¤\85वतार्यताम्  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], द्वारा:\n:* अपवारोपणम् [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* इत्समात् वैय्यक्तिरूपेण त्वचः अवारोपणं शक्यम्  [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: यदि भवान्/भवती मिडियाविकि विधिकारः अस्ति चेत् git द्वारा एतत् समीकर्तुं न शक्योत् ।\n\n; MediaWiki इत्येत् केवलम् अवगच्छति :\n: MediaWiki 1.24, नवीनं च (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following <code>LocalSettings.php</code> to enable \n\n; यदि केवलं परिवर्तुम् इच्छति... <code>LocalSettings.php</code>:\n: त्वचि वारद्वयं क्लिक् करोतु यदभावे रक्षतु...",
+       "default-skin-not-found-no-skins": "à¤\85रà¥\87 ! à¤¤à¤µ à¤µà¤¿à¤\95ि à¤\95à¥\83तà¥\87 à¤¯à¤¦à¤¾à¤­à¤¾à¤µà¥\87 à¤¤à¥\8dवà¤\95à¥\8d <code dir=\"ltr\">$wgDefaultSkin</code> à¤¨à¤¿à¤°à¥\8dधारिता à¤\85सà¥\8dति à¥¤  <code>$1</code>-तà¥\8dवà¥\87न à¤\89पलबà¥\8dधà¤\82 à¤¨à¤¾à¤¸à¥\8dति à¥¤\n\nतव à¤¸à¥\8dथापनायाà¤\82 à¤¨à¤¿à¤®à¥\8dनà¤\82 à¤\85सà¥\8dति à¥¤ \n à¤¦à¥\83शà¥\8dयतामà¥\8d -  [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable \n\n; MediaWiki à¤\87तà¥\8dयà¥\87तà¥\8d à¤¸à¤¦à¥\8dयà¤\83 à¤\8fव à¤¸à¥\8dथापितमà¥\8d :\n: git à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤¸à¥\8dथापितà¤\82 à¤¸à¥\8dयातà¥\8d à¤\89त à¤¸à¤¾à¤\95à¥\8dषातà¥\8d à¤®à¥\82लसà¥\8dरà¥\8bतातà¥\8d à¤\89पयà¤\9eà¥\8dà¤\9cतà¥\87 à¥¤ à¤\8fततà¥\8d à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dयमà¥\8d à¤\85सà¥\8dति à¥¤ à¤\87तà¤\83 à¤\95ाशà¥\8dà¤\9aन à¤¤à¥\8dवà¤\9aà¤\83 à¤\85वारà¥\8bप्यताम्  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], द्वारा:\n:* अपवारोपणम् [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* इत्समात् वैय्यक्तिरूपेण त्वचः अवारोपणं शक्यम्  [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: यदि भवान्/भवती मिडियाविकि विधिकारः अस्ति चेत् git द्वारा एतत् समीकर्तुं न शक्योत् ।\n\n; MediaWiki इत्येत् केवलम् अवगच्छति :\n: MediaWiki 1.24, नवीनं च (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following <code>LocalSettings.php</code> to enable \n\n; यदि केवलं परिवर्तुम् इच्छति... <code>LocalSettings.php</code>:\n: त्वचि वारद्वयं क्लिक् करोतु यदभावे रक्षतु...",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (समर्थीतम्)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''असमर्थीतम्''')",
        "mediastatistics": "सञ्चिकानां सङ्ख्यिक्यः",
index 86f7d25..1148f68 100644 (file)
        "readonly_lag": "Билии олоҕун хос сиэрбэрдэрэ сүрүн сиэрбэри кытта мэнэйдэһэр кэмнэригэр билии олоҕо хатанна",
        "internalerror": "Ис алҕас (внутренняя ошибка)",
        "internalerror_info": "Ис алҕас: $1",
+       "internalerror-fatal-exception": "\"$1\" тииптээх төлөрүйбэт туорааһын",
        "filecopyerror": "\"$1\" диэн билэ \"$2\"-а кыайан төгүллэммэт.",
        "filerenameerror": "\"$1\" диэн билэ аатын \"$2\" диэҥҥэ кыайан уларытыллыбат.",
        "filedeleteerror": "\"$1\" диэн билэ кыайан сотторуллубат.",
        "no-null-revision": "«$1» сирэйгэ кураанах көннөрүүнү оҥорор табыллыбата",
        "badtitle": "Табыллыбат аат",
        "badtitletext": "Ыйытыллыбыт сирэй аата сыыһа, иччитэх, эбэтэр сыыһа ыйынньыктаах тыллар ыккардыларынааҕы дуу, биикилэр ыккардыларынааҕы дуу аат.",
+       "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": "Бу сирэй уларыйыыта бобуллан турар. Билиитэ билигин кыайан уларыйбат.",
        "wrongpassword": "Киирии тылыҥ сыыһалаах. Өссө киллэрэн көр.",
        "wrongpasswordempty": "Киирии тылгын суруйбатаххын. Өссө киирэн көр.",
        "passwordtooshort": "Киирии тылыҥ наһаа кылгас.\nКырата {{PLURAL:$1|1 бэлиэлээх|$1 бэлиэлээх}} буолуохтаах.",
+       "passwordtoolong": "Аһарык {{PLURAL:$1|1 бэлиэттэн|$1 бэлиэттэн}} уһун буолуо суохтаах.",
        "password-name-match": "Киирии тыл ааккыттан атын буолуохтаах.",
        "password-login-forbidden": "Маннык ааты уонна киирии тылы туһаныы бобуллар.",
        "mailmypassword": "Киирии тылы саҥардыы",
        "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}}|администраатарга]] суруйан быһаарсыаххын сөп.\nБолҕой, өскө регистрацияламматах буоллаххына, эбэтэр эл. аадырыскын [[Special:Preferences|бигэргэппэтэх]] буоллаххына, эбэтэр сурук суруйарыҥ бобуллубут буоллаҕына администраатарга суруйар кыаҕыҥ суох.\nЭн IP-аадырыһыҥ — $3, бобуу нүөмэрэ — #$5.\nОну суруккар киллэрээр.",
        "autoblockedtext": "Эн IP-аадырыскын ханнык эрэ бу бырайыакка кыттара бобуллубут киһи туһана сылдьыбыт, онон бу IP-аадырыс бобуулаах. Боппут администраатар ($1) ол төрүөтүн маннык суруйбут:\n\n:''$2''\n\n*Бобуллубут: $8\n*Бобуу болдьоҕо: $6\n*Бобулунна: $7\n\nЭн $1 диэн киһиэхэ эбэтэр атын [[{{MediaWiki:Grouppage-sysop}}|администраатарга]] сурук суруйан быһаарсыаххын сөп.\n\nБолҕой, өскө регистрацияламматах буоллаххына, эбэтэр эл. аадырыскын [[Special:Preferences|бигэргэппэтэх]]  буоллаххына, эбэтэр сурук суруйарыҥ бобуллубут буоллаҕына администраатарга суруйар кыаҕыҥ суох.\n\nIP-аадырыһыҥ $3, бобуу нүөмэрэ — #$5.\nОну суруккар киллэрээр.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Кураанах эбийиэк",
        "content-json-empty-array": "Кураанах массив",
+       "duplicate-args-warning": "<strong>Болҕой:</strong> «$3» параметр бииртэн ордук эрэ буоллаҕына [[:$1]] маны [[:$2]] холбуур. Кэлиҥҥи эрэ сыыппара туһаныллыа.",
        "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{{PLURAL:$2|Сигэнии ахсаана|Сигэниилэр ахсааннара}} мантан тахсыа суохтаах - $2, билигин {{PLURAL:$1|$1 сигэниилээх|$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-showdeleted": "көрдөр",
        "revisiondelete": "Соторго/торуму төнүннэрэргэ",
        "revdelete-nooldid-title": "Барыл чопчу ыйыллыбата",
-       "revdelete-nooldid-text": "Бу дьайыыны оҥорорго торуму (торумнары) чуолаан ыйбатаххын,\nэбэтэр торум ончу суох, эбэтэр кистэммит торум.",
+       "revdelete-nooldid-text": "Бу дьайыыны оҥорорго торуму (торумнары) чуолаан ыйбатаххын,\nэбэтэр торум ончу суох, эбэтэр көстөр торуму кистии сатыыгын.",
        "revdelete-no-file": "Ыйыллыбыт билэ суох.",
        "revdelete-show-file-confirm": "\"<nowiki>$1</nowiki>\" билэ баччаҕа $2, $3 сотуллубут барылын көрүөххүн баҕараҕын дуо?",
        "revdelete-show-file-submit": "Сөп",
        "userrights-lookup-user": "Кыттаачылар бөлөхтөрүн салайыы",
        "userrights-user-editname": "Кыттааччы аата:",
        "editusergroup": "Кыттааччылар бөлөхтөрүн уларытарга",
-       "editinguser": "[[User:$1|$1]]''' кыттааччы $2 быраабын уларытыы",
+       "editinguser": "<strong>[[User:$1|$1]]</strong> кыттааччы $2 быраабын уларытыы",
        "userrights-editusergroup": "Кыттааччы бөлөхтөрүн уларытарга",
        "saveusergroups": "Кыттааччы бөлөхтөрүн бигэргэт",
        "userrights-groupsmember": "Бу бөлөхтөргө киирэр:",
        "right-sendemail": "Атын кыттааччыларга эл. почтаны ыытарга",
        "right-passwordreset": "Киирии тылы почта нөҥүө уларытыыны көрүү",
        "right-managechangetags": "[[Special:Tags|Бэлиэлэри]] билии олоҕуттан ылыы уонна сотуу",
+       "right-applychangetags": "Улартыыларгын кытта [[Special:Tags|тиэктэри]] тутун",
        "newuserlogpage": "Кыттааччылары бэлиэтиир сурунаал",
        "newuserlogpagetext": "Соторутааҕыта бэлиэтэммит кыттааччылар.",
        "rightslog": "Кыттаачы бырааптарын сурунаала",
        "uploaddisabledtext": "Билэлэри суруттарар көҥүллэммэт.",
        "php-uploaddisabledtext": "PHP туруорууларыгар билэни киллэрии араарыллыбыт. Бука диэн, file_uploads туруоруутун көр.",
        "uploadscripted": "Бу билэ HTML эбэтэр скрипт куодтаах эбит. Интэриниэт көрдөрөр бырагыраамма ону сыыһа ааҕыан сөп.",
+       "upload-scripted-pi-callback": "XML истиилин табылыыссатын таҥастыыр туһунан ыйыылаах-кэрдиилээх билэни хачайдыыр табыллыбата.",
+       "uploaded-script-svg": "Хачайдаммыт SVG-билэҕэ сценарийы өйүүр куттааллаах «$1» элэмиэн көһүннэ.",
+       "uploaded-image-filter-svg": "Хачайдаммыт SVG-билэҕэ маннык URL-аадырыстаах ойуу сиидэтэ көстүбүт <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Бу SVG-билэ алҕастаах аат даллаах эбит: '$1'",
        "uploadinvalidxml": "Хачайдаммит билэҕэ XML анаалыстанар кыаҕа суох.",
        "uploadvirus": "Бу билэ вирустаах! Көр: $1",
        "listfiles-delete": "сотуу",
        "listfiles-summary": "Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.",
        "listfiles_search_for": "Миэдьийэни (ойууну) аатынан көрдөтүү:",
+       "listfiles-userdoesnotexist": "\"$1\" кыттааччы аата бэлиэтэниллибэтэх.",
        "imgfile": "билэ",
        "listfiles": "Билэлэр",
        "listfiles_thumb": "Ойуучаан",
        "randomredirect": "Түбэспиччэ утаарыы",
        "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
        "statistics": "Статистика",
-       "statistics-header-pages": "СиÑ\80Ñ\8dй Ñ\81Ñ\82аÑ\82ииÑ\81Ñ\82иката",
-       "statistics-header-edits": "Ð\9aөннөÑ\80Ò¯Ò¯ Ñ\81Ñ\82аÑ\82ииÑ\81Ñ\82иката",
-       "statistics-header-users": "Ð\9aÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bлаÑ\80 Ñ\81Ñ\82аÑ\82ииÑ\81Ñ\82икалара",
+       "statistics-header-pages": "СиÑ\80Ñ\8dй Ñ\8bÑ\81Ñ\82аÑ\82Ñ\8bÑ\8bÑ\81Ñ\82Ñ\8bката",
+       "statistics-header-edits": "Ð\9aөннөÑ\80Ò¯Ò¯ Ñ\8bÑ\81Ñ\82аÑ\82Ñ\8bÑ\8bÑ\81Ñ\82Ñ\8bката",
+       "statistics-header-users": "Ð\9aÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bлаÑ\80 Ñ\8bÑ\81Ñ\82аÑ\82Ñ\8bÑ\8bÑ\81Ñ\82Ñ\8bкалара",
        "statistics-header-hooks": "Атын статистика",
        "statistics-articles": "Ыстатыйалар ахсааннара",
        "statistics-pages": "Сирэйдэр",
        "nmembers": "$1 {{PLURAL:$1|кыттааччы|кыттааччылаах}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|эбийиэк|эбийиэктээх}}",
        "nrevisions": "$1 {{PLURAL:$1|барыллаах|барыл баар}}",
-       "nviews": "$1 көрүүлээх",
        "nimagelinks": "$1 {{PLURAL:$1|сирэйгэ|ахсааннаах сирэйгэ}} туттуллар",
        "ntransclusions": "$1 {{PLURAL:$1|сирэйгэ|ахсааннаах сирэйгэ}} туттуллар",
        "specialpage-empty": "Көрдөөн тугу да булбата.",
        "unusedimages": "Туттулубатах билэлэр",
        "wantedcategories": "Көрдөнүллэр категориялар",
        "wantedpages": "Көрдөнүллэр сирэйдэр",
+       "wantedpages-summary": "Элбэх ыстатыйа сигэнэр гынан баран, суох сирэйдэр испииһэктэрэ (кинилэргэ утаарар сирэйдэр ааҕыллыбатылар). Утаарар сирэйдээх гынан баран, сурулла илик сирэйдэр испииһэктэрин манна көр [[{{#special:BrokenRedirects}}|үлэлээбэт утаарылар]].",
        "wantedpages-badtitle": "Көрдөбүл түмүгэр сыыһалаах аат баар: $1",
        "wantedfiles": "Көрдөммүт билэлэр",
        "wantedfiletext-cat": "Манна көстөр билэлэри суохтарын үрдүнэн тутта сатыыллар. Бу тиһиликкэ таска сытар билэлэр алҕас киириэхтэрин сөп. Оннук алҕастык киирбиттэр <del>сотуунан</del> бэлиэтэниэхтэрэ. Маны таһынан суох билэлэргэ сигэнэр сирэйдэр манна көстөллөр: [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Манна ааттаммыт билэлэргэ сигэнэллэр, ол эрээри кинилэр суохтар (сурулла иликтэр биитэр сотуллубуттар). Ону тэҥэ бу испииһэги көр [[:$1]].",
        "wantedfiletext-nocat": "Манна көстөр билэлэри суохтарын үрдүнэн тутта сатыыллар. Бу тиһиликкэ таска сытар билэлэр алҕас киириэхтэрин сөп. Оннук алҕастык киирбиттэр <del>сотуунан</del> бэлиэтэниэхтэрэ.",
+       "wantedfiletext-nocat-noforeign": "Бу билэлэргэ сигэнэллэр, ол эрэн кинилэр суохтар.",
        "wantedtemplates": "Көрдөнөр халыыптар",
        "mostlinked": "Саамай элбэх сирэй сигэнэр сирэйдэрэ",
        "mostlinkedcategories": "Саамай элбэх сирэй сигэнэр категориялара",
-       "mostlinkedtemplates": "Саамай Ñ\8dлбÑ\8dÑ\85Ñ\82ик Ñ\82Ñ\83Ñ\82Ñ\82Ñ\83ллаÑ\80 Ñ\85алÑ\8bÑ\8bпÑ\82ар",
+       "mostlinkedtemplates": "Саамай Ñ\8dлбÑ\8dÑ\85Ñ\82ик Ñ\82Ñ\83Ñ\82Ñ\82Ñ\83ллаÑ\80 Ñ\81иÑ\80Ñ\8dйдÑ\8dр",
        "mostcategories": "Элбэх категорияҕа киирэр ыстатыйалар",
        "mostimages": "Саамай элбэхтик сигэниллэр билэлэр",
        "mostinterwikis": "Ордук элбэх интервики-сигэлээх сирэйдэр",
        "version-entrypoints-header-url": "URL",
        "version-libraries": "Олордуллубут бибилэтиэкэлэр",
        "version-libraries-library": "Бибилэтиэкэ",
+       "version-libraries-version": "Биэрсийэтэ",
        "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-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-source-extension": "Кэҥэтиитинэн быһаарыллар",
+       "tags-source-manual": "Кыттааччылар уонна буоттар киллэрэллэр",
+       "tags-source-none": "Аны туттуллубат",
        "tags-edit": "уларытыы",
+       "tags-delete": "сот",
+       "tags-activate": "холбоо",
+       "tags-deactivate": "араар",
        "tags-hitcount": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
        "tags-create-tag-name": "Бэлиэ аата:",
        "tags-create-reason": "Төрүөтэ:",
        "tags-create-invalid-chars": "Бэлиэ аатыгар сопутуой (<code>,</code>) эбэтэр слэш  (<code>/</code>) буолуохтаах.",
        "tags-create-invalid-title-chars": "Тиэк аатыгар сирэй баһыгар туттуллуо суохтаах бэлиэ киириэ суохтаах",
        "tags-create-already-exists": "«$1» тиэк хайыы-үйэ баар эбит.",
+       "tags-delete-reason": "Төрүөтэ:",
+       "tags-delete-submit": "Бу тиэги букатыннаахтык сот",
+       "tags-activate-title": "Тиэги холбоо",
+       "tags-activate-reason": "Төрүөтэ:",
+       "tags-activate-submit": "Холбоо",
+       "tags-deactivate-title": "Тиэги араар",
+       "tags-deactivate-question": "\"$1\" тиэги арааран эрэҕин.",
+       "tags-deactivate-reason": "Төрүөтэ:",
+       "tags-deactivate-not-allowed": "\"$1\" тиэги араарар табыллыбат.",
+       "tags-deactivate-submit": "араар",
+       "tags-edit-title": "Тиэктэри уларытыы",
+       "tags-edit-manage-link": "Тиэктэри дьаһайыы",
+       "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": "Сөп түбэһэр тиэк көстүбэтэ",
+       "tags-edit-reason": "Төрүөтэ:",
        "comparepages": "Сирэйдэри тэҥнииргэ",
        "compare-page1": "Бастакы сирэй",
        "compare-page2": "Иккис сирэй",
        "rightsnone": "(суох)",
        "revdelete-summary": "уларытыылар туһунан",
        "feedback-adding": "Сирэй туһунан санаа этии...",
+       "feedback-back": "Төнүн",
        "feedback-bugcheck": "Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.",
        "feedback-bugnew": "Мин тургуттум. Атын алҕас туһунан",
        "feedback-bugornote": "Туох кыһалҕаны көрсүбүккүн сиһилии суруйар кыахтаах буоллаххына, бука диэн [$1 алҕас туһунан биллэр].\nОл сатаммат буоллаҕына бу судургу форманы толор. Эн этииҥ ааккын уонна туһанар браузерыҥ аатын кытта манна «[$3 $2]» бэчээттэниэ.",
        "feedback-cancel": "Салҕаама",
        "feedback-close": "Сатанна",
+       "feedback-dialog-title": "Санааҕын ыыт",
+       "feedback-error-title": "Алҕас",
        "feedback-error1": "Алҕас: API биллибэт түмүгэ",
        "feedback-error2": "Алҕас: Көннөрүү сатаммата",
        "feedback-error3": "Алҕас: API хоруйдаабата",
        "feedback-subject": "Тиэмэ:",
        "feedback-submit": "Ыыт",
        "feedback-thanks": "Махтал! Эн санааҥ бу сирэйгэ \"[$2 $1]\" сурулунна.",
+       "feedback-thanks-title": "Махтал!",
+       "feedback-useragent": "Браузерым:",
        "searchsuggest-search": "Көрдөөһүн",
        "searchsuggest-containing": "тыл баар ыстатыйалара...",
        "api-error-badaccess-groups": "Эн бу биикигэ билэ киллэрэриҥ хааччахтаммыт.",
        "right-pagelang": "Сирэй тылын уларыт",
        "action-pagelang": "сирэй тылын уларытар буол",
        "log-name-pagelang": "Тылы уларытыы сурунаала",
+       "mediastatistics": "Миэдьийэ ыстатыыстыката",
        "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME көрүҥэ",
+       "mediastatistics-table-extensions": "Туһаныллыан сөптөөх кэҥэтиилэр",
        "mediastatistics-table-count": "Билэ ахсаана",
        "mediastatistics-table-totalbytes": "Барытын кээмэйэ",
        "mediastatistics-header-unknown": "Биллибэт",
        "mediastatistics-header-executable": "Толоруллар",
        "mediastatistics-header-archive": "Ыгыллыбыт формааттар",
        "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут",
+       "headline-anchor-title": "Бу салааҕа сигэнии",
        "special-characters-group-latin": "Латыынныы",
        "special-characters-group-latinextended": "Латыынныы кэтирэтиллибиттэр",
        "special-characters-group-ipa": "МФА (IPA)",
        "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-group-khmer": "Кхмер",
+       "special-characters-title-endash": "орто тире",
+       "special-characters-title-emdash": "уһун тире",
+       "special-characters-title-minus": "минус бэлиэтэ"
 }
index 9c79ad3..cb9d930 100644 (file)
@@ -17,7 +17,7 @@
                        "Macofe"
                ]
        },
-       "tog-underline": "Suttalinia li culligamenti:",
+       "tog-underline": "Suttalinia 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",
        "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 culligamentu 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 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.",
        "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 culligamentu 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 intir-linguìsticu o intir-wiki malu fattu.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti 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.",
        "passwordreset": "Azziramentu dâ password",
        "passwordreset-text-one": "Jinchi stu mòdulu pi' ricèviri na password timpurania pi' posta elittrònica.",
        "passwordreset-text-many": "{{PLURAL:$1|Jinchi unu dî campi pi' ricèviri na password timpurania pi' posta elittrònica.}}",
-       "passwordreset-legend": "Azzera la password",
        "passwordreset-disabled": "L'azziramentu dî password fu disattivatu nta sta wiki.",
        "passwordreset-emaildisabled": "Li funzionalità di e-mail furu disattivati nta sta wiki.",
        "passwordreset-username": "Nomu utenti:",
        "resettokens": "Azziramentu dî token",
        "resettokens-text": "Cca poi azzirari i ''token'' chi' dùnunu accessu a' certi dati risirvati assuciati ô to cuntu.\n\nSta cosa s'avissi a' fari si' pi' sbagghiu i facisti sapiri a' quarchidunu o si' u to cuntu fu' cumprumisu.",
        "resettokens-no-tokens": "Nun ci su' token di azzirari.",
-       "resettokens-legend": "Azziramentu dî token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (valuri attuali: $2)",
        "resettokens-watchlist-token": "Token pû feed web (Atom/RSS) dî [[Special:Watchlist|canciamenti ê pàggini ntâ to lista taliata]]",
        "bold_tip": "Grassettu",
        "italic_sample": "Cursivu",
        "italic_tip": "Cursivu",
-       "link_sample": "Tìtulu dû culligamentu",
-       "link_tip": "Culligamentu nternu",
-       "extlink_sample": "http://www.example.com tìtulu dû culligamentu",
-       "extlink_tip": "Culligamentu esternu (ricurdàrisi lu prifissu http://)",
+       "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://)",
        "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": "Culligamentu 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 nu culligamentu 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, calca lu buttuni <strong>n' arreri</strong> dû to browser.",
+       "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.",
        "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 nu culligamentu 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 a' vìdiri i 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.",
        "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:",
        "revdelete-edit-reasonlist": "Cancia li mutivazioni pi la cancillazzioni",
        "revdelete-offender": "Auturi dâ virsioni:",
        "suppressionlog": "Riggistru dî supprissioni",
-       "suppressionlogtext": "Ccassutta veni prisintatu n'elencu dî cancillazzioni e dî blocchi chi' cumpòrtunu l'ammucciata di cuntinutu a' l'occhî di l'aministraturi.\nSi po' cunsultari a [[Special:BlockList|lista dî blocchi]] pi' canùsciri i furbanni e i blocchi in viguri pi' com'ora.",
+       "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.",
        "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 culligamenti di navigazzioni la culonna veni azzirata.",
+       "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-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 culligamentu 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' 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].",
        "searchresults": "Risurtati dâ risciduta",
        "searchresults-title": "Risurtati dâ risciduta di \"$1\"",
        "titlematches": "Currispunnenzi ntê tìtuli dî pàggini",
        "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": "Nô vogghiu diri",
+       "gender-unknown": "Quannu ti mmuntùa, si’ po’, lu prugramma adupiriràvi lu gèniri grammaticali neutru",
        "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 di culligamenti chi' si tròvanu ntê to pàggini d'utenti o di discussioni.\nLu tò nnirizzu nun veni rivilatu quannu l'àutri utenti ti cuntattanu.",
+       "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-required": "Lu nnirizzu di posta elittrònica è obbligatoriu.",
        "prefs-info": "Nfurmazzioni essinziali",
        "prefs-i18n": "Intirnazziunalizzazioni",
        "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 culligamenti]] a' stu file.",
+       "morelinkstoimage": "Ammustra [[Special:WhatLinksHere/$1|autri 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 culligamenti ca cci tràsunu.",
-       "unusedtemplateswlh": "autri culligamenti",
+       "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",
        "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 culligamenti a lu primu e a 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à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.",
        "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 culligamenti intir-linguìstici",
-       "withoutinterwiki-summary": "Li pàggini siguenti nun hànnu culligamenti ê virsioni nta autri lingui.",
+       "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-legend": "Prifissu",
        "withoutinterwiki-submit": "Ammustra",
        "fewestrevisions": "Pàggini cu' cchiu' picca virsioni",
        "nbytes": "$1 {{PLURAL:$1|byte|byte}}",
        "ncategories": "$1 {{PLURAL:$1|catigurìa|catigurìi}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
-       "nlinks": "$1 {{PLURAL:$1|culligamentu|culligamenti}}",
+       "nlinks": "$1 {{PLURAL:$1|lijami}}",
        "nmembers": "$1 {{PLURAL:$1|membru|membra}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membru|membra}}",
        "nrevisions": "$1 {{PLURAL:$1|rivisioni|rivisioni}}",
-       "nviews": "$1 {{PLURAL:$1|vìsita|vìsiti}}",
        "nimagelinks": "Adupiratu nta $1 {{PLURAL:$1|pàggina|pàggini}}",
        "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 culligamenti 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'autri pàggini e nun su' trasclusi nta autri 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 culligamenti versu autri pàggini di {{SITENAME}}.",
+       "deadendpagestext": "Li pàggini siguenti sunnu privi di lijami versu autri 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 culligamenti ôn file pi' menzu di URL diretti; li file addupirati a' sta manera putìssiru èssiri elincati ccassutta puru si' si nni fa' usu.",
+       "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.",
        "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 culligamenti 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 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-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):",
        "deletedcontributions": "Cuntribbuta di l'utenti cancillati",
        "deletedcontributions-title": "Cuntribbuta di l'utenti cancillati",
        "sp-deletedcontributions-contribs": "cuntribbuta",
-       "linksearch": "Risciduta dî culligamenti di fora",
+       "linksearch": "Risciduta dî lijami di fora",
        "linksearch-pat": "Esprissioni di risciduta:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Arriscedi",
        "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 culligamentu a' file ruttu (nu culligamentu a' 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 supra ê pàggini ntô riquatru dî culligamenti ê catigurìi comu mpustazzioni pridifinuta.",
+       "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.",
        "trackingcategories-nodesc": "Nudda discrizzioni dispunìbbili.",
        "trackingcategories-disabled": "Sta catigurìa è disattivata",
        "mailnologin": "Nuddu nnirizzu pi' mannari",
        "rollback-success": "Annullati li canciamenti di $1;\nsi turnau a' l'ùltima virsioni di $2.",
        "sessionfailure-title": "Erruri dâ sissioni",
        "sessionfailure": "Pari chi' cc'è quarchi' prubblema câ to sissioni di trasuta;\nst'azzioni fu' annullata comu pricauzzioni contra dû furtu di sissioni.\nTorna â pàggina pricidenti, ricàrricala e prova n'autra vota.",
+       "changecontentmodel": "Canciamentu dû mudellu dû cuntinutu di na pàggina",
+       "changecontentmodel-legend": "Canciamentu dû mudellu dû cuntinutu",
+       "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.",
+       "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»",
+       "logentry-contentmodel-change-revertlink": "annulla",
+       "logentry-contentmodel-change-revert": "annullamentu",
        "protectlogpage": "Riggistru dî prutizzioni",
        "protectlogtext": "Ccassutta c'è nu riggistru dî canciamenti â prutizzioni dî pàggini.\nVidi la [[Special:ProtectedPages|lista dî pàggini prutetti]] pi' canùsciri tutti i prutizzioni di pàggini chi' su' in viguri.",
        "protectedarticle": "prutiggìu [[$1]]",
        "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 un culligamentu sbagghiatu, o puru la virsioni hâ statu già ricupirata o livata di l'archiviu.",
+       "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.",
        "undelete-nodiff": "Nun fu attruvata nudda virsioni passata.",
        "undeletebtn": "Ricùpira",
        "undeletelink": "talìa/ricùpira",
        "nolinkshere-ns": "Nun ci sugnu pàggini chi puntano a '''[[:$1]]''' ntô namespace silizziunatu.",
        "isredirect": "pàggina di rinnirizzamentu",
        "istemplate": "trasclusioni",
-       "isimage": "culligamentu ô file",
+       "isimage": "lijami ô file",
        "whatlinkshere-prev": "{{PLURAL:$1|pricidenti|pricidenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|succissivu|succissivi $1}}",
        "whatlinkshere-links": "← liami",
        "whatlinkshere-hideredirs": "$1 li rimanni",
        "whatlinkshere-hidetrans": "$1 li trasclusioni",
-       "whatlinkshere-hidelinks": "$1 li culligamenti",
-       "whatlinkshere-hideimages": "$1 li culligamenti a' file",
+       "whatlinkshere-hidelinks": "$1 li lijami",
+       "whatlinkshere-hideimages": "$1 li lijami a' file",
        "whatlinkshere-filters": "Filtri",
        "autoblockid": "Bloccu autumàticu #$1",
        "block": "Bluccari a' n'utenti",
        "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 i furbanni e' i 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 un culligamentu, p'asempiu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p'espurtari \"[[{{MediaWiki:Mainpage}}]]\".",
+       "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}}]]\".",
        "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.",
        "importfailed": "Mpurtazzioni nun arrinisciuta: $1",
        "importunknownsource": "Tipu d'orìggini scanusciutu pi la mpurtazzioni",
        "importcantopen": "Mpussìbbili grapiri lu file di mpurtazzioni",
-       "importbadinterwiki": "Culligamentu inter-wiki erratu",
+       "importbadinterwiki": "Lijami inter-wiki erratu",
        "importsuccess": "Mpurtazzioni arrinisciuta.",
        "importnosources": "Nun hâ statu difinuta nudda wiki d'unni mpurtari e li carricamenti diretti dâ cronuluggìa sunnu disattivati.",
        "importnofile": "Nun hà statu carrcatu nuddu file pi la mpurtazzioni.",
        "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": "A pàggina \"$1\" nun fu' mpurtata picchì u so nomu è risirvatu pû culligamentu esternu (interwiki).",
+       "import-error-interwiki": "La pàggina \"$1\" nun fu' mpurtata picchì lu so 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-pt-logout": "Nisciuta",
        "tooltip-pt-createaccount": "Si' nvitatu a criari nu cuntu e tràsiri; però nun è obbligatoriu",
        "tooltip-ca-talk": "Vidi li discussioni rilativi a sta pàggina",
-       "tooltip-ca-edit": "Poi canciari sta pàggina. Pi favuri usa lu pulsanti d'antiprima prima di sarvari.",
+       "tooltip-ca-edit": "Cancia sta pàggina",
        "tooltip-ca-addsection": "Agghiunci un cummentu a sta discussioni.",
        "tooltip-ca-viewsource": "Sta pàggina è prutetta, ma poi vìdiri lu sò còdici surgenti.",
        "tooltip-ca-history": "Virsioni pricidenti di sta pàggina.",
        "spamprotectiontext": "La pàggina ca vulevi sarvari hà statu bluccata dû filtru anti-spam. Chistu è prubbabbirmenti duvutu â prisenza di nu liami a nu situ sternu bluccatu.",
        "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 culligamenti a $1",
-       "spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìanu culligamenti a $1",
-       "spam_deleting": "Pàggina cancillata, tutti li virsioni cuntinìunu culligamenti a' $1",
+       "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!",
        "pageinfo-title": "Nfurmazzioni supra a' \"$1\"",
        "pageinfo-not-current": "Sfurtunatamenti, nun è pussìbbili furnìri sti nfurmazzioni pî virsioni vecchî.",
        "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-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-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 *).\nLu primu culligamentu nta ogni' riga havi a' puntari ôn file nun addisiatu.\nSi' cci su' autri culligamenti nta 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\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.",
        "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 nu culligamentu a'",
+       "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 nu culligamentu cuntinenti un còdici;\ncàrrica ddu culligamentu cu lu to browser pi' cunfirmari ca lu to nnirizzu di posta elittrònica è vàlidu.",
+       "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_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,\nriggistrau 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 i funziunalità di posta elittronica supra a' {{SITENAME}},\napri stu culligamentu cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca stu culligamentu\npi' nigari a cunfirma dû nnirizzu di posta elittronica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
-       "confirmemail_body_changed": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\ncanciau 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 elittronica supra a' {{SITENAME}},\napri stu culligamentu cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca stu culligamentu\npi' nigari a 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,\nmpustau 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 i funziunalità di posta elittronica supra a' {{SITENAME}},\napri stu culligamentu cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca stu culligamentu\npi' nigari a 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,\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_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]",
        "version-libraries": "Libbrarìi installati",
        "version-libraries-library": "Libbrarìa",
        "version-libraries-version": "Virsioni",
+       "version-libraries-license": "Licenza",
+       "version-libraries-description": "Discrizzioni",
+       "version-libraries-authors": "Autura",
        "redirect": "Rimannu pi' nomu di file o còdici di utenti, di pàggina o di virsioni",
        "redirect-legend": "Rimannari a' nu file o na pàggina",
        "redirect-summary": "Sta pàggina spiciali rimanna a' nu file (datu u nomu dû file), a' na pàggina (datu n'ID di virsioni o n'ID di pàggina), o puru â pàggina di n'utenti (datu n'ID nummèricu di utenti). Esempî di usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "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 ammustratu sulu nu culligamentu 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. Lassa 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' 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>",
        "tags": "Etichetti dî canciamenti validi",
        "tag-filter": "Filtra pi' [[Special:Tags|etichetta]]",
        "tag-filter-submit": "Filtra",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "liniedda enni",
        "special-characters-title-emdash": "liniedda emmi",
-       "special-characters-title-minus": "signu menu"
+       "special-characters-title-minus": "signu menu",
+       "mw-widgets-titleinput-description-new-page": "sta pàggina ancora nun esisti",
+       "mw-widgets-titleinput-description-redirect": "rimannu a’ $1"
 }
diff --git a/languages/i18n/sdh.json b/languages/i18n/sdh.json
new file mode 100644 (file)
index 0000000..015e408
--- /dev/null
@@ -0,0 +1,629 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ashkan P.",
+                       "Calak",
+                       "Kurdbuddha",
+                       "Mjbmr",
+                       "Paraw2",
+                       "아라"
+               ]
+       },
+       "tog-numberheadings": "ژمارەکردنی خۆدکاری سەرتیترەکان",
+       "underline-always": "هەمیشە",
+       "underline-never": "هیچ وەخت",
+       "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": "دسامبر",
+       "pagecategories": "{{PLURAL:$1|پۆل|پۆلەگان}}",
+       "category_header": "پەڕەگان پۆل «$1»",
+       "subcategories": "ژێرپۆلەگان",
+       "category-media-header": "پەڕگەگان پۆل «$1»",
+       "category-empty": "''ئەی پۆلە ئێرەنگە ھۊچ پەڕە یا پەڕگەێگ لە خوەیا نیەگرێت.‌''",
+       "hidden-categories": "{{PLURAL:$1|پۆل شاریاێ}}",
+       "category-subcat-count": "{{PLURAL:$2|ئەی پۆلە تەنیا ژێرپۆل خوارەو لەتێیە.| ئەی پۆلە ئەی {{PLURAL:$1|ژێرپۆل|$1 ژێرپۆلەیل}} خوارەو لەتێیە، لە سەرجەم $2 گلە.}}",
+       "category-article-count": "{{PLURAL:$2|ئەی پۆلە تەنیا ئەی پەڕە لەخوەیگرتیە.|{{PLURAL:$1|پەڕە|$1 پەڕە}} لە ئەی پۆلە، لە سەرجەم $2 پەڕە ھەس.}}",
+       "category-file-count": "{{PLURAL:$2|ئەی پۆلە تەنیا ئەی پەڕە لەخوەیگرتیە.|{{PLURAL:$1|پەڕە|$1 پەڕە}} لە ئەی پۆلە، لە سەرجەم $2 پەڕە ھەس.}}",
+       "listingcontinuesabbrev": "(دریژە)",
+       "noindex-category": "پەڕە پێرستنەکریاێەگان",
+       "about": "دەربارە",
+       "newwindow": "(لە پەڕەێگ نوو واز کریەێد)",
+       "cancel": "لاوردن",
+       "moredotdotdot": "بیشتر",
+       "morenotlisted": "ئی لیستە تەواو نییە",
+       "mypage": "پەڕە",
+       "mytalk": "وەتوویش",
+       "navigation": "ڕێدەرکردن",
+       "qbfind": "پیا بکە",
+       "qbbrowse": "بگەرد",
+       "qbedit": "وێراشتە",
+       "qbpageoptions": "ئێ لاپەڕەیە",
+       "qbmyoptions": "پەڕەگانم",
+       "faq": "پرسیار و جواو (FAQ)",
+       "faqpage": "پرۆژە:پرسیار و جواو",
+       "actions": "کردارەگان",
+       "namespaces": "شوونناوەگان",
+       "variants": "شێوەزارەگان",
+       "errorpagetitle": "غەڵەت",
+       "returnto": "بەورەو ئڕاێ $1.",
+       "help": "یارمەتی",
+       "search": "مینە",
+       "searchbutton": "مینە",
+       "go": "بچوو",
+       "searcharticle": "بچوو",
+       "history": "دیروک پەڕە",
+       "history_short": "دیروک پەڕە",
+       "printableversion": "نسخەێ ئامادەێ چاپ",
+       "permalink": "بەسیار ھەمیشەیی",
+       "view": "دۊنن",
+       "edit": "وێراشتە",
+       "create": "درسکردن",
+       "delete": "لاوردن",
+       "protect": "بپیەرێزەێ",
+       "protect_change": "گووڕیان",
+       "newpage": "پەڕەێ نوو",
+       "talkpagelinktext": "وەتوویش",
+       "specialpage": "پەڕەێ تایوەت",
+       "personaltools": "ئامڕازە تاقەکەسیەگان",
+       "talk": "وەتوویش",
+       "views": "دۊننەگان",
+       "toolbox": "ئامڕازەگان",
+       "otherlanguages": "وە زوانەیل ترەک",
+       "redirectedfrom": "(ڕەوانەکریاێ لە $1)",
+       "lastmodifiedat": "ئەی پەڕە دۊاجار لە $2ی $1 نوو کریاس.",
+       "protectedpage": "پەڕەێ پاڕێزریا",
+       "jumpto": "واز بووە ئڕاێ:",
+       "jumptonavigation": "ڕێدەرکردن",
+       "jumptosearch": "مینە",
+       "aboutsite": "سەبارەت وە {{SITENAME}}",
+       "copyrightpage": "{{ns:project}}:مافەیل لەوەرگرتن",
+       "currentevents": "ڕووداوەیل ئێرەنگەیی",
+       "currentevents-url": "Project:ڕووداوەیل ئێرەنگەیی",
+       "disclaimers": "رەێکردن",
+       "disclaimerpage": "Project:رەێکردن گشتی",
+       "edithelp": "ڕێنوانی وێراشتەکردن",
+       "helppage-top-gethelp": "کۆمەک",
+       "mainpage": "دەسپێک",
+       "mainpage-description": "دەسپێک",
+       "policy-url": "پرۆژە:سیاسەت",
+       "portal": "دەرانەێ ئەوکاربەرەیل",
+       "portal-url": "Project:دەرانەێ ئەوکاربەرەیل",
+       "privacy": "سیاسەت ھەشاریەتی",
+       "privacypage": "Project:پیەرێزانن زانیاریەگان",
+       "ok": "باشە",
+       "retrievedfrom": "وەرگیریاێ لە «$1»",
+       "youhavenewmessages": "$1 دێڕی ($2).",
+       "editsection": "وێراشتە",
+       "editold": "وێراشتە",
+       "viewsourceold": "سەرچاوەگەێ بۊن",
+       "editlink": "وێراشتە",
+       "viewsourcelink": "سەرچاوەگەێ بۊن",
+       "editsectionhint": "وێراشتە کردن بەش: $1",
+       "toc": "ناوەرۆک",
+       "showtoc": "نیشانی بیە",
+       "collapsible-collapse": "جەمیەو کە",
+       "confirmable-yes": "بەڵێ",
+       "confirmable-no": "نە",
+       "feedlinks": "خۆراک:",
+       "site-atom-feed": "خواردەمەنی ئەتۆم ئڕاێ $1",
+       "page-atom-feed": "خواردەمەنی ئەتۆم ئڕاێ «$1»",
+       "red-link-title": "$1 (پەڕە بوون نەیرێد)",
+       "nstab-main": "پەڕە",
+       "nstab-user": "پەڕەێ ئەوکاربەر",
+       "nstab-special": "پەڕەێ تایوەت",
+       "nstab-project": "پەڕەێ پرۆژە",
+       "nstab-image": "پەڕگە",
+       "nstab-mediawiki": "پەیام",
+       "nstab-help": "پەڕەێ کۆمەک",
+       "nstab-category": "پول",
+       "missing-article": "دەیتابەیسەگە نەتۊەنست دەق پەڕەێگ وە ناو «$1» $2 پێیابکەێد ک ئەشێ پێیابکردیاتاد.\n\nئیە فرەتر لە مدووێ وەدۊاچین بەستیارێگ جیاواز یادیرۆک کۆنەێ پەڕەێگ سڕیاێ ڕوو دەێد.\n\nئەگەر لەێوا نیە، ئەوە گەھا گرفتێگ لەێ نەرمامێرە پێیاکردیەسە.\nتکایە ئیە وە ئاماژەدان وە ناونیشان URLـەگەیەو وە [[Special:ListUsers/sysop|وەڕێوەوەرێگ]] ڕاپۆرت بدە.",
+       "missingarticle-rev": "(نسخە#: $1)",
+       "badtitle": "ناونیشان خراو",
+       "badtitletext": "سەرناو پەڕەێ داخوازیاێ بەتاڵە، چووڵە یا سەرناوێگ نێوان-زوانی یا نێوان-ویکیئیە ک وە شێوەێگ ھەڵە بەسیار پی دەریاس.\nگەھا یەک یا چەند کاراکتر لەتێ بوود ک نیەکریەێد لە سەرناوەگان ئەوکار بوەێد.",
+       "viewsource": "سەرچاوەگەێ بۊن",
+       "yourname": "ناو ئەوکاربەری",
+       "userlogin-yourname": "ناو ئەوکاربەری",
+       "userlogin-yourname-ph": "ناو ئەوکاربەریت بنۊس",
+       "createacct-another-username-ph": "ناو ئەوکاربەریت بنۊس",
+       "yourpassword": "تێپەڕوشە",
+       "userlogin-yourpassword": "تێپەڕوشە",
+       "userlogin-yourpassword-ph": "تێپەڕوشەگەت بنۊس",
+       "createacct-yourpassword-ph": "تێپەڕوشەێگ بنۊس",
+       "yourpasswordagain": "دیسان تێپەڕوشەگە بنۊسەو:",
+       "remembermypassword": "تێپەروشەگەم لەسەر ئەی کامپیوترە پاشدەس بکە (ئەو پەڕی $1 {{PLURAL:$1|ڕووژ}}ە)",
+       "login": "بچووە ناو",
+       "nav-login-createaccount": "بچووە ناو / ھەژمار درس بکە",
+       "userlogin": "بچووە ناو / ھەژمار درس بکە",
+       "userloginnocreate": "بچووە ناو",
+       "logout": "بچووە دەیشت",
+       "userlogout": "بچووە دەرەو",
+       "nologin": "ھەژمار نەێری؟  $1.",
+       "nologinlink": "ھەژمارێگ درس بکە",
+       "createaccount": "ھەژمار درس بکە",
+       "gotaccount": "لێرە ھەژمار دێرید؟ $1.",
+       "gotaccountlink": "بچووە ناو",
+       "userlogin-resetlink": "وردەکاریەیل ناوچینت لە ھۊرەو بردیتە؟",
+       "createacct-emailrequired": "ناونیشان ئیمەیل",
+       "createaccountreason": "هووکار:",
+       "createacct-reason": "هووکار",
+       "nouserspecified": "بایەد ناو ئەوکاربەری دابین بکەی.",
+       "login-userblocked": "ئەێ ئەوکاربەرە بلاک کریاێە. چۊنە ناو قەدەغەنە.",
+       "mailmypassword": "تێپەڕوشەێگ نوو بنارە ئڕاێ ئیمەیلەگەم",
+       "accountcreated": "هەژمار درس کریا",
+       "loginlanguagelabel": "زوان: $1",
+       "pt-login": "بچووە ناو",
+       "pt-login-button": "بچووە ناو",
+       "oldpassword": "تێپەڕوشەێ قەدیمی:",
+       "newpassword": "تێپەڕوشەێ نوو:",
+       "retypenew": "تێپەڕوشەێ نوو دوبارە بنۊسەو:",
+       "passwordreset-username": "ناو ئەوکاربەری:",
+       "changeemail-none": "(هۊچ)",
+       "bold_sample": "دەق پڕرەنگ",
+       "bold_tip": "دەق پڕرەنگ",
+       "italic_sample": "دەق کەژ",
+       "italic_tip": "دەق کەژ",
+       "link_sample": "سەردێڕ بەسیار",
+       "link_tip": "بەسیار ناوخوەێ",
+       "extlink_sample": "http://www.example.com سەردێڕ بەسیار",
+       "extlink_tip": "بەسیار دەرەکی (لەھۊرت بوود نۊسین پێشگر http:// )",
+       "headline_sample": "دەق سەردێڕ",
+       "headline_tip": "سەردێڕ ئاست ۲",
+       "nowiki_sample": "لە ئیرە دەق نەڕازانیاێ تێ‌بخە",
+       "nowiki_tip": "لەوەرچاو نەگرتن داڕشانەگان ویکی",
+       "image_tip": "وێنەێ ناو دەق",
+       "media_tip": "بەسیار پەڕگە",
+       "sig_tip": "ئیمزاگەت وەرد مۆر ڕێکەفت",
+       "hr_tip": "هێڵ ئاسوویی (کەم ئەوکاری بوەین)",
+       "summary": "کورتەێ وێراشتە:",
+       "minoredit": "ئیە وێراشتەێگ بۊچگە",
+       "watchthis": "ئەی پەڕە بخە ژێر چاودێری",
+       "savearticle": "پەڕەگە پاشدەس بکە",
+       "preview": "پێشدۊنن",
+       "showpreview": "پێشدۊنن نیشان بدە",
+       "showdiff": "گووڕانکاریەگان نیشان بدە",
+       "anoneditwarning": "'''ھۆشیار بوو:''' نەچیتەسە ناو.\nناونیشان IP تۆ لە دیرۆک وێراشتەگان ئەی پەڕەیە تۆمار کریەێد.",
+       "newarticle": "(نوو)",
+       "newarticletext": "وە دۊاێ بەستیار پەڕەێگ کەفتیە کە ھێمان درس نەکریاس.\nئڕاێ درس کردن پەڕەگە، لە چوارچووەگەی خوارەو دەس بکە وە تایپ کردن. (ئڕاێ زانیاری فرەتر\n[$1 یارمەتی] بۊنە).\nئەگەر وە ھەڵە ھاتیدە ئێرە، لە سەر دوگمەێ '''back''' وێبگەڕەگەت کلیک بکە.",
+       "noarticletext": "ئێرەنگە ھۊچ دەقێگ لەی پەڕە نیە.\nتۊەنید ئڕاێ ئەی ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەگان ترەک مینە بکەید]]، <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە پێرستەگان مینە بکەید]، یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەی پەڕەیە وێراشتە بکەید]</span>.",
+       "noarticletext-nopermission": "ئێرەنگە ھۊچ دەقێگ لە ئەی پەڕەیە نیە.\nتۊەنی لە پەڕەگان تر [[Special:Search/{{PAGENAME}}|ئەڕاێ ئەی ناوە بگەڕی]]، یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەگان بگەڕی]</span>، وەڵێم نیەتۊەنی ئەی پەڕەیە درس بکەی.",
+       "updated": "(وەڕووژکریا)",
+       "previewnote": "'''لە ھۊرت نەچوود ئیە تەنیا پێشدۊننە.'''\nگووڕانکاریەگانت ھێمان پاشدەس نەکریانە!",
+       "editing": "وێراشتەکردن $1",
+       "editingsection": "وێراشتەکردن: $1 (بەش)",
+       "yourdiff": "جیاوازیەیل",
+       "templatesused": "ئەو {{PLURAL:$1|داڕێژە ک لە ئەی پەڕە ئەوکاربریاێە|داڕێژەیلە ک لە ئەی پەڕە ئەوکاربریانە}}:",
+       "template-protected": "(پیەرێزیاێ)",
+       "template-semiprotected": "(نیوەپیەرێزیاێ)",
+       "hiddencategories": "ئەی پەڕە ئەندام {{PLURAL:$1|١ پۆل شاریاێە|$1 پۆل شاریاێە}}:",
+       "permissionserrorstext-withaction": "لەسەر ئەی {{PLURAL:$1|مدوو|مدووەیل}} خوارەو، دەسەڵات نەێرید ئەڕاێ $2:",
+       "recreate-moveddeleted-warn": "'''ھووشیار بوو: لەپسا پەڕەێگ درس کەید ک لە پێشەو سڕیاێە.'''\n\nئیە لەوەر چاو بگرە کە وێراشتەکردن ئەی پەڕە وەقازاشتە یا نە.\nپێرست سڕاندن و جیوەجیکردن ئەی پەڕە ئڕاێ ئاسانی لێرە ھاتیە:",
+       "moveddeleted-notice": "ئەی پەڕەیە سڕیاێە.\nپێرست سڕاندن و جیوەجیکردن ئڕاێ پەڕەگە لە ژێرەو نیشان دەریاس.",
+       "content-model-wikitext": "ویکیدەق",
+       "content-model-text": "دەق ساکار",
+       "content-model-javascript": "جاڤاسکریپت",
+       "post-expand-template-inclusion-warning": "'''ئاگاداری:''' قەوارەێ داڕێژەگە فرە گەورەس.\nپوورێد بڕێگ لە داڕێژەگان لەخوەیەو نەگرێتەو.",
+       "post-expand-template-inclusion-category": "ئەو لاپەڕەیلە ک قەوارەێ داڕێژەێەیل تێان لە ھەد تێپەڕۊە",
+       "post-expand-template-argument-warning": "'''ئاگاداری:''' ئەی پەڕە لانکەم یەک داڕێژە لەتێیە کە قەوارەێ فرە گەورەس.<br />\nئەی وەڵگە (argument) ئەوکار نەخریاێە.",
+       "post-expand-template-argument-category": "ئەو پەڕەیلێگ ک داڕێژەێ ئەوکارنەخریاێ لەتێیانە",
+       "viewpagelogs": "لۆگەگان ئەی پەڕەیە بۊن",
+       "currentrev-asof": "دۊایین نسخە $1",
+       "revisionasof": "وازخوەنی نسخەێ $1",
+       "revision-info": "نسخەێ $1 لە لایەن $2",
+       "previousrevision": "→نسخەێ کۆنەتر",
+       "nextrevision": "نسخەێ نووتر←",
+       "currentrevisionlink": "نسخەێ ئێرەنگە",
+       "cur": "ئێرەنگە",
+       "next": "پاش",
+       "last": "پێشین",
+       "page_first": "یەکمین",
+       "page_last": "دۊایین",
+       "histlegend": "ھەڵوژانن جیاوازی: نسخەگان ئڕاێ ھەڵسەنگانین دیاری بکە و ئینتر یا دوگمەگەێ خوارەو بکوتە.<br />\nڕێنوانی: '''({{int:cur}})''' = جیاوازی وەگەرد دۊایین نسخە، '''({{int:last}})''' = جیاوازی وەگەرد نسخەێ پێشین، '''{{int:minoreditletter}}''' = وێراشتەێ بۊچگ.",
+       "history-fieldset-title": "گەشت دیرۆک",
+       "history-show-deleted": "تەنیا سڕیاێەگان",
+       "histfirst": "کۆنەترین",
+       "histlast": "نووترین",
+       "historyempty": "(پووچ)",
+       "rev-delundel": "نیشان بدە/بشارەو",
+       "revdelete-show-file-submit": "بەڵێ",
+       "revdel-restore": "دیمەنەگەێ بگووڕنە",
+       "mergehistory-reason": "هووکار:",
+       "revertmerge": "لەیەک جیاکردن",
+       "history-title": "دیرۆک وازخوانیەگان «$1»",
+       "lineno": "ھێڵ $1:",
+       "compareselectedversions": "نسخە ھەڵوژیاێەگان ھەڵبسەنگنە",
+       "editundo": "بەتاڵکردن",
+       "searchresults": "ئاکامەگان مینە",
+       "searchresults-title": "ئاکامەگان مینە ئڕاێ «$1»",
+       "prevn": "{{PLURAL:$1|$1}}ی پێشین",
+       "nextn": "{{PLURAL:$1|$1}} دۊاتر",
+       "prevn-title": "$1 {{PLURAL:$1|ئەنجام}} پێشین",
+       "nextn-title": "$1 {{PLURAL:$1|ئەنجام}} دۊاتر",
+       "shown-title": "لە هەر پەڕەێگ $1 {{PLURAL:$1|ئەنجام}} نیشان‌ بدە",
+       "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) بۊنە",
+       "searchmenu-exists": "'''پەڕەێگ وە ناو «[[:$1]]» لە ئەی ویکیە ھەس.'''",
+       "searchmenu-new": "'''لە ئەی ویکیە پەڕەێ « [[:$1]] » درس بکە!'''",
+       "searchprofile-articles": "پەڕەگان ناوەڕۆکی",
+       "searchprofile-images": "مالتیمیدیا",
+       "searchprofile-everything": "گشت چشت",
+       "searchprofile-advanced": "پێشکەفتێ",
+       "searchprofile-articles-tooltip": "مینە لە $1",
+       "searchprofile-images-tooltip": "مینە ئڕاێ پەڕگەگان",
+       "searchprofile-everything-tooltip": "لە گشت ناوەرۆکێگ مینە بکە (تەنانەت پەڕەگان وتوویشیش)",
+       "searchprofile-advanced-tooltip": "مینە لەناو شوونناوە دڵخوازەگان",
+       "search-redirect": "(ڕەوانەکەر $1)",
+       "search-section": "(بەش $1)",
+       "search-suggest": "ئایا مەبەستت ئیە بۊ: $1",
+       "search-interwiki-more": "(زوورم)",
+       "searchrelated": "پێوەس",
+       "searchall": "گشت",
+       "search-nonefound": "ھۊچ ئاکامێگ کە وە داواکاریەگەت بخوەێد پێیا نۊ.",
+       "powersearch-toggleall": "گشت",
+       "mypreferences": "ھەڵوژیاێەیل",
+       "prefs-skin": "پووستە",
+       "prefs-editing": "وێراشتەکردن",
+       "searchresultshead": "مینە",
+       "timezoneregion-africa": "ئافریقا",
+       "timezoneregion-america": "ئامریکا",
+       "timezoneregion-asia": "ئاسیا",
+       "timezoneregion-australia": "ئۆسترالیا",
+       "timezoneregion-europe": "ئورووپا",
+       "timezoneregion-indian": "ئوقیانووس هند",
+       "prefs-searchoptions": "جوورسن",
+       "youremail": "ئیمەیل",
+       "yourrealname": "ناو ڕاسەگانی:",
+       "yourlanguage": "زوان:",
+       "email": "ئیمەیل",
+       "prefs-help-email": "دانان ناونیشان ئیمەیل دڵخوازانەس، وەڵێم ئەگەر تێپەڕوشەگەت لە ھۊرتەو بچوود، ئەڕاێ نووکردن تێپەڕوشە ھەوەجە پی ھەس.",
+       "prefs-help-email-others": "ھەرلەێوا تۊەنی ھەڵوژانید ک ئەوکاربەرەیل تر، لە ڕێگەێ پەڕەێ ئەوکاربەریەگەت یا وەتوویشەگەت، بێ ئاشکراکردن کەسایەتیت، پێوەندی وەگەردت بگرن.\nئیمەیلەگەت تا کاتێگ ک کەسێگ وەگەردت پێوەندی بگرێد، ئاشکرا نیەود.",
+       "prefs-editor": "وێراشتەکەر",
+       "group-all": "(گشت)",
+       "right-read": "خوەنین پەڕەگان",
+       "right-edit": "وێراشتەکردن پەڕەگان",
+       "newuserlogpage": "پێرست درسکردن ئەوکاربەر",
+       "action-edit": "ئەی پەڕە وێراشتە بکە",
+       "nchanges": "$1 {{PLURAL:$1|گووڕانکاری}}",
+       "recentchanges": "دۊایین گووڕانکاریەیل",
+       "recentchanges-legend": "ھەڵوژیاێەگان دۊایین گووڕانکاریەگان",
+       "recentchanges-feed-description": "شوون دۊایین گووڕانکاریەگان ئەی ویکیە بگرە لە ئەی «خواردەمەنی»ەو.",
+       "recentchanges-label-newpage": "ئەی وێراشتەیە لاپەڕەێگ نوو درس کرد",
+       "recentchanges-label-minor": "ئییە وێراشتەێگ بۊچگە",
+       "recentchanges-label-bot": "ئەی وێراشتە لە لایەن بۆتێگ پێک هاتیە",
+       "recentchanges-label-unpatrolled": "ئەی وێراشتەیە ھێمان پاس نەدریاس",
+       "rcnotefrom": "لە خوارەو گووڕانکاریەگان لە '''$2'''ەو (تا '''$1''' نیشاندەریاس).",
+       "rclistfrom": "گووڕانکاریە نووەگان نیشان بدە وە دەسپێکردن لە $3 $2",
+       "rcshowhideminor": "وێراشتە بۊچگەیل $1",
+       "rcshowhidebots": "بۆتەگان $1",
+       "rcshowhideliu": "ئەوکاربەرە تۆمارکریاێەگان $1",
+       "rcshowhideanons": "ئەوکاربەرە نەناسیاوەگان $1",
+       "rcshowhidepatr": "وێراشتە نەگەردیاێەگان $1",
+       "rcshowhidemine": "وێراشتەگانم $1",
+       "rclinks": "دۊایین $1 گووڕانکاری $2 ڕووژ ویەردە نیشان بدە<br />$3",
+       "hist": "دیرۆک",
+       "hide": "بشارەو",
+       "minoreditletter": "بێجگە",
+       "rc-enhanced-expand": "وردەکاریەگان نیشان بدە",
+       "rc-enhanced-hide": "وردەکاریەگان بشارەو",
+       "recentchangeslinked": "گووڕانکاریە پەیوەندیدارەگان",
+       "recentchangeslinked-toolbox": "گووڕانکاری پەیوەندیدارەگان",
+       "recentchangeslinked-title": "گووڕانکاریە پەیوەندیدارەگان وە \"$1\" ـەو",
+       "recentchangeslinked-summary": "ئیە پێرستێگ لە گووڕانکاریەگان دۊایی لە ئەو پەڕەیلەسە ک بەسیار دێرن لە پەڕەێگ دیاریکریاێ (یا ئڕاێ ئەندامەگان پۆلێگ دیاریکریاێ)\nپەڕەگان [[Special:Watchlist|پێرست چاودێریەگەت]] '''پڕرەنگن'''.",
+       "recentchangeslinked-page": "ناو پەڕە:",
+       "recentchangeslinked-to": "وەجیگەێ ئەوە، گووڕانکاریەگان ئەو پەڕەیلە نیشان بدە ک بەسیار وە پەڕەی دیاریکریاێ دێرن.",
+       "upload": "پەڕگەێگ بار بکە",
+       "uploadlogpage": "پێرست بارکردن",
+       "filesource": "سەرچاوە:",
+       "license": "مۆڵەتناوە:",
+       "license-header": "مۆڵەتناوە",
+       "imgfile": "پەڕگە",
+       "listfiles": "پێرست پەڕگەیل",
+       "listfiles_name": "ناو",
+       "listfiles_user": "ئەوکاربەر",
+       "listfiles_count": "وەشانەیل",
+       "listfiles-latestversion-yes": "ئەرێ",
+       "listfiles-latestversion-no": "نە",
+       "file-anchor-link": "پەڕگە",
+       "filehist": "دیرۆک پەڕگە",
+       "filehist-help": "کرتە بکە لەسەر یەکێگ لە ڕێکەوت/کاتەگان ئڕاێ دۊنن پەڕگەگە وە ئەو شێوەێ لەو کاتە بۊە.",
+       "filehist-revert": "وەرۊپاش کردن",
+       "filehist-current": "دەق ئێرەنگەیی",
+       "filehist-datetime": "ڕێکەفت/سات",
+       "filehist-thumb": "بەن کلگی",
+       "filehist-thumbtext": "بەن کلگی ئڕاێ نسخەێ  $1",
+       "filehist-user": "ئەوکاربەر",
+       "filehist-dimensions": "ئەنازە",
+       "filehist-comment": "شرۆڤە",
+       "imagelinks": "ئەوکاربردن پەڕگە",
+       "linkstoimage": "لە ئەی {{PLURAL:$1|پەڕەێ خوارەو بەسیار دریانە|$1 پەڕەێ خوارەو بەسیار دریانە}} ئڕاێ ئەی پەڕگە:",
+       "nolinkstoimage": "‌لاپەڕەێگ نیە ک بەسیار وە ئەی پەڕگە بیاشتاد.",
+       "sharedupload-desc-here": "ئەی پەڕگە لە $1ەوەسە و پووڕێد لە پرۆژەگان دیگەیش ئەوکار بیاتاد.\nپێناسەگەێ لەسەر [$2 پەڕەێ شیەوکردن پەڕگەگە] لە خوارەو نیشان دریاس.",
+       "randompage": "پەڕەێگ وەناکاو",
+       "statistics": "ئامارەگان",
+       "statistics-pages": "پەڕەیل",
+       "pageswithprop-submit": "بچوو",
+       "brokenredirects-edit": "وێراشتە",
+       "prefixindex": "گشت پەڕەگان وە پێشگرەو",
+       "protectedpages-page": "پەڕە",
+       "protectedpages-unknown-timestamp": "نەناسریاێ",
+       "protectedpages-unknown-performer": "ئەوکاربەر نەناسریاێ",
+       "listusers": "پێرست ئەوکاربەرەیل",
+       "usercreated": "لە $1، $2 {{GENDER:$3|درس کریاس}}",
+       "newpages": "پەڕە نووەگان",
+       "newpages-username": "ناو ئەوکاربەری:",
+       "move": "جیوەجیکردن",
+       "pager-newer-n": "{{PLURAL:$1|یەکێگ نووتر|$1 نووتر}}",
+       "pager-older-n": "{{PLURAL:$1|یەکێگ کۆنەتر|$1ی کۆنەتر}}",
+       "booksources": "سەرچاوەگان کتاو",
+       "booksources-search-legend": "مینەێ سەرچاوەێ کتاو بکە",
+       "booksources-search": "گەردین",
+       "log": "لۆگەگان",
+       "allpages": "گشت پەڕەگان",
+       "allarticles": "گشت پەڕەگان",
+       "allpagessubmit": "بچوو",
+       "categories": "پۆلەگان",
+       "linksearch-ok": "مینە",
+       "linksearch-line": "$1 بەسیارپێ‌دەریاێە لە $2",
+       "listgrouprights-rights": "مافەیل",
+       "listgrouprights-members": "(پێرست ئەندامەگان)",
+       "trackingcategories-name": "ناو پەیام",
+       "emailuser": "ئیمەیل بنارە ئەڕاێ ئەی ئەوکاربەرە",
+       "emailusername": "ناو ئەوکاربەری:",
+       "emailmessage": "پەیام:",
+       "emailsend": "کل بکە",
+       "watchlist": "پێرست چاودێری",
+       "mywatchlist": "پێرست چاودێری",
+       "watchlistfor2": "ئڕاێ $1 $2",
+       "unwatch": "لاوردن چاودێری",
+       "watchlist-details": "بێجگە پەڕەگان وەتوویش، {{PLURAL:$1|$1 پەڕە}} لە پێرست چاودێریەگەتە.",
+       "wlshowlast": "دۊایین $1 دەمژمار $2 ڕووژ  نیشان بدە",
+       "watchlist-options": "ھەڵوژیاێەگان پێرست چاودێری",
+       "actioncomplete": "کردارەگە وە ئەنجام رەسی",
+       "actionfailed": "کردارەگە سەرنەکەفت",
+       "dellogpage": "پێرست لاوردنەگان",
+       "rollbacklink": "گەڕانن",
+       "protectlogpage": "پێرست پیەرێزکردن",
+       "protectedarticle": "«[[$1]]» پیەرێزان",
+       "restriction-edit": "وێراشتە",
+       "undeletelink": "بۊنە/بارەوەێ",
+       "undeleteviewlink": "دۊنن",
+       "undelete-search-submit": "مینە",
+       "undelete-show-file-submit": "بەڵێ",
+       "namespace": "شوونناوەگان",
+       "invert": "ھەڵوژیاێەگان وەزێزەو بکە",
+       "contributions": "بەشدارییەگان {{GENDER:$1|ئەوکاربەر}}",
+       "contributions-title": "بەشداریەگان ئەوکاربەر $1",
+       "mycontris": "بەشداریەیل",
+       "contribsub2": "ئڕاێ {{GENDER:$3|$1}} ($2)",
+       "uctop": "(ئێرەنگە)",
+       "month": "لە مانگ (و پێشتر لەوە):",
+       "year": "لە ساڵ (و پێشتر لەوە):",
+       "sp-contributions-newbies": "تەنیا بەشداریەگان ئەوکاربەرە تازەگان نیشان بدە",
+       "sp-contributions-blocklog": "پێرست بەساێن",
+       "sp-contributions-uploads": "بارکردنەگان",
+       "sp-contributions-logs": "پێرستەگان",
+       "sp-contributions-talk": "وەتوویش",
+       "sp-contributions-search": "مینە کردن ئڕاێ بەشداریەگان",
+       "sp-contributions-username": "ناونیشان ئایپی (IP) یا ناو ئەوکاربەری:",
+       "sp-contributions-toponly": "تەنیا ئەو وێراشتەیلە نیشانبدە ک دۊایین نسخەن",
+       "sp-contributions-submit": "مینە بکە",
+       "whatlinkshere": "بەسیارەگان وە ئێرە",
+       "whatlinkshere-title": "ئەو پەڕەیلە ک وە «$1» بەسیار دێرن",
+       "whatlinkshere-page": "پەڕە:",
+       "linkshere": "ئەی پەڕەیلە بەستیار دێرن وە '''[[:$1]]''':",
+       "nolinkshere": "هۊچ لاپەڕەێگ بەسیار وە '''[[:$1]]''' نەێرێد .",
+       "isredirect": "پەڕەێ ڕەوانەکەر",
+       "istemplate": "ناوتەپیاێەگان (transclusions)",
+       "isimage": "بەسیار پەڕگە",
+       "whatlinkshere-prev": "{{PLURAL:$1|پێشتر|$1 پێشتر}}",
+       "whatlinkshere-next": "{{PLURAL:$1|دیگە|$1 تر}}",
+       "whatlinkshere-links": "← بەسیارەگان",
+       "whatlinkshere-hideredirs": "ڕەوانەکەرەگان $1",
+       "whatlinkshere-hidetrans": "$1 ناوتەپیاێەگان (transclusions)",
+       "whatlinkshere-hidelinks": "$1 بەسیار",
+       "whatlinkshere-hideimages": "$1 بەسیارەگان پەڕگە",
+       "whatlinkshere-filters": "پاڵووینکەرەگان",
+       "ipboptions": "٢ دەمژمار:2 hours,١ رووژ:1 day,٣ رووژ:3 days,١ ھەفتە:1 week,٢ ھەفتە:2 weeks,١ مانگ:1 month,٣ مانگ:3 months,٦ مانگ:6 months,١ ساڵ:1 year,بێ‌سنوور:infinite",
+       "ipblocklist": "ئەوکاربەرە بەسریاێەگان",
+       "ipblocklist-submit": "مینە",
+       "blocklink": "بەسان",
+       "unblocklink": "بەسان لاوە",
+       "change-blocklink": "بەسان بگووڕنەو",
+       "contribslink": "بەشداریەیل",
+       "blocklogpage": "پێرست بەساێن",
+       "blocklogentry": "[[$1]] ئڕاێ ماوەێ $2 بەسان $3",
+       "block-log-flags-nocreate": "درسکردن ھەژمار ناچالاک کریا",
+       "movelogpage": "پێرست جیوەجیکردن",
+       "revertmove": "وەرۊپاش کردن",
+       "export": "ھەناردن پەڕەگان",
+       "allmessagesname": "ناو",
+       "allmessagesdefault": "دەق بنەڕەتی (Default)",
+       "allmessages-filter-all": "گشت",
+       "allmessages-language": "زوان",
+       "allmessages-filter-submit": "بچوو",
+       "allmessages-filter-translate": "ھەڵگەردانن",
+       "thumbnail-more": "گەورەکردن",
+       "thumbnail_error": "هەڵە لە کات درست‌کردن بەن کلگی: $1",
+       "tooltip-pt-userpage": "پەڕەێ ئەوکاربەریەگەت",
+       "tooltip-pt-mytalk": "پەڕەێ وەتوویشەگەت",
+       "tooltip-pt-preferences": "ھەڵوژیاێەیلت",
+       "tooltip-pt-watchlist": "پێرست ئەو پەڕەیل ک چاودێری لە گووڕانکاریەگانیان کەید",
+       "tooltip-pt-mycontris": "پێرست بەشداریەیلت",
+       "tooltip-pt-login": "پێشنیار ئەوپیت کریەێد بچیدە ناو؛ ھەرچەن زووری نیە",
+       "tooltip-pt-logout": "دەرچین",
+       "tooltip-ca-talk": "وەتوویش سەبارەت وە ناوەڕۆک پەڕە",
+       "tooltip-ca-edit": "تۊەنی وێراشتەێ ئەی پەڕەیە بکەید. تکایە وەر لە پاشدەسکردن دوگمەێ پێشدۊنن ئەوکاربوەێن.",
+       "tooltip-ca-addsection": "بەشێگ نوو دەس پی بکە",
+       "tooltip-ca-viewsource": "ئەی پەڕە پیەرێزیاێە.\nتۊەنی سەرچاوەگەێ بۊنید",
+       "tooltip-ca-history": "نسخەگان پێشین ئەی پەڕە",
+       "tooltip-ca-protect": "ئەی پەڕە بپارێزەو",
+       "tooltip-ca-delete": "ئەی پەڕەیە بسڕەو",
+       "tooltip-ca-move": "ئەی پەڕە جیوەجی بکە",
+       "tooltip-ca-watch": "ئەی پەڕە بخە سەر پێرست چاودێریت",
+       "tooltip-ca-unwatch": "ئەی پەڕە لە پێرست چاودێریەگەت لابدە",
+       "tooltip-search": "لە {{SITENAME}} مینە بکە",
+       "tooltip-search-go": "ئەگەر پووڕێد بچوو پەڕەێگ ک وە تەواوی ئەی ناوە بیاشتاد",
+       "tooltip-search-fulltext": "لە پەڕەگان مینە بکە ئڕا ئەی دەقە",
+       "tooltip-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": "خواردەمەنی ئەتۆم ئڕاێ ئەی پەڕە",
+       "tooltip-t-contributions": "پێرست بەشداریەگان ئەی ئەوکاربەر",
+       "tooltip-t-emailuser": "ئیمەیلێگ بنارە ئڕاێ ئەی ئەوکاربەرە",
+       "tooltip-t-specialpages": "پێرست گشت پەڕە تایوەتەگان",
+       "tooltip-t-print": "نسخەێ چاپی ئەی پەڕە",
+       "tooltip-t-permalink": "بەسیار ھەمیشەیی وە ئەی وەشان لە ئەی پەڕە",
+       "tooltip-ca-nstab-main": "دۊنن پەڕەێ ناوەڕۆک",
+       "tooltip-ca-nstab-user": "پەڕەێ ئەوکاربەر تەماشا بکە",
+       "tooltip-ca-nstab-special": "ئیە پەڕەێگ تایبەتە، نیەتۊەنی خوەێ ئەی پەڕە وێراشتە بکەید",
+       "tooltip-ca-nstab-project": "دۊنن پەڕەێ پرۆژە",
+       "tooltip-ca-nstab-image": "دۊنن پەڕەێ پەڕگە",
+       "tooltip-ca-nstab-template": "دۊنن قاڵبەگە",
+       "tooltip-ca-nstab-category": "پەڕەێ پۆلەگە بۊن",
+       "tooltip-minoredit": "ئیە وەک گووڕانکاریەێگ بۊچگ دیاریەو بکە",
+       "tooltip-save": "گووڕانکاریەگان خوەت پاشدەس بکە",
+       "tooltip-preview": "پێشدۊنن گووڕانکاریەگان، تکایە پێش لە پاشدەس کردن، ئیە ئەوکار بوەین.",
+       "tooltip-diff": "نیشاندان گووڕانکارییەگانت لە دەقەگە",
+       "tooltip-compareselectedversions": "جیاوازیەگان دو دەق دیاریکریاێەگەێ ئەی پەڕە بۊنە.",
+       "tooltip-watch": "ئەی پەڕە بخە سەر پێرست چاودێریت",
+       "tooltip-upload": "دەسکردن وە بارکردن",
+       "tooltip-rollback": "«گەڕانن» گووڕانکاری/گووڕانکاریەگان ئەی پەڕە وە یەک کرتە گەڕانێدەو ئڕاێ دۊایین بەشداریکەر",
+       "tooltip-undo": "«بەتاڵکردن» ئەی گووڕانکاریە گووڕنێدەو و فۆرم وێراشتەکردن لە شێوەی پێشدۊنن وازەو کەێد. ئەی جوورە پووڕێد مدووێگ لە کورتەێ وێراشتە بنۊسریەێد.",
+       "tooltip-summary": "کۆرتەێگ لە لی بنۊسە",
+       "pageinfo-redirectsto-info": "زانیاری",
+       "pageinfo-contentpage-yes": "بەڵێ",
+       "pageinfo-protect-cascading-yes": "بەڵێ",
+       "previousdiff": "→ گووڕانکاری کۆنەتر",
+       "nextdiff": "گووڕانکاری نووتر ←",
+       "file-info-size": "$1 × $2 پیکسێل، قەوارەێ پەڕگە: $3، جوور MIME: $4",
+       "file-nohires": "رەزۆلوشن سەرتر لەیە لە وەردەستەو نیە.",
+       "svg-long-desc": "پەڕگەێ SVG، وە ناو $1 × $2 پیکسڵ، قەوارەێ پەڕگە: $3",
+       "show-big-image": "پەڕگەێ رەسەن",
+       "ilsubmit": "مینە",
+       "bad_image_list": "فۆرمەت وە شێوەێ خوارەسە:\n\nتەنیا ئەو باوەتەیلە ک پێرست کریانە (واتە ئەو ھێڵەیلە ک وە * دەس پێ کەن) لە وەر چاون.\nیەکەم بەسیار لە سەر ھەر ھێڵێگ، ئەشێ بەسیار فایلێگ خراو بوود.\nگشت بەسیارەگان دۊاێ ئەوە لە ئەو ھێڵە، چۊ نائاسایی(ئستسنا) تیەنە ئەژمار.",
+       "metadata": "متادەیتا",
+       "metadata-help": "ئەی پەڕگە زانیاری فرەێگ لەتێیە، ک گەھا دۊردۊن (camera) یا ئسکەنێر (scanner) خستۊە سەری. ئەگەر پەڕگەگە لە حاڵەتە سەرەتاییەگەیەو دەسکاری کریاۊد، گاھەس بڕێگ لە وردەکاریەیل، زانیارەگان وێنە گووڕیاێەگە وە تەواوی نیشان نەدەن.",
+       "metadata-fields": "کاڵگەگان (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-imagedescription": "ناونیشان وێنە",
+       "exif-pixelxdimension": "بەرزی وێنە",
+       "exif-flash": "فلەش",
+       "exif-keywords": "کلیل‌وشەیل",
+       "exif-writer": "نۊسەر",
+       "exif-languagecode": "زوان",
+       "exif-nickname": "ناو غەیرڕەسمی وێنەگە",
+       "exif-lightsource-0": "نەناسریاێ",
+       "exif-lightsource-4": "فلەش",
+       "exif-focalplaneresolutionunit-2": "ئینچ",
+       "exif-contrast-1": "نەرم",
+       "exif-contrast-2": "ڕەق",
+       "exif-sharpness-1": "نەرم",
+       "exif-sharpness-2": "ڕەق",
+       "exif-subjectdistancerange-0": "نەناسریاێ",
+       "exif-gpsdestdistance-m": "مایل",
+       "exif-dc-rights": "مافەیل",
+       "exif-iimcategory-hth": "تەندروسی",
+       "exif-iimcategory-lab": "کارگەری",
+       "exif-iimcategory-pol": "ڕامیاری",
+       "exif-iimcategory-rel": "دین و باوەڕ",
+       "exif-iimcategory-sci": "زانست و تێکنۆلۆژی",
+       "exif-iimcategory-spo": "وەرزش",
+       "exif-iimcategory-wea": "ئاو و هەوا",
+       "namespacesall": "گشت",
+       "monthsall": "گشت",
+       "confirm_purge_button": "باشە",
+       "confirm-watch-button": "باشە",
+       "confirm-unwatch-button": "باشە",
+       "semicolon-separator": "؛&#32;",
+       "imgmultigo": "بچوو!",
+       "img-lang-go": "بچوو",
+       "table_pager_limit_submit": "بچوو",
+       "watchlisttools-view": "گووڕانکاریە پەیوەندیدارەگان بۊنە",
+       "watchlisttools-edit": "پێرست چاودێری بۊنە و وێراشتەێ بکە",
+       "watchlisttools-raw": "پێرست خام چاودێریەگان وێراشتە بکە",
+       "duplicate-defaultsort": "'''ئاگاداری''' کلیل بنەڕەتی \"$2''، کلیل بنەڕەتی \"$1\" بەتاڵ کەێد.",
+       "version": "وەشان",
+       "version-skin-colheader-name": "پووستە",
+       "version-ext-colheader-credits": "نۊسەرەیل",
+       "version-software-version": "وەشان",
+       "fileduplicatesearch-submit": "مینەکردن",
+       "specialpages": "پەڕە تایوەتەگان",
+       "external_image_whitelist": " #ئەی ھێڵە ھەر وە ئەی جوورە ک ھەس، وەر بدەین<pre>\n#رستە وەنەزمەگان (regular expression) (تەنیا ئەو بەشە کە لە نێوان // جێ گرێد) لە خوارەو بنەین\n#ئیانە وەرد نیشانی ئینترنتی وێنەیل دەرەکی بەسیار دریای (hotlinked) چەترگیەن (تەتبیق دریەن).\n#ئەوانە ک چەترگیانە، چۊ وێنە نیشان دریەن؛ وەگەرنە تەنیا بەسیارێگ وە وێنە نیشان دەریەێد.\n#ئەو ھێڵەیلە وە # دەس پێ کەن، جوور شرۆڤە (comments) گیریەنە وەر چەو\n#ئەی ھێڵەیلە وە گەورە و بۊچگی پیتەگان ھەستیارە (case-insensitive)\n\n#گشت رستە وەنەزمەگان (regex) لە ژۊەر ئەی ھێڵە بنەین. ئەی ھێڵ ھەر وە ئەی جوورە کە ھەس، وەر بدەین</pre>",
+       "tag-filter": "پاڵووین [[Special:Tags|تاگ]]:",
+       "tags-active-yes": "بەڵێ",
+       "tags-active-no": "نە",
+       "tags-edit": "وێراشتە",
+       "htmlform-no": "نە",
+       "htmlform-yes": "بەڵێ",
+       "feedback-message": "پەیام:",
+       "searchsuggest-search": "مینە",
+       "expand_templates_ok": "باشە",
+       "pagelang-name": "پەڕە",
+       "pagelang-language": "زوان",
+       "special-characters-group-latin": "لاتین",
+       "special-characters-group-greek": "یوونانی",
+       "special-characters-group-cyrillic": "سیریلیک",
+       "special-characters-group-arabic": "عەرەبی",
+       "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": "کمێر"
+}
index 6dfc6f8..728e19b 100644 (file)
@@ -8,7 +8,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Milicevic01",
-                       "Macofe"
+                       "Macofe",
+                       "KWiki"
                ]
        },
        "tog-underline": "Podvuci linkove:",
        "passwordreset": "Ponovno postavi lozinku",
        "passwordreset-text-one": "Dovršite ovaj obrazac kako biste resetirali svoju lozinku/zaporku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako bi ste resetirali svoju lozinku/zaporku.}}",
-       "passwordreset-legend": "Ponovno postavi lozinku",
        "passwordreset-disabled": "Ponovno postavljanje lozinke je onemogućeno na ovom wikiju.",
        "passwordreset-emaildisabled": "Postavke E-maila su deaktivirane na ovoj wiki.",
        "passwordreset-username": "Korisničko ime:",
        "resettokens": "Resetirajte tokene",
        "resettokens-text": "Možete resetirati tokene koji dozvoljavaju pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTo možete učiniti ako ste ih slučajno podijelili sa nekim ili ako je vaš račun kompromitiran.",
        "resettokens-no-tokens": "Nema tokena za resetiranje.",
-       "resettokens-legend": "Resetiranje tokena",
        "resettokens-tokens": "Tokeni:",
        "resettokens-token-label": "$1 (trenutna vrijednost: $2)",
        "resettokens-watchlist-token": "Token za web feed (Atom/RSS) [[Special:Watchlist|promjena za vašem spisku praćenja]]",
        "nmembers": "$1 {{PLURAL:$1|član|članova}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|član|članova}}",
        "nrevisions": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
-       "nviews": "$1 {{PLURAL:$1|pregled|pregleda}}",
        "nimagelinks": "Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "ntransclusions": "koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "specialpage-empty": "Ne postoje rezultati za ovaj izvještaj.",
        "movepage-moved-noredirect": "Pravljenje preusmjerenja je onemogućeno.",
        "articleexists": "Stranica pod tim imenom već postoji, ili je ime koje ste izabrali neispravno.\nMolimo Vas da izaberete drugo ime.",
        "cantmove-titleprotected": "Ne možete premjestiti stranicu na ovu lokaciju, jer je novi naslov zaštićen od pravljenja",
-       "movetalk": "Premjesti i stranicu za diskusiju zajedno sa člankom (ukoliko nije prazna).",
+       "movetalk": "Premjesti i stranicu za diskusiju zajedno sa člankom (ako nije prazna).",
        "move-subpages": "Premjesti sve podstranice (do $1)",
        "move-talk-subpages": "Premjesti podstranice stranica za razgovor (do $1)",
        "movepage-page-exists": "Stranica $1 već postoji i ne može biti automatski zamijenjena.",
index 971e8d4..327f92e 100644 (file)
        "thursday": "බ්‍රහස්පතින්දා",
        "friday": "සිකුරාදා",
        "saturday": "සෙනසුරාදා",
-       "sun": "ඉරි:",
-       "mon": "සඳු:",
-       "tue": "අඟ:",
-       "wed": "බදා:",
+       "sun": "ඉරිදා",
+       "mon": "සඳුදා",
+       "tue": "අඟ",
+       "wed": "බදාදා",
        "thu": "බ්‍රහ:",
        "fri": "සිකු:",
        "sat": "සෙන:",
        "july": "ජූලි",
        "august": "අගෝස්තු",
        "september": "සැප්තැම්බර්",
-       "october": "à¶\94à¶\9aà·\8aතà·\9cමà·\8aබර්",
+       "october": "à¶\94à¶\9aà·\8aතà·\9dබර්",
        "november": "නොවැම්බර්",
        "december": "දෙසැම්බර්",
        "january-gen": "ජනවාරි",
        "december-gen": "දෙසැම්බර්",
        "jan": "ජන",
        "feb": "පෙබ",
-       "mar": "මාර්",
+       "mar": "මාර්තු",
        "apr": "අප්‍රේ",
        "may": "මැයි",
        "jun": "ජූනි",
        "pagecategories": "{{PLURAL:$1|ප්‍රවර්ගය|ප්‍රවර්ග}}",
        "category_header": "\"$1\" ප්‍රවර්ගයට අයත් පිටු",
        "subcategories": "උපප්‍රවර්ග",
-       "category-media-header": "\"$1\" à¶´à·\8aâ\80\8dරà·\80රà·\8aà¶\9cයට à¶\85යතà·\8a මාධ්‍ය",
+       "category-media-header": "\"$1\" à¶´à·\8aâ\80\8dරà·\80රà·\8aà¶\9cයà·\9a à¶\87තà·\92 මාධ්‍ය",
        "category-empty": "''දැනට මෙම ප්‍රවර්ගය පිටු හෝ මාධ්‍ය හෝ නොදරයි.''",
        "hidden-categories": "{{PLURAL:$1|සැඟවුනු ප්‍රවර්ගය|සැඟවුනු ප්‍රවර්ග}}",
        "hidden-category-category": "සැඟවුනු ප්‍රවර්ග",
        "about": "පිළිබඳ",
        "article": "පටුන",
        "newwindow": "(නව කවුළුවක විවෘතවේ)",
-       "cancel": "අත් හරින්න",
+       "cancel": "අත්හරින්න",
        "moredotdotdot": "තවත්...",
        "morenotlisted": "තවත් දේ ලැයිස්තුගත කොට නොමැත...",
        "mypage": "පිටුව",
        "print": "මුද්‍රණය කරන්න",
        "view": "දසුන",
        "view-foreign": "$1 බලන්න",
-       "edit": "සංස්කරණය",
+       "edit": "සංස්කරණය කරන්න",
        "edit-local": "ස්ථානික විස්තරය සංස්කරනය කරන්න",
        "create": "තනන්න",
        "create-local": "ස්ථානීය විස්තරයක් එක් කරන්න",
        "personaltools": "පුද්ගලික මෙවලම්",
        "articlepage": "අන්තර්ගත පිටුව නරඹන්න",
        "talk": "සාකච්ඡාව",
-       "views": "දà·\98à·\82à·\8aටà·\92",
+       "views": "දà·\83à·\94නà·\8a",
        "toolbox": "මෙවලම්",
        "userpage": "පරිශීලක පිටුව නරඹන්න",
        "projectpage": "ව්‍යාපෘති පිටුව නරඹන්න",
        "otherlanguages": "වෙනත් භාෂා වලින්",
        "redirectedfrom": "($1 වෙතින් යළි-යොමු කරන ලදි)",
        "redirectpagesub": "පිටුව යළි-යොමු කරන්න",
-       "redirectto": "යළියොමුව:",
+       "redirectto": "à·\80à·\99ත à¶ºà·\85à·\92යà·\9cමà·\94à·\80:",
        "lastmodifiedat": "මෙම පිටුව අවසන් වරට වෙනස් කරන ලද්දේ $1 දිනදී, $2 වේලාවෙහිදීය.",
        "viewcount": "මෙම පිටුවට {{PLURAL:$1|එක් වරක්|$1 වරක්}} පිවිස ඇත.",
        "protectedpage": "ආරක්ෂිත පිටුව",
        "aboutsite": "{{SITENAME}} පිළිබඳ",
        "aboutpage": "Project:පිළිබඳ",
        "copyright": " අන්ලෙසකින් සඳහන්කර නැති සෑම විටෙකම අන්තර්ගතය $1 යටතේ ඇත.",
-       "copyrightpage": "{{ns:project}}:à¶\9aරà·\8aතà·\98-හිමිකම්",
+       "copyrightpage": "{{ns:project}}:පà·\8aâ\80\8dරà¶\9aà·\8fà·\81න හිමිකම්",
        "currentevents": "කාලීන සිදුවීම්",
        "currentevents-url": "Project:කාලීන සිදුවීම්",
        "disclaimers": "වියාචනයන්",
        "disclaimerpage": "Project:පොදු වියාචන",
-       "edithelp": "සංස්කරණ උදවු",
+       "edithelp": "සංස්කරණයට උදවු",
        "helppage-top-gethelp": "උදව්",
        "mainpage": "මුල් පිටුව",
        "mainpage-description": "මුල් පිටුව",
        "newmessageslinkplural": "{{PLURAL:$1|නව පණිවුඩයක්|999=nනව පණිවුඩ}}",
        "newmessagesdifflinkplural": "අවසන් {{PLURAL:$1|වෙනස්වීම|999=වෙනස්වීම්}}",
        "youhavenewmessagesmulti": "ඔබ හට $1 හි නව පණිවුඩ ඇත",
-       "editsection": "සංස්කරණය",
+       "editsection": "සංස්කරණය කරන්න",
        "editold": "සංස්කරණය",
        "viewsourceold": "මූලාශ්‍රය නරඹන්න",
        "editlink": "සංස්කරණය",
        "feed-invalid": "දායකත්ව පෝෂකයෙහි ශෛලිය අනීතිකය.",
        "feed-unavailable": "සමග්‍රහ පෝෂකයන් නොමැත",
        "site-rss-feed": "$1 RSS පෝෂකය",
-       "site-atom-feed": "$1 අටොම් පෝෂකය",
+       "site-atom-feed": "$1 Atom පෝෂකය",
        "page-rss-feed": "\"$1\" ආර්එස්එස් පෝෂකය",
-       "page-atom-feed": "\"$1\" අටොම් පෝෂකය",
+       "page-atom-feed": "\"$1\" Atom පෝෂකය",
        "feed-atom": "Atom",
        "feed-rss": "RSS",
        "red-link-title": "$1 (පිටුව නොපවතියි)",
        "welcomeuser": "ආයුබෝවන්, $1!",
        "welcomecreation-msg": "ඔබගේ ගිණුම තනා ඇත.\nඔබගේ [[Special:Preferences|{{SITENAME}} අභිරුචීන්]] නෙස් කිරීමට අමතක නොකරන්න.",
        "yourname": "පරිශීලක නාමය:",
-       "userlogin-yourname": "පරà·\92à·\81à·\93ලà¶\9a à¶±à¶¸",
-       "userlogin-yourname-ph": "à¶\94බà¶\9cà·\9a à¶´à¶»à·\92à·\81à·\93ලà¶\9a à¶±à¶¸ ඇතුළු කරන්න",
+       "userlogin-yourname": "පරà·\92à·\81à·\93ලà¶\9a à¶±à·\8fමය",
+       "userlogin-yourname-ph": "à¶\94බà¶\9cà·\9a à¶´à¶»à·\92à·\81à·\93ලà¶\9a à¶±à·\8fමය ඇතුළු කරන්න",
        "createacct-another-username-ph": "ඔබගේ පරිශීලක නම ඇතුළු කරන්න",
        "yourpassword": "මුරපදය:",
-       "userlogin-yourpassword": "මුර පදය",
-       "userlogin-yourpassword-ph": "ඔබගේ මුර පදය ඇතුළු කරන්න",
-       "createacct-yourpassword-ph": "මුර පදයක් ඇතුළු කරන්න",
+       "userlogin-yourpassword": "මුරපදය",
+       "userlogin-yourpassword-ph": "ඔබගේ මුරපදය ඇතුළු කරන්න",
+       "createacct-yourpassword-ph": "මුරපදයක් ඇතුළු කරන්න",
        "yourpasswordagain": "මුරපදය යළි ඇතුළු කරන්න:",
-       "createacct-yourpasswordagain": "මුර පදය සනාථ කරන්න",
-       "createacct-yourpasswordagain-ph": "මුර පදය යළි ඇතුළු කරන්න",
+       "createacct-yourpasswordagain": "මුරපදය සනාථ කරන්න",
+       "createacct-yourpasswordagain-ph": "මුරපදය යළි ඇතුළු කරන්න",
        "remembermypassword": "මාගේ පිවිසීම මෙම ගවේෂක මතකයෙහි (උපරිම ලෙස {{PLURAL:$1|දින|දින}}) $1 ක් මතක තබාගන්න",
-       "userlogin-remembermypassword": "මà·\8f à¶´à·\8aâ\80\8dරà·\80à·\92à·\82à·\8aටයà·\99à·\84à·\92 තබන්න",
+       "userlogin-remembermypassword": "මà·\8f à¶´à·\8aâ\80\8dරà·\80à·\92à·\83à·\93මà·\8a à¶­à¶­à·\8aà·\80යà·\9aම තබන්න",
        "userlogin-signwithsecure": "ආරක්‍ෂිත සබඳතාව භාවිතා කරන්න",
        "yourdomainname": "ඔබගේ වසම:",
        "password-change-forbidden": "ඔබට මෙම විකියෙහි මුරපද වෙනස් කල නොහැක.",
        "gotaccountlink": "පිවිසෙන්න",
        "userlogin-resetlink": "ඔබේ පිවිසුම් තොරතුරු අමතකද?",
        "userlogin-resetpassword-link": "ඔබේ මුරපදය නැති වුනාද?",
-       "userlogin-helplink2": "à¶\9cà·\92ණà·\94ම à·\80à·\99ත à¶´à·\8aâ\80\8dරà·\80à·\9aà·\81 à·\80ීම සඳහා උදවු",
+       "userlogin-helplink2": "à¶\9cà·\92ණà·\94ම à·\80à·\99ත à¶´à·\92à·\80à·\92à·\83ීම සඳහා උදවු",
        "userlogin-loggedin": "ඔබ දැනටමත් {{GENDER:$1|}} ලෙස පිවිසී ඇත.\nනව පරිශීලකයෙකු ලෙස ඇතුළු වීමට පහත ආකෘතිය පුරවන්න.",
        "userlogin-createanother": "තවත් ගිණුමක් ආරම්භ කරන්න",
        "createacct-emailrequired": "වි-තැපෑල ලිපිනය",
-       "createacct-emailoptional": "වි-තැපෑල ලිපිනය (විකල්ප)",
-       "createacct-email-ph": "ඔබගේ වි-තැපෑල ලිපිනය ඇතුළු කරන්න",
+       "createacct-emailoptional": "විද්‍යුත් ලිපිනය (අනිවාර්ය නැත)",
+       "createacct-email-ph": "ඔබගේ විද්‍යුත් ලිපිනය ඇතුළු කරන්න",
        "createacct-another-email-ph": "ඊ මේල් ලිපිනය ඇතුළත් කරන්න.",
        "createaccountmail": "තාවකාලික අහුඹු මුර පදයක් භාවිතා කර එය පහත දක්වා ඇති විද්යුත් තැපැල් ලිපිනයට යවන්න",
        "createacct-realname": "නියම නම (වෛකල්පීය)",
        "createaccountreason": "හේතුව:",
        "createacct-reason": "හේතුව",
        "createacct-reason-ph": "ඔබ තවත් ගිණුමක් තනන්නේ කුමක් නිසාද",
-       "createacct-captcha": "ආරක්ෂක පරික්ෂාව",
-       "createacct-imgcaptcha-ph": "à¶\89à·\84තà·\92නà·\8a à¶¯à·\90à¶\9aà·\8aà·\80ෙන වචනය ඇතුළත් කරන්න",
+       "createacct-captcha": "ආරක්‍ෂක පරික්‍ෂාව",
+       "createacct-imgcaptcha-ph": "à¶\89à·\84තà·\92නà·\8a à¶´à·\99නෙන වචනය ඇතුළත් කරන්න",
        "createacct-submit": "ඔබේ ගිණුම තනන්න",
        "createacct-another-submit": "තවත් ගිණුමක් ආරම්භ කරන්න",
        "createacct-benefit-heading": "{{වෙබ් අඩවි නම}} ඔබ වැනි අයෙක් විසින් නිමවා ඇත",
        "resettokens-watchlist-token": "වෙබ් සංග්රහය (Atom/RSS) සඳහා සංකේත [[Special:Watchlist|ඔබගේ මුර-ලැයිස්තුවෙහි පිටු වෙනස්කම්]]",
        "resettokens-done": "ටෝකන් පත් යළි පිහිටුවන්න.",
        "resettokens-resetbutton": "තෝරාගත් ටෝකන් පත් යළි පිහිටුවන්න",
-       "bold_sample": "තදකුරු පෙළ",
-       "bold_tip": "තදකුරු පෙළ",
-       "italic_sample": "ඇලකුරු පෙළ",
-       "italic_tip": "ඇලකුරු පෙළ",
+       "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": "à¶\86à¶\9aà·\98තà·\92à¶\9aරණය-නà·\9cà¶\9aල à¶´à·\99à·\85 à¶¸à·\99à·\84à·\92 à¶»à·\94à·\80න්න",
+       "headline_tip": "2වන මට්ටමේ සිරස්තලය",
+       "nowiki_sample": "à¶\86à¶\9aà·\98තà·\92à¶\9aරණය-නà·\9cà¶\9aල à¶´à·\99à·\85 à¶¸à·\99à·\84à·\92 à¶\87තà·\94à·\85à·\94à¶\9aරන්න",
        "nowiki_tip": "විකි ආකෘතිකරණය නොසලකාහරින්න",
        "image_sample": "නිදසුන.jpg",
        "image_tip": "කා වැද්දූ ගොනුව",
        "media_sample": "නිදසුන.ogg",
        "media_tip": "ගොනු සබැඳිය",
-       "sig_tip": "වේලා-මුද්‍රාව හා සමග ඔබගේ විද්‍යුත් අත්සන",
+       "sig_tip": "වේලා මුද්‍රාව හා සමග ඔබගේ විද්‍යුත් අත්සන",
        "hr_tip": "තිරස් පේළිය (අවම වශයෙන් භාවිතා කරන්න)",
        "summary": "සාරාංශය:",
        "subject": "විෂයය/සිරස් තලය:",
        "showpreview": "පෙරදසුන පෙන්වන්න",
        "showdiff": "වෙනස්කිරීම් පෙන්වන්න",
        "blankarticle": "<Strong>අවවාදයයි: </strong> ඔබ නිර්මාණය කරන පිටුව හිස් වේ. ඔබ ක්ලික් නම් \"{{int:savearticle}}\" නැවතත්, පිටුව කවර හෝ අන්තර්ගතයක් නොමැතිව නිර්මාණය කරනු ඇත.",
-       "anoneditwarning": "<strong>à¶\85à·\80à·\80à·\8fදයයà·\92:</strong> à¶\94බ à¶´à¶»à·\92à·\81à·\93ලà¶\9aයà·\99à¶\9aà·\94 à·\80à·\81යà·\99නà·\8a à¶´à¶¯à·\8aධතà·\92යට à¶´à·\8aâ\80\8dරà·\80à·\92à·\82à·\8aට à·\80à·\93 à¶±à·\9cමà·\90ත.\nà¶\94බà¶\9cà·\9a à¶\85යà·\92පà·\93 à¶ºà·\9cමà·\94à·\80 à¶¸à·\99ම පà·\92ටà·\94à·\80à·\99à·\84à·\92 à·\83à¶\82à·\83à·\8aà¶\9aරණ à¶\89තà·\92à·\84à·\8fà·\83යà·\99à·\84à·\92 à·\80à·\8fරà·\8aතà·\8fà¶\9cත à·\80à·\99නà·\94 à¶\87ත\nà¶\94බ <strong>[$1 à¶´à·\92à·\80à·\92à·\83à·\93ම]</strong> à·\84à·\9d <strong>[$2 à¶\9cà·\92ණà·\94මà¶\9aà·\8a à¶­à·\90නà·\93ම]</strong> à¶\9aලà·\84à·\9cතà·\8a, à¶\94බà¶\9cà·\9a à·\83à¶\82à·\83à·\8aà¶\9aරණයනà·\8a à·\80à·\99නතà·\8a à¶´à·\8aâ\80\8dරතà·\92ලà·\8fභ à·\83මà¶\9c, à¶\94බà¶\9cà·\9a à¶´à¶»à·\92à·\81à·\93ලà¶\9a à¶±à·\8fමය à¶\89දà·\92රà·\92යà·\9a à¶¯à·\90à¶\9aà·\8aà·\80ෙනු ඇත.",
+       "anoneditwarning": "<strong>à¶\85à·\80à·\80à·\8fදයයà·\92:</strong> à¶\94බ à¶´à¶»à·\92à·\81à·\93ලà¶\9aයà·\99à¶\9aà·\94 à·\80à·\81යà·\99නà·\8a à¶´à¶¯à·\8aධතà·\92යට à¶´à·\92à·\80à·\92à·\83 à¶±à·\90ත.\nà¶\94බà¶\9cà·\9a IP à¶ºà·\9cමà·\94à·\80 à¶¸à·\99ම පà·\92ටà·\94à·\80à·\99à·\84à·\92 à·\83à¶\82à·\83à·\8aà¶\9aරණ à¶\89තà·\92à·\84à·\8fà·\83යà·\99à·\84à·\92 à·\80à·\8fරà·\8aතà·\8fà¶\9cත à·\80à·\99නà·\94 à¶\87ත.\nà¶\94බ <strong>[$1 à¶´à·\92à·\80à·\92à·\83à·\93ම]</strong> à·\84à·\9d <strong>[$2 à¶\9cà·\92ණà·\94මà¶\9aà·\8a à¶­à·\90නà·\93ම]</strong> à¶\9aලà·\84à·\9cතà·\8a, à¶\94බà¶\9cà·\9a à·\83à¶\82à·\83à·\8aà¶\9aරණ à¶\94බà¶\9cà·\9a à¶´à¶»à·\92à·\81à·\93ලà¶\9a à¶±à¶¸à·\92නà·\8a à¶¯à·\90à¶\9aà·\8aà·\80à·\93ම à·\83à·\84 à·\80à·\99නතà·\8a à¶´à·\8aâ\80\8dරතà·\92ලà·\8fභ à¶½à·\90බෙනු ඇත.",
        "anonpreviewwarning": "අවවාදයයි: ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ට වී නොමැත. එමනිසා මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි, ඔබගේ අන්තර්ජාල ලිපිනය සටහන් කරගැනීමට සිදුවනු ඇත.",
        "missingsummary": "'''සිහිගැන්වීමයි:''' ඔබ විසින් සංස්කරණ සාරාංශයක් සපයා නොමැත.\nඔබ නැවතත් සුරැකීම ක්ලික් කලහොත්, ඔබගේ සංස්කරණය එවැන්නක් විරහිතවම සුරැකෙනු ඇත.",
        "selfredirect": "<Strong>අවවාදයයි:</strong> ඔබ තමන් වෙත මෙම පිටුව හරවා යවයි ඇත. \nඔබ යළි-යොමුවීම් සඳහා වැරදි ඉලක්කය නිශ්චිතව දක්වා ඇති විය හැක, හෝ ඔබ වැරදි පිටුව සංස්කරණය කල හැක. \nඔබ ක්ලික් නම් \"{{int:savearticle}}\" නැවතත්, යළි-යොමුවීම් කෙසේ හෝ නිර්මාණය කරනු ඇත.",
        "newarticle": "(නව)",
        "newarticletext": "බැඳියක් ඔස්සේ පැමිණ ඔබ පිවිස ඇත්තේ දැනට නොපවතින පිටුවකටයි.\nමෙම ලිපිය තැනීමට අවශ්‍ය නම්, පහත ඇති කොටුව තුල අකුරු ලිවීම අරඹන්න (වැඩිදුර තොරතුරු සඳහා [$1 උදවු පිටුව] බලන්න).\nඔබ මෙහි පිවිස ඇත්තේ අත්වැරැද්දකින් නම්, ඔබගේ ගවේෂකයෙහි '''ආපසු''' බොත්තම ඔබන්න.",
        "anontalkpagetext": "----''මෙම සංවාද පිටුව අයත් වන්නේ තවමත් ගිණුමක් තනා නැති හෝ එසේ කොට එනමුදු එය භාවිතා නොකරන හෝ නිර්නාමික පරිශීලකයෙකුටය.\nඑබැවින්, ඔහු/ඇය හැඳින්වීමට සංඛ්‍යාත්මක IP ලිපිනය භාවිතා කිරීමට අප හට සිදුවේ.\nපරිශීලකයන් කිහිප දෙනෙකු විසින් මෙවැනි IP ලිපිනයක් හවුලේ පරිහරණය කරනවා විය හැක.\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": "දැනට මෙම පිටුවෙහි කිසිදු පෙළක් නොමැත.\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": "සංශෝධනය නම් පිටුවේ #$1 \"{{FULLPAGENAME}}\" නොපවතියි.\n\nමෙය සාමාන්යයෙන් මකා දැමූ පිටුවක ඉතිහාසය සබැඳියන් යල් පැනගිය පහත සඳහන් හේතු වේ [{{fullurl:{{#Special:Log}}/මකන්න|page={{FULLPAGENAMEE}}}} මැකීමේ ලොගය].",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" යන පරිශීලක ගිණුම ලේඛනගත කොට නොමැත.\nඔබ හට මෙම පිටුව තැනීමට/සංස්කරණය කිරීමට ඇවැසිද යන බව විමසා බලන්න.",
        "permissionserrorstext": "පහත දැක්වෙන {{PLURAL:$1|හේතුව|හේතූන්}} නිසා, ඔබ හට එය සිදුකිරීමට අවසර ලබා දීමට නොහැක:",
        "permissionserrorstext-withaction": "පහත {{PLURAL:$1|හේතුව|හේතු}} නිසා, ඔබ හට $2 සඳහා අවසර නොමැත:",
        "recreate-moveddeleted-warn": "'''අවවාදයයි: පෙරදී මකාදැමුණු පිටුවක් ඔබ විසින් යළි-තනමින් පවතියි.'''\n\nමෙම පිටුව සංස්කරණය තවදුරටත් සිදු කරලීම සුදුසු දැයි එබ විසින් සලකා බැලිය යුතුව ඇත.\nමෙම පිටුව සඳහා මකාදැමීම් හා ගෙන යෑම් ලඝු-සටහන් ඔබගේ පහසුව තකා මෙහි දක්වා ඇත:",
-       "moveddeleted-notice": "මà·\99ම à¶´à·\92ටà·\94à·\80 à¶¸à¶\9aà·\8fදමà·\8f à¶\87ත.\nපà·\92ටà·\94à·\80 à·\83ඳà·\84à·\8f à¶¸à¶\9aà·\8fදà·\90මà·\93මà·\8a à·\84à·\8f à¶\9cà·\99න à¶ºà·\91මà·\8a à¶½à¶\9dà·\94-à·\83ටà·\84නà·\8a à¶\94බà¶\9cà·\9a à¶´à·\84à·\83à·\94à·\80 à¶­à¶\9aà·\8f à¶¸à·\99à·\84à·\92 පහත දක්වා ඇත.",
+       "moveddeleted-notice": "මà\9aà·\8fදà·\90මà·\96 à¶´à·\92ටà·\94à·\80à¶\9aà·\92.\nපà·\92ටà·\94à·\80 à·\83ඳà·\84à·\8f à¶¸à¶\9aà·\8fදà·\90මà·\93මà·\8a à·\84à·\8f à¶\9cà·\99න à¶ºà·\91මà·\8a à·\83ටà·\84නà·\8a පහත දක්වා ඇත.",
        "log-fulllog": "මුළු සටහනම නරඹන්න",
        "edit-hook-aborted": "හසුර මගින් සංස්කරණය රෝධනය කෙරිණි.\nඑය කිසිදු පැහැදිලි කිරීමක් නොදුනි.",
        "edit-gone-missing": "පිටුව යාවත්කාල කිරීම සිදුකල නොහැකි විය.\nඑය මකා දමා ඇති බවක් පෙනේ.",
        "lineno": "$1 පේළිය:",
        "compareselectedversions": "තෝරාගත් සංශෝධන සසඳන්න",
        "showhideselectedversions": "තෝරාගත් සංශෝධන පෙන්වන්න/සඟවන්න",
-       "editundo": "අහෝසි",
+       "editundo": "අහෝසි කරන්න",
        "diff-empty": "(වෙනසක් නොමැත)",
        "diff-multi-sameuser": "(නොපෙන්වන එම පරිශීලකයා මගින් {{PLURAL:$1|එක් අතරමැදි සංස්කරණයක්|අතරමැදි සංස්කරණ $1ක්}})",
        "diff-multi-otherusers": "({{PLURAL:$1|එක් අතරමැදි සංශෝධනය|අතරමැදි සංශෝධන $1}} විසින් {{PLURAL:$2|තවත් එක් පරිශීලක|පරිශීලක $2}} පෙන්වා නැත)",
        "searchprofile-articles": "අන්තර්ගත පිටු",
        "searchprofile-images": "බහුමාධ්‍ය",
        "searchprofile-everything": "සියල්ල",
-       "searchprofile-advanced": "à\8bà·\83à·\83à·\8a",
+       "searchprofile-advanced": "à·\80à·\90ඩà·\92දà·\94ර",
        "searchprofile-articles-tooltip": "$1 හි ගවේෂණය කරන්න",
        "searchprofile-images-tooltip": "ගොනු සඳහා ගවේෂණය කරන්න",
        "searchprofile-everything-tooltip": "සියළු අන්තර්ගතය ගවේෂණය කරන්න (සාකච්ඡා පිටුද ඇතුළුව)",
        "searchdisabled": "{{SITENAME}} ගවේෂණය අක්‍රීය කොට ඇත.\nමේ අතරතුර ඔබ හට ගූගල් ඔස්සේ ගවේෂණය කල හැක.\n{{SITENAME}} අන්තර්ගතය පිළිබඳ ඔවුන්ගේ සූචි යල් පැන ගොස් ඇතිවා විය හැකි බව සටහන් කර ගන්න.",
        "search-error": "සෙවීම් සිදුකිරීමේදී වැරද්දක් මතුවී ඇත: $1",
        "preferences": "අභිරුචි",
-       "mypreferences": "à¶\85භà·\92රà·\94චà·\93න්",
+       "mypreferences": "à¶\85භà·\92රà·\94චà·\92 à·\83à·\90à¶\9aà·\83à·\94ම්",
        "prefs-edits": "සංස්කරණයන් සංඛ්‍යාව:",
        "prefsnologintext2": "ඔබගේ අභිරුචි වෙනස් කිරීම වෙත ප්රවිෂ්ට වන්න.",
        "prefs-skin": "ඡවිය",
        "recentchanges-summary": "මෙම පිටුවේ විකියට සිදුකල ඉතා මෑත වෙනස්වීම් පසුහඹන්න.",
        "recentchanges-noresult": "මෙම උපමානයන් හා ගැලපෙන වෙනස්වීම් දී ඇති කාල සීමාව තුළ කිසිදු වෙනසක් සිදුවී නොමැත.",
        "recentchanges-feed-description": "මෙම පෝෂකයෙහි විකියට බොහෝ මෑතදී සිදුකල වෙනස්වීම් හෙළිකරන්න.",
-       "recentchanges-label-newpage": "මà·\99ම à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶±à·\80 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶±à·\92රà·\8aමà·\8fණය à¶\9aරන à¶½à¶¯à·\93",
+       "recentchanges-label-newpage": "මà·\99ම à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶¸à¶\9cà·\92නà·\8a à¶±à·\80 à¶´à·\92ටà·\94à·\80à¶\9aà·\8a à¶±à·\92රà·\8aමà·\8fණය à¶\9aà·\99රà·\92නà·\92",
        "recentchanges-label-minor": "මෙය සුළු සංස්කරණයකි",
        "recentchanges-label-bot": "මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි",
        "recentchanges-label-unpatrolled": "මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත",
        "recentchanges-label-plusminus": "පිටුවේ බයිට ගණන මෙපමණකින් වෙනස් වී ඇත",
-       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-heading": "'''විස්තරය:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|නව පිටු ලැයිස්තුව]] ද බලන්න)",
        "rcnotefrom": "{{PLURAL:$5|වෙනස්කම|වෙනස්කම්}} න් පසු සිදුවී ඇති <strong>$3, $4</strong> මෙහි පහත දැක්වේ (<strong>$1</strong> ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
        "rclistfrom": "$3 $2 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න",
        "rcshowhideliu": "ලේඛනගත පරිශීලකයෝ $1",
        "rcshowhideliu-show": "පෙන්වන්න",
        "rcshowhideliu-hide": "සඟවන්න",
-       "rcshowhideanons": "නà·\92රà·\8aනà·\8fමà·\92à¶\9a à¶´à¶»à·\92à·\81à·\93ලà¶\9aයනà·\8a $1",
+       "rcshowhideanons": "නà·\92රà·\8aනà·\8fමà·\92à¶\9a à¶´à¶»à·\92à·\81à·\93ලà¶\9aයà·\9d $1",
        "rcshowhideanons-show": "පෙන්වන්න",
        "rcshowhideanons-hide": "සඟවන්න",
        "rcshowhidepatr": "පරික්‍ෂා කර බැලූ සංස්කරණයන් $1",
        "rcshowhidepatr-show": "පෙන්වන්න",
        "rcshowhidepatr-hide": "සඟවන්න",
-       "rcshowhidemine": "මගේ සංස්කරණයන් $1",
+       "rcshowhidemine": "මගේ සංස්කරණ $1",
        "rcshowhidemine-show": "පෙන්වන්න",
        "rcshowhidemine-hide": "සඟවන්න",
        "rclinks": "අවසන් දින $2 තුලදී සිදුවී ඇති අවසන් වෙනස්වීම් $1 පෙන්නුම් කරන්න<br />$3",
        "listfiles-latestversion-no": "නැත",
        "file-anchor-link": "ගොනුව",
        "filehist": "ගොනු ඉතිහාසය",
-       "filehist-help": "එම අවස්ථාවෙහිදී  ගොනුව පැවැති ආකාරය නැරඹීම ඔබ හට රිසි නම්  දිනය/වේලාව මත ක්ලික් කරන්න.",
+       "filehist-help": "එම අවස්ථාවෙහිදී  ගොනුව පැවැති ආකාරය නැරඹීම දිනය/වේලාව මත ක්ලික් කරන්න.",
        "filehist-deleteall": "සියල්ල මකන්න",
        "filehist-deleteone": "මකන්න",
        "filehist-revert": "ප්‍රතිවර්තනය",
        "filehist-current": "වත්මන්",
        "filehist-datetime": "දිනය/වේලාව",
-       "filehist-thumb": "à·\83à·\92à¶\9fà·\92තà·\92-රූපය",
-       "filehist-thumbtext": " $1à·\80න à·\80à·\92ට à¶\85නà·\94à·\80à·\8fදය à·\83ඳà·\84à·\8f à·\83à·\92à¶\9fà·\92තà·\92-රූපය",
+       "filehist-thumb": "à\9aà·\94ඩà·\8f-රූපය",
+       "filehist-thumbtext": " $1à·\80න à·\80à·\92ට à¶\85නà·\94à·\80à·\8fදය à·\83ඳà·\84à·\8f à\9aà·\94ඩà·\8f-රූපය",
        "filehist-nothumb": "සිඟිති-රූපයක් නොමැත",
        "filehist-user": "පරිශීලක",
        "filehist-dimensions": "මාන",
        "filehist-filesize": "ගොනුවේ විශාලත්වය",
        "filehist-comment": "පරිකථනය",
        "imagelinks": "ගොනු භාවිතය",
-       "linkstoimage": "මà·\99ම à¶\9cà·\9cනà·\94à·\80ට  {{PLURAL:$1|ලà·\92පà·\92ය à¶¶à·\90â\80\8dඳà·\99යà·\92|ලà·\92පà·\92 $1 à¶\9aà·\8a à¶¶à·\90ඳà·\99තà·\92}}:",
+       "linkstoimage": "මà·\99ම à¶\9cà·\9cනà·\94à·\80ට  {{PLURAL:$1|ලà·\92පà·\92ය à¶¶à·\90â\80\8dඳà·\99යà·\92|ලà·\92පà·\92 $1 à¶\9aà·\8a à¶¶à·\90ඳà·\9a}}:",
        "linkstoimage-more": "මෙම ගොනුවට {{PLURAL:$1|පිටුවකට |පිටු  $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": "à¶\94බට à¶¸à·\99ම à¶\9cà·\9cනà·\94à·\80 à¶\8bඩින් ලිවිය නොහැක.",
+       "upload-disallowed-here": "à¶\94බට à¶¸à·\99ම à¶\9cà·\9cනà·\94à·\80 à¶¸à¶­ින් ලිවිය නොහැක.",
        "filerevert": "$1 ප්‍රතිවර්තනය කරන්න",
        "filerevert-legend": "ගොනුව ප්‍රතිවර්තනය කරන්න",
        "filerevert-intro": "ඔබ විසින්  '''[[Media:$1|$1]]''' ප්‍රතිවර්තනය කරමින් පවතින්නේ  [ $2 දින, $3 වේලාවේ පැවැති $4 අනුවාදයටයි ].",
        "ncategories": "{{PLURAL:$1|එක් ප්‍රවර්ගයකි|ප්‍රවර්ගයන් $1 කි}}",
        "ninterwikis": "{{PLURAL:$1|අන්තර්විකි}} $1 ක්",
        "nlinks": "{{PLURAL:$1|එක් සබැඳියකි|සබැඳියන් $1 කි}}",
-       "nmembers": "{{PLURAL:$1|à¶\91à¶\9aà·\8a à·\83à·\8fමà·\8fජà·\92à¶\9aයà·\99à¶\9aà·\92|à·\83à·\8fමà·\8fජà·\93à¶\9aයනà·\8a $1 කි}}",
+       "nmembers": "{{PLURAL:$1|à¶\91à¶\9aà·\8a à·\83à·\8fමà·\8fජà·\92à¶\9aයà·\99à¶\9aà·\92|à·\83à·\8fමà·\8fජà·\92à¶\9aයà·\9d $1 කි}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|සාමාජිකයන්|සාමාජික}}",
        "nrevisions": "{{PLURAL:$1|එක් සංශෝධනයකි|සංශෝධන $1 කි }}",
        "nviews": " {{PLURAL:$1|නැරඹුම් එකකි|නැරඹුම් $1 කි}}",
        "actioncomplete": "ක්‍රියාව සමාප්තයි",
        "actionfailed": "කාර්යය අසාර්ථක විය",
        "deletedtext": "\"$1\" මකා දමා ඇත.\nමෑත මකාදැමීම් පිළිබඳ වාර්තාවක් සඳහා $2 බලන්න.",
-       "dellogpage": "මà¶\9aà·\8fදà·\90මà·\94මà·\8a à¶½à·\9cà¶\9cය",
+       "dellogpage": "මà¶\9aà·\8fදà·\90මà·\94මà·\8a à·\83ටà·\84න",
        "dellogpagetext": "පහත දැක්වෙන්නේ ඉතා මෑතදී සිදු කර ඇති මකාදැමීම් ලැයිස්තුවකි.",
        "deletionlog": "මකා-දැමුම් ලඝු-සටහන",
        "reverted": "පෙර සංශෝධනය වෙත ප්‍රතිවර්තනය කෙරිණි",
        "delete-warning-toobig": "මෙම පිටුවට, {{PLURAL:$1|එක් සංශෝධනයකට|සංශෝධන $1 කට}} වඩා වැඩි විශාල සංස්කරණ ඉතිහාසයක් ඇත.\nමෙය මකාදැමීම  {{SITENAME}} හි දත්ත-ගබඩා ක්‍රියාකාරකම් වලට අවහිරතා පැන නැංවීමට හේතු විය හැක;\nපරිස්සමින් ඉදිරි කටයුතු කරන්න.",
        "deleting-backlinks-warning": "'''ප්‍රවේශමෙන්:''' ඔබ සූදානම් වන්නේ ඔබ පරිශීලනය කරන පිටුවට සම්බන්ධ වූ අනෙක් පිටු මකා දැමීමටයි.",
        "rollback": "සංස්කරණයන් පුනරාවර්තනය කරන්න",
-       "rollbacklink": "පà·\8aâ\80\8dරතà·\92à·\80රà·\8aතනය",
+       "rollbacklink": "පà·\83à·\94පà·\99රà·\85à·\94ම",
        "rollbacklinkcount": "{{PLURAL:$1|සංස්කරණ}} $1 ක් ආපසු පෙරලන්න",
        "rollbackfailed": "පුනරාවර්තනය අසාර්ථකයි",
        "cantrollback": "සංස්කරණය ප්‍රතිවර්තනය කල නොහැක;\nඅවසන් දායකයා මෙම පිටුවේ එකම කතෘවරයාද වෙයි.",
        "namespace_association": "ආශ්‍රිත නාම අවකාශය",
        "tooltip-namespace_association": "තෝරාගත් නාම අවකාශය හා සම්බන්ධ සාකච්ඡා හෝ විෂයය නාම අවකාශය ඇතුළත් කිරීමට මෙම කොටුව ලකුණු කරන්න",
        "blanknamespace": "(ප්‍රධාන)",
-       "contributions": "{{GENDER:$1|පරිශීලකගේ}} දායකත්වයන්",
+       "contributions": "{{GENDER:$1|පරිශීලකගේ}} දායකත්ව",
        "contributions-title": " $1 සඳහා පරිශීලක දායකත්වයන්",
        "mycontris": "දායකත්ව",
        "contribsub2": "{{GENDER:$3|$1}} සඳහා ($2)",
        "isredirect": "පිටුව යළි-යොමුකරන්න",
        "istemplate": "අන්තහ්කරණය",
        "isimage": "ගොනු සබැඳිය",
-       "whatlinkshere-prev": "{{PLURAL:$1|පà·\96රà·\8aà·\80|පà·\96රà·\8aà·\80 $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|පà·\99ර|පà·\99ර $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|ඉදිරි|ඉදිරි $1}}",
        "whatlinkshere-links": "← සබැඳි",
        "whatlinkshere-hideredirs": "යළියොමු $1",
-       "whatlinkshere-hidetrans": "$1 අන්තර්ගතයන්",
-       "whatlinkshere-hidelinks": "සබැඳියන් $1",
+       "whatlinkshere-hidetrans": "$1 transclusions",
+       "whatlinkshere-hidelinks": "සබැඳි $1",
        "whatlinkshere-hideimages": "ගොනු සබැඳි $1",
        "whatlinkshere-filters": "පෙරහන්",
        "autoblockid": "ස්වයංවාරණය #$1",
        "blocklist-nousertalk": "ස්වීය සාකච්ඡා පිටුව සංස්කරණය කල නොහැක",
        "ipblocklist-empty": "වාරණ-ලැයිස්තුව හිස්ය.",
        "ipblocklist-no-results": "අයැදුනු අන්තර්ජාල ලිපිනය හෝ පරිශීලක නාමය හෝ වාරණයකට ලක්ව නොමැත.",
-       "blocklink": "à·\80à·\8fරණය",
+       "blocklink": "à\85à·\80à·\84à·\92ර à¶\9aරනà·\8aන",
        "unblocklink": "වාරණයෙන් ඉවත්වන්න",
        "change-blocklink": "වාරකය වෙනස් කරන්න",
        "contribslink": "දායකත්ව",
        "tooltip-pt-anonuserpage": "සංස්කරණයට ඔබ භාවිතා කරමින් පවතින අන්තර්ජාල ලිපිනය සඳහා පරිශීලක පිටුව",
        "tooltip-pt-mytalk": "ඔබගේ සංවාද පිටුව",
        "tooltip-pt-anontalk": "මෙම අන්තර්ජාල ලිපිනයෙන් කර ඇති සංස්කරණයන් පිළිබඳ සාකච්ඡාව",
-       "tooltip-pt-preferences": "මගේ අභිරුචි",
+       "tooltip-pt-preferences": "මගේ අභිරුචි සැකසුම්",
        "tooltip-pt-watchlist": "වෙනස්වීම් සිදුවී තිබේදැයි යන්න පිලිබඳව ඔබගේ විමසුමට ලක්ව ඇති පිටු ලැයිස්තුව",
-       "tooltip-pt-mycontris": "ඔබගේ දායකත්වයන් ලැයිස්තුව‍",
-       "tooltip-pt-login": "පà·\92à·\80à·\92à·\83à·\93ම à¶\9aà·\99රà·\99à·\84à·\92 à¶\94බ à¶\8bදà·\8aâ\80\8dයà·\9dà¶\9cà·\92මතà·\8a à¶\9aà·\99රà·\99යà·\92. à¶\91à·\84à·\99තà·\8a, à¶\91ය à¶\85නà·\92à·\80à·\8fරà·\8aය à¶±à·\90ත",
+       "tooltip-pt-mycontris": "ඔබගේ දායකත්ව ලැයිස්තුව‍",
+       "tooltip-pt-login": "à¶\85ඩà·\80à·\92යට à¶´à·\92à·\80à·\92à·\83à·\93මට à¶\94බà·\80 à¶¯à·\92රà·\92à¶\9cà·\90නà·\8aà·\80à·\9a. à¶\91à·\84à·\99තà·\8a à¶´à·\92à·\80à·\92à·\83à·\93ම à¶\85නà·\92à·\80à·\8fරà·\8aය à¶±à·\9cà·\80à·\9a.",
        "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à·\94රà·\90à¶\9aà·\93මට à¶´à·\99ර à¶\9aරà·\94ණà·\8fà¶\9aර à¶´à·\99රදà·\83à·\94න à¶¶à·\9cතà·\8aතම à¶·à·\8fà·\80à·\92තà·\8f à¶\9aරනà·\8aන",
-       "tooltip-ca-addsection": "නà·\80 à¶¡à·\9aදයක් අරඹන්න",
+       "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-addsection": "නà·\80 à¶\9aà·\9cටà·\83ක් අරඹන්න",
        "tooltip-ca-viewsource": "මෙම පිටුව ආරක්‍ෂණය කොට ඇත.\nඔබට එහි මූලාශ්‍රය නැරඹිය හැක.",
-       "tooltip-ca-history": "මෙම පිටුවේ පෙර සංශෝධනයන්",
+       "tooltip-ca-history": "මෙම පිටුවේ පෙර සංශෝධන",
        "tooltip-ca-protect": "මෙම පිටුව ආරක්‍ෂණය කරන්න",
        "tooltip-ca-unprotect": "මෙම පිටුවෙහි ආරක්ෂණ තත්වය වෙනස් කරන්න",
        "tooltip-ca-delete": "මේ පිටුව මකන්න",
        "tooltip-search": "{{SITENAME}} ගවේෂණය",
        "tooltip-search-go": "මෙම නාමය එලෙසම ඇති පිටුවක් ඇත්නම් එය වෙත යන්න",
        "tooltip-search-fulltext": "මෙම පෙළ සඳහා පිටු ගවේෂණය කරන්න",
-       "tooltip-p-logo": "මà·\94ලà·\8a à¶´à·\92ටà·\94à·\80â\80\8dට à¶´à·\92à·\80à·\92à·\83à·\99න්න",
+       "tooltip-p-logo": "මà·\94ලà·\8a à¶´à·\92ටà·\94à·\80â\80\8dට à¶ºන්න",
        "tooltip-n-mainpage": "මුල් පිටුව‍ට පිවිසෙන්න",
        "tooltip-n-mainpage-description": "මුල් පිටුව‍ට පිවිසෙන්න",
        "tooltip-n-portal": "ව්‍යාපෘතිය පිළිබඳ විස්තර, ඔබට කල හැකි දේ, තොරතුරු සොයාගත හැකි තැන්",
        "tooltip-n-currentevents": "කාලීන සිදුවීම් පිළිබඳ පසුබිම් තොරතුරු සොයා දැනගන්න",
        "tooltip-n-recentchanges": "විකියෙහි මෑත වෙනස්කිරීම් ලැයිස්තුවක්",
-       "tooltip-n-randompage": "අහඹු පිටුවක් බා ගත කරන්න",
+       "tooltip-n-randompage": "අහඹුලෙස පිටුවක් පෙන්වන්න",
        "tooltip-n-help": "සොයා දැනගත හැකි තැන",
        "tooltip-t-whatlinkshere": "මෙය හා සබැ‍ඳෙන සියළු විකි පිටු ලැයිස්තුවක්",
-       "tooltip-t-recentchangeslinked": "මà·\99ම à¶´à·\92ටà·\94à·\80 à·\84à·\8f à·\83බà·\90ඳà·\92 à¶´à·\92ටà·\94à·\80ල â\80\8dනà·\80 à·\80à·\99නà·\83à·\8aà·\80ීම්",
+       "tooltip-t-recentchangeslinked": "මà·\99ම à¶´à·\92ටà·\94à·\80 à·\84à·\8f à·\83බà·\90ඳà·\92 à¶´à·\92ටà·\94à·\80ල â\80\8dනà·\80 à·\80à·\99නà·\83à·\8aà\9aà·\92රීම්",
        "tooltip-feed-rss": "මෙම පිටුව සඳහා RSS පෝෂකය",
-       "tooltip-feed-atom": "මෙම පිටුව සඳහා අටෝම් පෝෂකය",
-       "tooltip-t-contributions": "මà·\99ම à¶´à¶»à·\92à·\81à·\93ලà¶\9aයà·\8fà\9cà·\9a à¶¯à·\8fයà¶\9aතà·\8aà·\80 à¶½à·\90යà·\92à·\83à·\8aතà·\94à·\80 à¶±à¶»à¶¹à¶±à·\8aන",
+       "tooltip-feed-atom": "මෙම පිටුව සඳහා Atom පෝෂකය",
+       "tooltip-t-contributions": "මෙම පරිශීලකයගේ දායකත්ව ලැයිස්තුව නරඹන්න",
        "tooltip-t-emailuser": "මෙම පරිශීලකයාට විද්‍යුත්-තැපෑලක් යවන්න",
        "tooltip-t-upload": "ගොනු උඩුගත කරන්න",
-       "tooltip-t-specialpages": "සියලු විශේෂ පිටු ලැයිස්තුවක්",
+       "tooltip-t-specialpages": "සියලු විශේෂ පිටුවල ලැයිස්තුවක්",
        "tooltip-t-print": "මෙම පිටුවෙහි මුද්‍රිත අනුවාදය",
        "tooltip-t-permalink": "පිටුවෙහි මෙම අනුවාදයට ස්ථාවර සබැඳිය",
        "tooltip-ca-nstab-main": "අන්තර්ගත පිටුව නරඹන්න",
        "tooltip-ca-nstab-category": "ප්‍රවර්ග පිටුව නරඹන්න",
        "tooltip-minoredit": "මෙය සුළු සංස්කරණයක් ලෙස සටහන් කරන්න",
        "tooltip-save": "වෙනස්කිරීම් සුරකින්න",
-       "tooltip-preview": "ඔබ‍ කල  වෙනස්කිරීම් පෙර-දසුන් කර, ඉන් අනතුරුව සුරැකීමට කාරුණික වන්න!",
+       "tooltip-preview": "ඔබ‍ කල වෙනස්කිරීම් මුලින් පෙර-දසුන්කර, ඉන්පසු සුරැකීම යෝග්‍යවේ !",
        "tooltip-diff": "පෙළෙහි ඔබ සිදුකල වෙනස්වීම් මොනවාදැයි දක්වන්න.",
        "tooltip-compareselectedversions": "මෙම පිටුවෙහි, තෝරාගෙන ඇති අනුවාද දෙක අතර වෙනස්කම් බලන්න.",
        "tooltip-watch": "මෙම පිටුව ඔබගේ මුර-ලැයිස්තුවට එක් කරන්න",
        "tooltip-recreate": "පිටුව මකාදමා ඇති වුවද, එය යළි-නිර්මාණය කරන්න",
        "tooltip-upload": "උඩුගත කිරීම අරඹන්න",
        "tooltip-rollback": "\"ප්‍රතිවර්තනය\" එක් වරක් ක්ලික් කිරීමෙහි ප්‍රතිඵලය වනුයේ, සංස්කරණය(න්) ප්‍රතිවර්තනය වී, අවසන් දායකයා විසින් සැදූ මෙම පිටුව වෙත පිටුව ගෙන ඒමයි.",
-       "tooltip-undo": "\"අහෝසි\" මගින් සිදුකෙරෙනුයේ මෙම සංස්කරණය ප්‍රතිවර්තනය කොට, සංස්කරණ-ආකෘතිය, පෙරදසුන් මාදිලියෙහි විවෘත කිරීමයි.\nසාරාංශයෙහි, මේ පිළිබඳව හේතුවක් පල කිරීමට, ඔබට ඉඩ සැලසේ.",
+       "tooltip-undo": "\"අහෝසිය\" මගින් සිදුකෙරෙනුයේ මෙම සංස්කරණය ප්‍රතිවර්තනය කොට, සංස්කරණ-ආකෘතිය, පෙරදසුන් මාදිලියෙහි විවෘත කිරීමයි.\nමෙමගින් සාරාංශයෙහි හේතුවක් පල කිරීමට ඔබට ඉඩ සැලසේ.",
        "tooltip-preferences-save": "අභිරුචීන් සුරකින්න",
        "tooltip-summary": "කෙටි සාරාංශයක් ඇතුළත් කරන්න",
        "common.css": "/* මෙහි CSS  බහාලීම සියළු ඡවියයන් භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */",
        "pageinfo-recent-edits": "මෑත සංස්කරණ සංඛ්‍යාව (අවසන් $1 තුලදී)",
        "pageinfo-recent-authors": "මෑත ප්‍රභින්න කර්තෘවරුන් සංඛ්‍යාව",
        "pageinfo-magic-words": "මැජික් {{PLURAL:$1|වචනය|වචන}} ($1)",
-       "pageinfo-toolboxlink": "පිටු තොරතුරු",
+       "pageinfo-toolboxlink": "පිටුවේ තොරතුරු",
        "pageinfo-redirectsto": "වෙත යළියොමු කරන්න",
        "pageinfo-redirectsto-info": "තොරතුරු",
        "pageinfo-contentpage": "අන්තර්ගත පිටුවක් ලෙස ගණනය ගණනය කර ඇත",
        "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": "මà·\99යට à¶\89à·\84ල à·\80à·\92à·\83රà·\8aජනයà¶\9aà·\8a à¶¯à¶\9aà·\8aà·\80à·\8f à¶\91à·\85ඹà·\92ය නොහැක.",
+       "file-nohires": "මà·\99යට à¶\89à·\84ල à·\80à·\92à·\83රà·\8aජනයà¶\9aà·\8a à¶½à¶¶à·\8fà¶\9cත නොහැක.",
        "svg-long-desc": "SVG ගොනුව, නාමමාත්‍රිකව $1 × $2 පික්සල්, ගොනු විශාලත්වය: $3",
        "svg-long-desc-animated": "සජීවීකරණය SVG ගොනුව, නාමමාත්රිකව $1 × $2 පික්සල, ගොනු විශාලත්වය: $3",
        "svg-long-error": "අනීතික SVG ගොනුව: $1",
        "show-big-image": "මුල් ගොනුව",
-       "show-big-image-preview": "මà·\99ම à¶´à·\99රදà·\83à·\94නà·\99à·\84à·\92 à¶­à¶»à¶¸: $1.",
+       "show-big-image-preview": "මà·\99ම à¶´à·\99රදà·\83à·\94නà·\99à·\84à·\92 à·\80à·\92à·\81à·\8fලතà·\8aà·\80ය: $1.",
        "show-big-image-other": "අනෙකුත් {{PLURAL:$2|විභේදනය|විභේදනයන්}}: $1.",
        "show-big-image-size": "$1 × $2  පික්සල",
        "file-info-gif-looped": "වලිත",
        "metadata-help": "සමහරවිට ඩිජිටල් කැමරාවක් හෝ ස්කෑනරයක් හෝ භාවිතයෙන්, නිමැවා හෝ සංඛ්‍යාංකකරණය (ඩිජිටල්කරණය) කොට එක් කල , අමතර තොරතුරු මෙම ගොනුවේ අඩංගුය.\nගොනුව මුලින්ම පැවැති තත්ත්වයෙහි සිට විකරණය කොට තිබේ නම්, සමහරක් තොරතුරු විකරිත ගොනුව පූර්ණ වශයෙන් පිළිඹිමු නොකරනු ඇත.",
        "metadata-expand": "විස්තීරණය කරන ලද විස්තර පෙන්වන්න",
        "metadata-collapse": "විස්තීරණය කරන ලද විස්තර සඟවන්න",
-       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* මාදිලිය\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* කලාකරු\n* ප්‍රකාශන හිමිකම\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\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": "එක් සංරචකයකට බිට් ගණන",
index b5c989e..4002e8b 100644 (file)
@@ -30,7 +30,9 @@
                        "Matthew Greg",
                        "Ата",
                        "Macofe",
-                       "TomášPolonec"
+                       "TomášPolonec",
+                       "Mikulas1",
+                       "Hromoslav"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
        "tog-watchdefault": "Pridávať stránky a súbory, ktoré upravím medzi sledované",
        "tog-watchmoves": "Pridávať stránky a súbory, ktoré presuniem medzi sledované",
        "tog-watchdeletion": "Pridávať stránky a súbory, ktoré zmažem medzi sledované",
+       "tog-watchrollback": "Pridať stránky na ktorých som použil rollback do môjho zoznamu sledovaných stránok",
        "tog-minordefault": "Označovať všetky zmeny štandardne ako drobné",
        "tog-previewontop": "Zobrazovať náhľad pred textovým poľom úprav, nie až za ním",
        "tog-previewonfirst": "Zobraziť náhľad pred prvou úpravou",
-       "tog-enotifwatchlistpages": "Upozorniť ma emailom, keď sa zmení stránka alebo súbor z môjho zoznamu sledovaných",
-       "tog-enotifusertalkpages": "Upozorniť ma emailom po zmene mojej používateľskej diskusnej stránky",
-       "tog-enotifminoredits": "Upozorniť ma emailom aj na drobné úpravy stránok a súborov",
+       "tog-enotifwatchlistpages": "Upozorniť ma e-mailom, keď sa zmení stránka alebo súbor z môjho zoznamu sledovaných",
+       "tog-enotifusertalkpages": "Upozorniť ma e-mailom po zmene mojej používateľskej diskusnej stránky",
+       "tog-enotifminoredits": "Upozorniť ma e-mailom aj na drobné úpravy stránok a súborov",
        "tog-enotifrevealaddr": "Zobraziť moju emailovú adresu v emailoch s upozorneniami",
        "tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
        "tog-oldsig": "Súčasný podpis:",
@@ -65,7 +68,7 @@
        "tog-watchlisthideliu": "Skryť úpravy prihlásených používateľov zo zoznamu sledovaných stránok",
        "tog-watchlisthideanons": "Skryť úpravy anonymných používateľov zo zoznamu sledovaných stránok",
        "tog-watchlisthidepatrolled": "Skryť strážené úpravy Zozname sledovaných stránok",
-       "tog-ccmeonemails": "Posielať mi kópie mojich emailov, ktoré pošlem ostatným používateľom",
+       "tog-ccmeonemails": "Posielať mi kópie e-mailov, ktoré pošlem ostatným používateľom",
        "tog-diffonly": "Nezobrazovať obsah stránky pod rozdielmi",
        "tog-showhiddencats": "Zobraziť skryté kategórie",
        "tog-norollbackdiff": "Vynechať rozdiel po vykonaní rollbacku",
        "october-date": "$1. októbra",
        "november-date": "$1. novembra",
        "december-date": "$1. decembra",
-       "pagecategories": "{{PLURAL:$1|Kategória|Kategórie|Kategórií}}",
+       "pagecategories": "{{PLURAL:$1|Kategória|Kategórie}}",
        "category_header": "Stránky v kategórii „$1“",
        "subcategories": "Podkategórie",
        "category-media-header": "Multimediálne súbory v kategórii „$1“",
        "wrongpassword": "Zadané heslo je nesprávne. Prosím, skúste to znova.",
        "wrongpasswordempty": "Zadané heslo bolo prázdne. Prosím, skúste to znova.",
        "passwordtooshort": "Heslo musí mať dĺžku aspoň $1 {{PLURAL:$1|znak|znaky|znakov}}.",
+       "passwordtoolong": "Heslá nemôžu byť dlhšie než {{PLURAL:$1|1 znak|$1 znaky|$1 znakov}}.",
        "password-name-match": "Vaše heslo musí byť iné ako vaše používateľské meno.",
        "password-login-forbidden": "Použitie tohto používateľského mena a hesla bolo zakázané.",
        "mailmypassword": "Obnoviť heslo",
        "passwordreset": "Reset hesla",
        "passwordreset-text-one": "Pre získanie nového hesla vyplňte tento formulár.",
        "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla emailom, zadajte jeden z údajov.}}",
-       "passwordreset-legend": "Obnoviť heslo",
        "passwordreset-disabled": "Obnovenie hesla bolo na tejto wiki zakázané.",
        "passwordreset-emaildisabled": "E-mailové funkcie boli na tejto wiki vypnuté.",
        "passwordreset-username": "Používateľské meno:",
        "resettokens": "Obnoviť tokeny",
        "resettokens-text": "Tu môžete obnoviť tokeny, ktoré umožňujú prístup k určitým súkromným údajom spojeným s vaším účtom.\n\nMali by ste to urobiť, ak ste ich omylom niekomu poskytli alebo ak bolo vaše konto zneužité.",
        "resettokens-no-tokens": "Neexistujú žiadne tokeny, ktoré by bolo možné obnoviť.",
-       "resettokens-legend": "Obnoviť tokeny",
        "resettokens-tokens": "Tokeny:",
        "resettokens-token-label": "$1 (aktuálna hodnota: $2)",
        "resettokens-watchlist-token": "Token pre webový kanál (Atom/RSS) [[Special:Watchlist|zmien na stránkach, ktoré sledujete]]",
        "anoneditwarning": "<strong>Upozornenie:</strong> Nie ste prihlásený.\nAk uložíte akúkoľvek úpravu vaša IP adresa bude zverejnená v histórii tejto stránky. Ak sa <strong>[$1 prihlásite]</strong> alebo si <strong>[$2 vytvoríte účet]</strong>, budú vaše úpravy priradené k vášmu používateľskému menu a získate i ďalšie výhody.",
        "anonpreviewwarning": "''Nie ste prihlásený. Uložením zaznamenáte svoju IP adresu do histórie úprav tejto stránky.''",
        "missingsummary": "'''Pripomienka:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, vaše úpravy sa uložia bez zhrnutia úprav.",
+       "selfredirect": "<strong>Upozornenie:</strong> Snažíte sa túto stránku presmerovať samú na seba.\nMožno ste zadali chybný cieľ presmerovania, alebo editujete nesprávnu stránku.\nAk znova kliknete na „{{int:savearticle}}“, bude presmerovanie aj napriek tomu vytvorené.",
        "missingcommenttext": "Prosím, dolu napíšte komentár.",
        "missingcommentheader": "'''Pripomienka:''' Neposkytli ste predmet/hlavičku tohto komentára.\nAk znova kliknete na tlačidlo „{{int:savearticle}}“, vaša úprava sa uloží bez nej.",
        "summary-preview": "Náhľad zhrnutia:",
        "subject-preview": "Náhľad predmetu/hlavičky:",
+       "previewerrortext": "Pri pokuse o zobrazenie náhľadu došlo k chybe.",
        "blockedtitle": "Používateľ je zablokovaný",
        "blockedtext": "'''Vaše používateľské meno alebo IP adresa bola zablokovaná.'''\n\nZablokoval vás správca $1. Udáva tento dôvod:<br />''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Kto mal byť zablokovaný: $7\n\nMôžete kontaktovať $1 alebo s jedného z ďalších [[{{MediaWiki:Grouppage-sysop}}|správcov]] a prediskutovať blokovanie.\nUvedomte si, že nemôžete použiť funkciu „{{int:Emailuser}}“, pokiaľ nemáte registrovanú platnú e-mailovú adresu vo svojich [[Special:Preferences|nastaveniach]].\nVaša IP adresa je $3 a ID blokovania je #$5.\nProsím, uveďte oba tieto údaje do každej správy, ktorú posielate.",
        "autoblockedtext": "Vaša IP adresa bola automaticky zablokovaná, pretože ju používa iný používateľ, ktorého zablokoval $1.\nUdaný dôvod zablokovania:\n\n:''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nAk potrebujete informácie o blokovaní, môžete kontaktovať $1 alebo niektorého iného\n[[{{MediaWiki:Grouppage-sysop}}|správcu]].\n\nPozn.: Nemôžete použiť funkciu „{{int:emailuser}}“, ak ste si vo svojich\n[[Special:Preferences|používateľských nastaveniach]] nezaregistrovali platnú emailovú adresu.\n\nVaša aktuálna IP adresa je $3. ID vášho blokovania je $5.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
        "invalid-content-data": "Neplatné dáta obsahu",
        "content-not-allowed-here": "Obsah „$1“ nie je povolený na stránke [[$2]]",
        "editwarning-warning": "Ak opustíte túto stránku, môžete tým stratiť všetky vykonané zmeny.\nAk ste prihlásený, toto upozornenie môžete vypnúť v sekcii „{{int:prefs-editing}}“ svojich nastavení.",
+       "editpage-notsupportedcontentformat-title": "Obsahový formát nieje podporovaný",
        "content-model-wikitext": "wikitext",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Prázdny objekt",
+       "content-json-empty-array": "Prázdne pole",
+       "duplicate-args-warning": "<strong>Upozornenie:</strong> Stránka [[:$1]] volá [[:$2]] s viacerými hodnotami parametra „$3“. Použitá bude len posledná odovzdaná hodnota.",
        "duplicate-args-category": "Stránky s duplicitnými parametrami pri volaniach šablón",
        "duplicate-args-category-desc": "Stránka obsahuje volania šablóny používajúce duplicitné parametere, ako napríklad <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> alebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozornenie: Táto stránka obsahuje príliš mnoho volaní funkcií syntaktického analyzátora, ktoré nadmerne zaťažujú server.\n\nObsahuje $1 {{PLURAL:$1|volanie|volania|volaní}}. Mala by obsahovať menej ako $2 {{PLURAL:$1|volanie|volania|volaní}}.",
        "undo-summary": "Revízia $1 používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) bola vrátená",
        "undo-summary-username-hidden": "Vrátiť revíziu $1, ktorú vykonal skrytý používateľ",
        "cantcreateaccounttitle": "Nie je možné vytvoriť účet",
-       "cantcreateaccount-text": "Tvorbu účtov z tejto IP adresy ('''$1''') zablokoval [[User:$3|$3]].\n\nDôvod, ktorý $3 uviedol, je ''$2''",
+       "cantcreateaccount-text": "Zakladanie nových účtov z tejto IP adresy ('''$1''') bolo zablokované {{GENDER:$3|používateľom|používateľkou}} [[User:$3|$3]].\n\nDôvod, ktorý $3 {{GENDER:$3|uviedol|uviedla}}, je: ''$2''",
+       "cantcreateaccount-range-text": "Zakladanie nových účtov z IP adries v rozsahu '''$1''', ktorý zahŕňa aj vašu IP adresu ('''$4'''), bolo zablokované {{GENDER:$3|používateľom|používateľkou}} [[User:$3|$3]].\n\nDôvod, ktorý $3 {{GENDER:$3|uviedol|uviedla}}, je: ''$2''",
        "viewpagelogs": "Zobraziť záznamy pre túto stránku",
        "nohistory": "Pre túto stránku neexistuje história.",
        "currentrev": "Aktuálna verzia",
        "history-feed-description": "História úprav pre túto stránku na wiki",
        "history-feed-item-nocomment": "$1 na $2",
        "history-feed-empty": "Požadovaná stránka neexistuje.\nMožno bola zmazaná z wiki alebo premenovaná.\nSkúste [[Special:Search|vyhľadávať na wiki]] relevantné nové stránky.",
+       "history-edit-tags": "Upraviť značky vybraných revízií",
        "rev-deleted-comment": "(zhrnutie úprav odstránené)",
        "rev-deleted-user": "(používateľské meno odstránené)",
        "rev-deleted-event": "(činnosť odstránená zo záznamu)",
        "editundo": "vrátiť",
        "diff-empty": "(Žiaden rozdiel)",
        "diff-multi-sameuser": "({{PLURAL:$1|Jedna medziľahlá úprava|$1 medziľahlé úpravy|$1 medziľahlých úprav}} od rovnakého používateľa.)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Jedna medziľahlá úprava|$1 medziľahlé úpravy|$1 medziľahlých úprav}} od {{PLURAL:$2|jedného ďalšieho používateľa|$2 ďalších používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}})",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 medziľahlá revízia|$1 medziľahlé revízie|$1 medziľahlých revízií}} od viac ako {{PLURAL:$2|$2 používateľa|$2 používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}})",
        "difference-missing-revision": "{{PLURAL:$2|$2 revízia|$2 revízie|$2 revízií}} pre požadovaný rozdiel ($1) {{PLURAL:$2|neexistuje|neexistujú|neexistuje}}.\n\nPravdepodobne ste nasledovali zastaraný odkaz na rozdiel revízií, z ktorých niektorá bola medzičasom odstránená.\nPodrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zázname zmazaní].",
        "searchresults": "Výsledky vyhľadávania",
        "notextmatches": "V textoch stránok nebola nájdená zhoda",
        "prevn": "{{PLURAL:$1|predošlá|predošlé|predošlých}} $1",
        "nextn": "{{PLURAL:$1|ďalšia|ďalšie|ďalších}} $1",
+       "prev-page": "predošlá stránka",
+       "next-page": "ďalšia stránka",
        "prevn-title": "{{PLURAL:$1|Predošlý $1 výsledok|Predošlé $1 výsledky|Predošlých $1 výsledkov}}",
        "nextn-title": "{{PLURAL:$1|Ďalší $1 výsledok|Ďalšie $1 výsledky|Ďalších $1 výsledkov}}",
        "shown-title": "Zobraziť $1 {{PLURAL:$1|výsledok|výsledky|výsledkov}} na stránku",
        "search-result-category-size": "{{PLURAL:$1|1 člen|$1 členovia|$1 členov}} ({{PLURAL:$2|1 podkategória|$2 podkategórie|$2 podkategórií}}, {{PLURAL:$3|1 súbor|$3 súbory|$3 súborov}})",
        "search-redirect": "(presmerovanie $1)",
        "search-section": "(sekcia $1)",
+       "search-category": "($1 kategória)",
        "search-suggest": "Mali ste na mysli „$1“?",
        "search-interwiki-caption": "Sesterské projekty",
        "search-interwiki-default": "$1 výsledkov:",
        "searchrelated": "súvisiace",
        "searchall": "všetko",
        "showingresults": "Nižšie {{PLURAL:$1|je zobrazený jeden výsledok|sú zobrazené '''1''' výsledky|je zobrazených '''$1''' výsledkov}}, počnúc od  #<b>$2</b>.",
-       "search-showingresults": "{{PLURAL:$4|Výsledok <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1 - $2</strong> z <strong>$3</strong>}}",
+       "showingresultsinrange": "Nižšie {{PLURAL:$1|je zobrazený|sú zobrazené|je zobrazených}} max <strong>$1</strong> {{PLURAL:$1|výsledok|výsledky|výsledkov}} v rozsahu #<strong>$2</strong> – #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Výsledok <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1 – $2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Vyhľadávanie nenašlo žiadne výsledky.",
        "powersearch-legend": "Pokročilé hľadanie",
        "powersearch-ns": "Hľadať v menných priestoroch:",
        "powersearch-togglelabel": "Skontrolovať:",
        "powersearch-toggleall": "Všetky",
        "powersearch-togglenone": "Žiadne",
+       "powersearch-remember": "Zapamätať si výber pre budúce vyhľadávania",
        "search-external": "Externé vyhľadávanie",
        "searchdisabled": "Prepáčte! Fulltextové vyhľadávanie bolo dočasne vypnuté z dôvodu preťaženia. Zatiaľ môžete použiť hľadanie pomocou Google, ktoré však nemusí byť aktuálne.",
        "search-error": "Pri hľadaní sa vyskytla chyba:$1",
        "preferences": "Nastavenia",
        "mypreferences": "Nastavenia",
        "prefs-edits": "Počet úprav:",
+       "prefsnologintext2": "Ak chcete zmeniť prílohy, prosím prihláste sa",
        "prefs-skin": "Vzhľad",
        "skin-preview": "Náhľad",
        "datedefault": "štandardný",
        "prefs-personal": "Profil",
        "prefs-rc": "Posledné úpravy",
        "prefs-watchlist": "Sledované stránky",
+       "prefs-editwatchlist": "Upraviť zoznam sledovaných stránok",
+       "prefs-editwatchlist-label": "Upraviť položky vášho zoznamu sledovaných:",
+       "prefs-editwatchlist-edit": "Zobraziť a odstrániť položky",
+       "prefs-editwatchlist-raw": "Upraviť textovú verziu zoznamu",
+       "prefs-editwatchlist-clear": "Vyprázdniť zoznam sledovaných stránok",
        "prefs-watchlist-days": "Koľko dní zobrazovať v sledovaných stránkach:",
        "prefs-watchlist-days-max": "Najviac $1 {{PLURAL:$1|deň|dni|dní}}",
        "prefs-watchlist-edits": "Počet úprav, ktorý sa zobrazí v rozšírenom zozname sledovaných:",
        "prefs-resetpass": "Zmeniť heslo",
        "prefs-changeemail": "Zmeniť email",
        "prefs-setemail": "Nastaviť emailovú adresu",
-       "prefs-email": "Možnosti emailu",
+       "prefs-email": "Možnosti e-mailu",
        "prefs-rendering": "Vzhľad",
        "saveprefs": "Uložiť nastavenia",
        "restoreprefs": "Obnoviť všetky predvolené nastavenia (vo všetkých sekciách)",
        "prefs-custom-js": "Vlastný JS",
        "prefs-common-css-js": "Spoločné CSS/JS pre všetky témy vzhľadu:",
        "prefs-reset-intro": "Túto stránku môžete použiť na vrátenie predvolených hodnôt vašich nastavení.\nTúto operáciu nemožno vrátiť.",
-       "prefs-emailconfirm-label": "Potvrdenie emailu:",
+       "prefs-emailconfirm-label": "Overenie e-emailu:",
        "youremail": "Váš e-mail²",
        "username": "{{GENDER:$1|Používateľské meno}}:",
        "prefs-memberingroups": "{{GENDER:$2|Člen|Členovia}} {{PLURAL:$1|skupiny|skupín}}:",
        "yourvariant": "Variant jazyka obsahu:",
        "prefs-help-variant": "Váš preferovaný variant alebo pravopis, ako sa majú na tejto wiki zobrazovať obsahové stránky.",
        "yournick": "Podpis:",
-       "prefs-help-signature": "Komentáre na diskusných stránkach by ste mali podpisovať pomocou „<nowiki>~~~~</nowiki>“, čo sa prevedie na váš podpis a časovú známku.",
+       "prefs-help-signature": "Komentáre na diskusných stránkach by ste mali podpisovať pomocou „<nowiki>~~~~</nowiki>“, čo sa prevedie na váš podpis a čas príspevku.",
        "badsig": "Neplatný podpis v pôvodnom tvare; skontrolujte HTML značky.",
        "badsiglength": "Váš podpis je príliš dlhý.\nMusí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.",
        "yourgender": "Ako si želáte byť označovaný?",
        "prefs-help-gender": "Nastavenie tejto voľby nie je povinné.\nSoftvér používa toto nastavenie na správne oslovenie a označenie vás ostatným v závislosti od gramatického rodu. Táto informácia bude verejná.",
        "email": "E-mail",
        "prefs-help-realname": "¹ Skutočné meno (nepovinné): ak sa rozhodnete ho poskytnúť, bude použité na označenie vašej práce.",
-       "prefs-help-email": "Emailová adresa je nepovinný údaj, ale je potrebná v prípade, že ak zabudnete heslo, môžete si na email vyžiadať nové.",
-       "prefs-help-email-others": "Môžete tiež umožniť ostatným kontaktovať vás prostredníctvom vašej používateľskej alebo diskusnej stránky bez nutnosti odhaliť vašu identitu.",
+       "prefs-help-email": "E-mailová adresa je nepovinný údaj, umožní ale zaslanie nového hesla v prípade, že svoje heslo zabudnete.",
+       "prefs-help-email-others": "Môžete tiež umožniť ostatným kontaktovať vás e-mailom pomocou odkazu z vašej používateľskej alebo diskusnej stránky, bez nutnosti odhaliť vašu identitu.",
        "prefs-help-email-required": "Vyžaduje sa e-mailová adresa.",
        "prefs-info": "Základné informácie",
        "prefs-i18n": "Internacionalizácia",
        "prefs-advancedwatchlist": "Rozšírené možnosti",
        "prefs-displayrc": "Možnosti zobrazenia",
        "prefs-displaywatchlist": "Možnosti zobrazenia",
+       "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Rozdiely",
        "prefs-help-prefershttps": "Táto voľba sa prejaví pri vašom ďalšom prihlásení.",
-       "email-address-validity-valid": "Formát e-mailovej adresa vyzerá byť správny",
+       "prefswarning-warning": "Vykonali ste zmeny v nastaveniach, ktoré zatiaľ nie sú uložené. Ak túto stránku opustíte bez kliknutia na „$1“, vaše nastavenia sa neaktualizujú.",
+       "email-address-validity-valid": "Formát e-mailovej adresy sa zdá byť správny",
        "email-address-validity-invalid": "Zadajte platnú e-mailovú adresu",
        "userrights": "Spravovanie používateľských práv",
        "userrights-lookup-user": "Spravovať skupiny používateľov",
        "right-browsearchive": "Hľadať v zmazaných stránkach",
        "right-undelete": "Obnoviť zmazanú stránku",
        "right-suppressrevision": "Kontrolovať a obnovovať revízie skryté správcom",
+       "right-viewsuppressed": "Zobrazovať revízie skryté pred všetkými používateľmi",
        "right-suppressionlog": "Zobrazovať súkromné záznamy",
        "right-block": "Blokovať ostatných používateľov",
        "right-blockemail": "Zablokovať používateľovi posielanie emailu",
        "right-protect": "Meniť úroveň zamknutia a upravovať kaskádovito zamknuté stránky",
        "right-editprotected": "Upravovať stránky zamknuté ako „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "Upravovať stránky zamknuté ako „{{int:protect-level-autoconfirmed}}“",
+       "right-editcontentmodel": "Upravovať model obsahu stránky",
        "right-editinterface": "Upravovať správy používateľského rozhrania",
        "right-editusercssjs": "Upravovať CSS a JS súbory ostatných používateľov",
        "right-editusercss": "Upravovať CSS súbory ostatných používateľov",
        "action-viewmywatchlist": "zobraziť zoznam sledovaných stránok",
        "action-viewmyprivateinfo": "zobraziť vaše súkromné údaje",
        "action-editmyprivateinfo": "upraviť vaše súkromné údaje",
+       "action-editcontentmodel": "upraviť model obsahu stránky",
+       "action-managechangetags": "vytvorte a odstráňte značky z databázy",
        "nchanges": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslednej návštevy}}",
        "enhancedrc-history": "história",
        "rcshowhidebots": "$1 botov",
        "rcshowhidebots-show": "Zobraziť",
        "rcshowhidebots-hide": "Skryť",
-       "rcshowhideliu": "$1 registrovaní užívatelia",
+       "rcshowhideliu": "$1 registrovaných používateľov",
        "rcshowhideliu-show": "Zobraziť",
        "rcshowhideliu-hide": "Skryť",
        "rcshowhideanons": "$1 anonymných používateľov",
        "license": "Licencovanie:",
        "license-header": "Licencovanie",
        "nolicense": "Nič nebolo vybrané",
+       "licenses-edit": "Uprav možnosti licencie",
        "license-nopreview": "(Náhľad nie je dostupný)",
        "upload_source_url": " (platný, verejne prístupný URL)",
        "upload_source_file": " (súbor na vašom počítači)",
        "listfiles-delete": "zmazať",
        "listfiles-summary": "Táto špeciálna stránka zobrazuje všetky nahrané súbory.",
        "listfiles_search_for": "Hľadať názov súboru:",
+       "listfiles-userdoesnotexist": "Používateľské konto „$1“ nie je zaregistrované.",
        "imgfile": "súbor",
        "listfiles": "Zoznam obrázkov",
        "listfiles_thumb": "Náhľad",
        "filerevert-defaultcomment": "Obnovená verzia z $1, $2",
        "filerevert-submit": "Obnoviť",
        "filerevert-success": "'''[[Media:$1|$1]]''' bol obnovený na [$4 verziu z $2, $3].",
-       "filerevert-badversion": "Neexistuje predchádzajúca lokálna verzia tohto súboru s požadovanopu časovou známkou.",
+       "filerevert-badversion": "Neexistuje predchádzajúca lokálna verzia tohto súboru s požadovanou časovou značkou.",
        "filedelete": "Zmazať $1",
        "filedelete-legend": "Zmazať súbor",
        "filedelete-intro": "Chystáte sa zmazať súbor '''[[Media:$1|$1]]''' spolu s celou jeho históriou.",
        "randomincategory-nopages": "V [[:Category:$1|kategórii $1]] nie sú žiadne stránky.",
        "randomincategory-category": "Kategória:",
        "randomincategory-legend": "Náhodná stránka v kategórii",
+       "randomincategory-submit": "Vykonať",
        "randomredirect": "Náhodná presmerovacia stránka",
        "randomredirect-nopages": "V mennom „$1“ priestore nie sú žiadne presmerovania.",
        "statistics": "Štatistiky",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki odkaz|interwiki odkazy|interwiki odkazov}}",
        "nlinks": "$1 {{PLURAL:$1|odkaz|odkazy|odkazov}}",
        "nmembers": "$1 {{PLURAL:$1|člen|členovia|členov}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|člen|členovia|členov}}",
        "nrevisions": "$1 {{PLURAL:$1|revízia|revízie|revízií}}",
-       "nviews": "$1 {{PLURAL:$1|návšteva|návštevy|návštev}}",
        "nimagelinks": "Použité na $1 {{PLURAL:$1|stránke|stránkach}}",
        "ntransclusions": "použité na $1 {{PLURAL:$1|stránke|stránkach}}",
        "specialpage-empty": "Táto správa neobsahuje žiadne položky.",
        "unusedimages": "Nepoužité obrázky",
        "wantedcategories": "Žiadané kategórie",
        "wantedpages": "Žiadané stránky",
+       "wantedpages-summary": "Zoznam neexistujúcich stránok, na ktoré smeruje najviac odkazov, s výnimkou stránok, na ktoré odkazujú len presmerovania. Pre zoznam neexistujúcich stránok, na ktoré odkazujú presmerovania, pozri [[{{#special:BrokenRedirects}}|zoznam pokazených presmerovaní]].",
        "wantedpages-badtitle": "Neplatný názov vo výsledkoch: $1",
        "wantedfiles": "Žiadané súbory",
        "wantedfiletext-cat": "Nasledovné súbory sa používajú, ale nie sú k dispozícii. Súbory z cudzích repozitárov môžu byť uvedené aj napriek tomu, že existujú. Takéto falošné poplachy budú <del>prečiarknuté</del>. Okrem toho stránky, ktoré obsahujú vložené súbory, ktoré nie sú k dispozícii sú uvedené na [[:$1]].",
        "deadendpagestext": "Nasledujúce stránky neodkazujú na žiadne iné stránky na {{GRAMMAR:lokál|{{SITENAME}}}}.",
        "protectedpages": "Zamknuté stránky",
        "protectedpages-indef": "Zamknutia iba na neurčito",
+       "protectedpages-summary": "Táto stránka obsahuje zoznam existujúcich stránok, ktoré sú momentálne zamknuté. Zoznam názvov zamknutých proti vytvoreniu nájdete na stránke [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Iba kaskádové zamykanie",
        "protectedpages-noredirect": "Skryť presmerovania",
        "protectedpagesempty": "Momentálne nie sú žiadne stránky s týmito parametrami zamknuté.",
-       "protectedpages-timestamp": "Časová známka",
+       "protectedpages-timestamp": "Dátum a čas",
        "protectedpages-page": "Stránka",
        "protectedpages-expiry": "Koniec platnosti",
+       "protectedpages-performer": "Zamkol",
        "protectedpages-params": "Nastavenie zámku",
        "protectedpages-reason": "Dôvod",
        "protectedpages-unknown-timestamp": "Neznáme",
        "protectedpages-unknown-performer": "Neznámy redaktor",
        "protectedtitles": "Zamknuté názvy",
+       "protectedtitles-summary": "Táto stránka obsahuje zoznam názvov, ktoré sú momentálne zamknuté proti vytvoreniu. Zoznam existujúcich zamknutých stránok nájdete na stránke [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Tieto parametre momentálne nezamykajú žiadne názvy stránok.",
        "listusers": "Zoznam používateľov",
        "listusers-editsonly": "Vynechať používateľov bez úprav",
        "logempty": "V zázname neboli nájdené zodpovedajúce položky.",
        "log-title-wildcard": "Hľadať názvy začínajúce týmto textom",
        "showhideselectedlogentries": "Zobraziť/skryť vybraté položky záznamu",
+       "log-edit-tags": "Editovať značky zvolených položiek záznamu",
        "allpages": "Všetky stránky",
        "nextpage": "Ďalšia stránka ($1)",
        "prevpage": "Predchádzajúca stránka ($1)",
        "trackingcategories-msg": "Sledovacia kategória",
        "trackingcategories-name": "Názov správy",
        "trackingcategories-desc": "Kritériá pre zaradenie do kategórie",
-       "noindex-category-desc": "Stránka nieje indexovaná robotmi, pretože obsahuje magické slovo <code><nowiki>__NOINDEX__</nowiki></code> a je v mennom priestore, v ktorom je tento príznak povolený.",
+       "noindex-category-desc": "Stránka nie je indexovaná robotmi, pretože obsahuje magické slovo <code><nowiki>__NOINDEX__</nowiki></code> a je v mennom priestore, v ktorom je tento príznak povolený.",
+       "index-category-desc": "Stránka obsahuje magické slovo <code><nowiki>__INDEX__</nowiki></code> (a je v mennom prostore, v ktorom je tento príznak povolený), takže je indexovaná robotmi, hoci by normálne nebola.",
+       "post-expand-template-inclusion-category-desc": "Stránka je po rozbalení všetkých šablón väčšia než <code>$wgMaxArticleSize</code>, takže niektoré šablóny nemohli byť rozbalené.",
+       "post-expand-template-argument-category-desc": "Stránka je po rozbalení parametrov šablón (niečo v trojitých zátvorkách, napr. <code>{{{Foo}}}</code>) väčšia než <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Stránka používa priveľa náročných funkcií syntaktického analyzátoru (ako <code>#ifexist</code>). Pozri [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Stránka obsahuje nefunkčný odkaz na súbor (odkaz na neexistujúci súbor).",
+       "hidden-category-category-desc": "Kategória vo svojom zdrojovom kóde obsahuje <code><nowiki>__HIDDENCAT__</nowiki></code>, čo má za následok, že sa na stránkach medzi odkazmi na kategórie implicitne nezobrazuje.",
        "trackingcategories-nodesc": "Popis nie je k dispozícii.",
        "trackingcategories-disabled": "Kategória je vypnutá",
        "mailnologin": "Žiadna adresa na zaslanie",
        "emailccsubject": "Kópia správy pre $1: $2",
        "emailsent": "E-mail bol odoslaný",
        "emailsenttext": "Vaša e-mailová správa bola odoslaná.",
-       "emailuserfooter": "Tento email poslal $1 používateľovi $2 pomocou funkcie „Email používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.",
+       "emailuserfooter": "Tento e-mail poslal/-a/ $1 používateľovi $2 pomocou funkcie „E-mail používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.",
        "usermessage-summary": "Zanechanie správy systému.",
        "usermessage-editor": "Správy systému",
        "watchlist": "Sledované stránky",
        "watchnologin": "Nie ste prihlásený/á",
        "addwatch": "Pridať do zoznamu sledovaných stránok",
        "addedwatchtext": "Stránka „[[:$1]]“ bola pridaná do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].\nBudú tam uvedené aj budúce úpravy tejto stránky a jej diskusie.",
+       "addedwatchtext-short": "Stránka „$1“ bola pridaná do vášho zoznamu sledovaných.",
        "removewatch": "Odstrániť zo zoznamu sledovaných",
        "removedwatchtext": "Stránka „[[:$1]]“ bola odstránená z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].",
+       "removedwatchtext-short": "Stránka „$1“ bola odstránená z vášho zoznamu sledovaných.",
        "watch": "Sledovať",
        "watchthispage": "Sledovať túto stránku",
        "unwatch": "Nesledovať",
        "protect-locked-blocked": "Nemôžete meniť úroveň ochrany, kým ste zablokovaný.\nTu sú aktuálne nastavenia stránky '''$1''':",
        "protect-locked-dblock": "Nie je možné zmeniť úroveň ochrany z dôvodu aktívneho zámku databázy.\nTu sú aktuálne nastavenia stránky '''$1''':",
        "protect-locked-access": "Váš účet nemá oprávnenie meniť úroveň ochrany stránky.\nTu sú aktuálne nastavenia stránky '''$1''':",
-       "protect-cascadeon": "Táto stránka je momentálne zamknutá, lebo je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá má|nasledovných stránkach, ktoré majú}} zapnutú kaskádovú ochranu. Môžete zmeniť úroveň ochrany tejto stránky, ale neovplyvní to kaskádovú ochranu.",
+       "protect-cascadeon": "Táto stránka je momentálne zamknutá, lebo je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá má|nasledovných stránkach, ktoré majú}} zapnutú kaskádovú ochranu. Zmeny úrovne ochrany tejto stránky neovplyvnia kaskádovú ochranu.",
        "protect-default": "Povoliť všetkých používateľov",
        "protect-fallback": "Povoliť iba používateľov s oprávnením „$1“",
        "protect-level-autoconfirmed": "Povoliť iba používateľov s potvrdeným emailom",
        "protect-othertime": "Iný čas:",
        "protect-othertime-op": "iný čas",
        "protect-existing-expiry": "Súčasný čas ukončenia: $2, $3",
+       "protect-existing-expiry-infinity": "Súčasný čas ukončenia: do odvolania",
        "protect-otherreason": "Iný/ďalší dôvod:",
        "protect-otherreason-op": "Iný/ďalší dôvod",
        "protect-dropdown": "* Bežné dôvody zamknutia\n** Nadmerný vandalizmus\n** Nadmerný spam\n** Neproduktívne upravovacie vojny\n** Veľmi často naštevovaná stránka",
        "undelete-search-prefix": "Zobraziť stránky od:",
        "undelete-search-submit": "Hľadať",
        "undelete-no-results": "V archíve mazaní neboli nájdené zodpovedajúce stránky.",
-       "undelete-filename-mismatch": "Nebolo možné obnoviť revíziu súboru s časovou známkou $1: rozdiel v názvoch súborov",
-       "undelete-bad-store-key": "Nebolo možné obnoviť revíziu súboru s časovou známkou $1: súbor chýbal predtým, než bol zmazaný",
+       "undelete-filename-mismatch": "Nebolo možné obnoviť revíziu súboru s časovou znkou $1: rozdiel v názvoch súborov",
+       "undelete-bad-store-key": "Nebolo možné obnoviť revíziu súboru s časovou znkou $1: súbor chýbal predtým, než bol zmazaný",
        "undelete-cleanup-error": "Chyba pri mazaní nepoužitého archívneho súboru „$1“.",
        "undelete-missing-filearchive": "Nebolo možné obnoviť archív s ID $1, pretože sa nenachádza v databáze. Je možné, že už bol obnovený.",
        "undelete-error": "Chyba pri obnovovaní stránky",
        "namespace": "Menný priestor:",
        "invert": "Invertovať výber",
        "tooltip-invert": "Zaškrtnite, ak chcete skryť zmeny na stránkach vo vybranom mennom priestore (a súvisiaci menný priestor ak je zaškrtnuté)",
+       "tooltip-whatlinkshere-invert": "Zaškrtnutím tohoto políčka skryjete odkazy zo stránok vo zvolenom mennom priestore.",
        "namespace_association": "Asociovaný menný priestor",
        "tooltip-namespace_association": "Zaškrtnite, ak chcete zahrnúť aj diskusné stránky alebo predmetový menný priestor spojený s vybraným menným priestorom",
        "blanknamespace": "(Hlavný)",
        "contributions-title": "Príspevky používateľa pre $1",
        "mycontris": "Príspevky",
        "contribsub2": "Príspevky {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Používateľské konto „$1“ nie je zaregistrované.",
        "nocontribs": "Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.",
        "uctop": "(aktuálne)",
        "month": "Mesiac:",
        "sp-contributions-blocked-notice-anon": "Táto IP adresa je momentálne zablokovaná.\nNižšie si môžete pozrieť najnovšiu položku záznamu blokovaní:",
        "sp-contributions-search": "Hľadať príspevky",
        "sp-contributions-username": "IP adresa alebo meno používateľa:",
-       "sp-contributions-toponly": "Zobraziť iba posledné revízie",
+       "sp-contributions-toponly": "Zobraziť len posledné revízie",
+       "sp-contributions-newonly": "Zobraziť len založenia stránok",
        "sp-contributions-submit": "Hľadať",
        "whatlinkshere": "Odkazy na túto stránku",
        "whatlinkshere-title": "Stránky odkazujúce na „$1“",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bol zablokovaný.<br />\n[[Special:BlockList|IP block list]] obsahuje zoznam blokovaní.",
        "ipb-blockingself": "Chystáte sa zablokovať sám seba! Ste si istí, že to chcete urobiť?",
        "ipb-confirmhideuser": "Chystáte sa zablokovať používateľa so zapnutou funkciou „skryť používateľa“. Tým sa potlačí meno používateľa vo všetkých zoznamoch a záznamoch. Ste si istí, že chcete urobiť?",
+       "ipb-confirmaction": "Ak ste si {{GENDER:|istý|istá|istí}}, že to chcete urobiť, zaškrtnite prepínač „{{int:ipb-confirm}}“ nižšie.",
        "ipb-edit-dropdown": "Upraviť dôvody pre blokovanie",
        "ipb-unblock-addr": "Odblokovať $1",
        "ipb-unblock": "Odblokovať používateľa alebo IP adresu",
        "unblocked": "[[User:$1|$1]] bol odblokovaný",
        "unblocked-range": "$1 bol odblokovaný",
        "unblocked-id": "Blokovanie $1 bolo odstránené",
+       "unblocked-ip": "Adresa [[Special:Contributions/$1|$1]] bola odblokovaná.",
        "blocklist": "Zablokovaní používatelia",
        "ipblocklist": "Zablokovaní používatelia",
        "ipblocklist-legend": "Nájsť zablokovaného používateľa",
        "blocklist-tempblocks": "Skryť dočasné blokovania",
        "blocklist-addressblocks": "Skryť blokovania jednotlivých IP",
        "blocklist-rangeblocks": "Skryť blokovania rozsahov",
-       "blocklist-timestamp": "Časová známka",
+       "blocklist-timestamp": "Dátum a čas",
        "blocklist-target": "Cieľ",
        "blocklist-expiry": "Vyprší",
        "blocklist-by": "Blokujúci správca",
        "movepagetalktext": "Príslušná diskusná stránka (ak existuje) bude premiestnená spolu so samotnou stránkou; '''nestane sa tak, iba ak:'''\n*už existuje Diskusná stránka pod týmto novým menom, alebo\n*nezaškrtnete nižšie sa nachádzajúci textový rámček.\n\nV takých prípadoch budete musieť, ak si to želáte, premiestniť alebo zlúčiť stránku ručne.",
        "movearticle": "Presunúť stránku",
        "moveuserpage-warning": "'''Upozornenie:''' Chystáte sa presunúť používateľskú stránku. Pamätajte, že týmto presuniete iba stránku a používateľ ''nebude'' premenovaný.",
+       "movecategorypage-warning": "<strong>Upozornenie:</strong> Chystáte sa presunúť stránku kategórie. Uvedomte si, že presunutá bude iba táto stránka a že žiadne stránky v pôvodnej kategórii <em>nebudú</em> do novej kategórie automaticky preradené.",
        "movenologintext": "Musíte byť registrovaný používateľ a [[Special:UserLogin|prihlásený]], aby ste mohli presunúť stránku.",
-       "movenotallowed": "Nemáte povolenie presúvať stránky.",
+       "movenotallowed": "Nemáte oprávnenie presúvať stránky.",
        "movenotallowedfile": "Nemáte oprávnenie presúvať súbory.",
-       "cant-move-user-page": "Nemáte povolenie presúvať koreňové stránky používateľov.",
+       "cant-move-user-page": "Nemáte oprávnenie presúvať koreňové stránky používateľov.",
        "cant-move-to-user-page": "Nemáte oprávnenie presunúť stránku na stránku používateľa (iba na podstránku používateľa).",
+       "cant-move-category-page": "Nemáte oprávnenie presúvať stránky kategórií.",
+       "cant-move-to-category-page": "Nemáte oprávnenie presunúť stránku na stránku kategórie.",
        "newtitle": "Na nový názov:",
        "move-watch": "Sledovať túto stránku",
        "movepagebtn": "Presunúť stránku",
        "thumbnail-temp-create": "Nie je možné vytvoriť dočasný súbor náhľadu",
        "thumbnail-dest-create": "Nie je možné uložiť náhľad do cieľa",
        "thumbnail_invalid_params": "Neplatné parametre náhľadu",
+       "thumbnail_toobigimagearea": "Súbor s rozmermi väčšími než $1",
        "thumbnail_dest_directory": "Nebolo možné vytvoriť cieľový adresár",
        "thumbnail_image-type": "Nepodporovaný typ obrázka",
        "thumbnail_gd-library": "Neúplná konfigurácia knižnice GD: chýba funkcia $1",
        "thumbnail_image-missing": "Zdá sa, že súbor chýba: $1",
+       "thumbnail_image-failure-limit": "V poslednej dobe došlo k nejmenej $1 pokusom o vygenerovanie tohoto náhľadu. Skúste to prosím neskôr.",
        "import": "Import stránok",
        "importinterwiki": "Transwiki import",
        "import-interwiki-text": "Zvoľte wiki a názov stránky, ktorá sa má importovať.\nDátumy revízií a mená používateľov budú zachované.\nVšetky transwiki importy sa zaznamenávajú v [[Special:Log/import|Zázname importov]].",
        "javascripttest": "Testovanie JavaScriptu",
        "javascripttest-pagetext-noframework": "Táto stránka je vyhradená pre testy JavaScriptu.",
        "javascripttest-pagetext-unknownframework": "Neznáma testovacia platfoma „$1“.",
+       "javascripttest-pagetext-unknownaction": "Neznáma akcia: „$1“.",
        "javascripttest-pagetext-frameworks": "Prosím vyberte jednu z nasledovných testovacích platforiem: $1",
        "javascripttest-pagetext-skins": "Vyberte tému vzhľadu, na ktorej chcete spustiť testy:",
        "javascripttest-qunit-intro": "Pozri [$1 dokumentácia testovania] na mediawiki.org.",
        "tooltip-n-mainpage-description": "Navštíviť hlavnú stránku",
        "tooltip-n-portal": "O projekte, ako môžete prispieť, kde čo nájsť",
        "tooltip-n-currentevents": "Aktuálne udalosti a ich pozadie",
-       "tooltip-n-recentchanges": "Zoznam posledných úprav na wiki",
+       "tooltip-n-recentchanges": "Zoznam posledných úprav na tejto wiki",
        "tooltip-n-randompage": "Zobraziť náhodnú stránku",
-       "tooltip-n-help": "Miesto, kde sa môžete dozvedieť",
+       "tooltip-n-help": "Miesto, kde nájdete pomoc",
        "tooltip-t-whatlinkshere": "Zoznam všetkých wiki stránok, ktoré sem odkazujú",
        "tooltip-t-recentchangeslinked": "Posledné úpravy v stránkach, na ktoré odkazuje táto stránka",
        "tooltip-feed-rss": "RSS feed pre túto stránku",
        "tooltip-feed-atom": "Kanál Atom pre túto stránku",
        "tooltip-t-contributions": "Pozrieť si zoznam príspevkov od tohto používateľa",
        "tooltip-t-emailuser": "Poslať e-mail tomuto používateľovi",
+       "tooltip-t-info": "Viac informácií o tejto stránke",
        "tooltip-t-upload": "Nahranie súborov",
        "tooltip-t-specialpages": "Zoznam všetkých špeciálnych stránok",
        "tooltip-t-print": "Verzia tejto stránky pre tlač",
        "pageinfo-protect-cascading-yes": "Áno",
        "pageinfo-protect-cascading-from": "Zámky pochádzajú z kaskádových zamknutí",
        "pageinfo-category-info": "Informácie o kategórii",
+       "pageinfo-category-total": "Celkový počet členov",
        "pageinfo-category-pages": "Počet stránok",
        "pageinfo-category-subcats": "Počet podkategórií",
        "pageinfo-category-files": "Počet súborov",
        "patrol-log-page": "Záznam strážení",
        "patrol-log-header": "Toto je záznam strážených revízií.",
        "log-show-hide-patrol": "záznam stráženia $1",
+       "log-show-hide-tag": "záznam značiek $1",
        "deletedrevision": "Zmazať staré verzie $1",
        "filedeleteerror-short": "Chyba pri mazaní súboru: $1",
        "filedeleteerror-long": "Vyskytli sa chyby pri mazaní súboru:\n\n$1",
        "confirmemail_loggedin": "Vaša e-mailová adresa bola potvrdená.",
        "confirmemail_subject": "{{SITENAME}} - potvrdenie e-mailovej adresy",
        "confirmemail_body": "Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet\n„$2“ s touto e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nPre potvrdenie, že tento účet skutočne patrí vám a pre aktivovanie\ne-mailových funkcií na {{GRAMMAR:lokál|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk ste to *neboli* vy, otvorte tento odkaz,\nčím zrušíte potvrdenie emailovej adresy:\n\n$5\n\nTento potvrdzovací kód vyprší $4.",
-       "confirmemail_body_changed": "Niekto, pravdepodobne vy, z IP adresy $1,\nzmenil emailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nAby ste potvrdili, že tento účet skutočne patrí vám a znova\naktivovali funkcie emailu na{{GRAMMAR:lokál|{{SITENAME}}}},\notvorte nasledovný odkaz v prehliadači:\n\n$3\n\nAk vám účet *nepatrí*, otvorte namiesto toho tento odkaz,\nktorý zruší potvrdenie emailovej adresy:\n\n$5\n\nPlatnosť tohto potvrdzovacieho kódu vyprší $4.",
+       "confirmemail_body_changed": "Niekto, pravdepodobne vy, z IP adresy $1,\nzmenil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nAby ste potvrdili, že tento účet skutočne patrí vám a znova\naktivovali funkcie emailu na{{GRAMMAR:lokál|{{SITENAME}}}},\notvorte nasledovný odkaz v prehliadači:\n\n$3\n\nAk vám účet *nepatrí*, otvorte namiesto toho tento odkaz,\nktorý zruší potvrdenie emailovej adresy:\n\n$5\n\nPlatnosť tohoto potvrdzovacieho kódu vyprší $4.",
        "confirmemail_body_set": "Niekto, pravdepodobne vy, z IP adresy $1\nnastavil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:genitív|{{SITENAME}}}}.\n\nAk chcete potvrdiť, že tento účet skutočne patrí vám a aktivovať\ne-mailové funkcie na {{GRAMMAR:genitív|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk účet nie je *nepatrí* patrí k vám, nasledujte tento odkaz,\nktorý zruší potvrdenie e-mailovej adresy:\n\n$5\n\nPlatnosť tohto potvrdzovacieho kódu vyprší $4.",
        "confirmemail_invalidated": "Potvrdenie emailovej adresy bolo zrušené",
        "invalidateemail": "Zrušiť potvrdenie emailovej adresy",
        "lag-warn-high": "Kvôli dlhšej odozve databázového servera nemusia byť úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} v tomto zozname zobrazené.",
        "watchlistedit-normal-title": "Upraviť zoznam sledovaných stránok",
        "watchlistedit-normal-legend": "Odstrániť všetky stránky zo zoznamu sledovaných stránok",
-       "watchlistedit-normal-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete odstrániť položku, začiarknite políčko vedľa nej a kliknite na „{{int:Watchlistedit-normal-submit}}“. Tiež môžete [[Special:EditWatchlist/raw|upravovať nespracovaný zoznam]].",
+       "watchlistedit-normal-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete odstrániť položku, zaškrtnite políčko vedľa nej a kliknite na „{{int:Watchlistedit-normal-submit}}“. Môžete tiež [[Special:EditWatchlist/raw|upraviť textovú verziu zoznamu]].",
        "watchlistedit-normal-submit": "Odstrániť položky",
        "watchlistedit-normal-done": "{{PLURAL:$1|jedna položka bola odstránená|$1 položky boli odstránené|$1 položiek bolo odstránených}} z vášho zoznamu sledovaných stránok:",
-       "watchlistedit-raw-title": "Upravovať nespracovaný zoznam sledovaných stránok",
-       "watchlistedit-raw-legend": "Upravovať nespracovaný zoznam sledovaných stránok",
-       "watchlistedit-raw-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete upravovať položky, pridajte alebo odstráňte ich zo zoznamu tak, aby na každom riadku bola práve jedna.\nPo skončení kliknite na „{{int:Watchlistedit-raw-submit}}“.\nTiež môžete [[Special:EditWatchlist|použiť štandardný editor]].",
+       "watchlistedit-raw-title": "Upraviť textovú verziu zoznamu sledovaných",
+       "watchlistedit-raw-legend": "Upraviť textovú verziu zoznamu sledovaných",
+       "watchlistedit-raw-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete upravovať položky, pridajte alebo odstráňte ich zo zoznamu tak, aby na každom riadku bola práve jedna.\nPo skončení kliknite na „{{int:Watchlistedit-raw-submit}}“.\nMôžete tiež [[Special:EditWatchlist|použiť štandardný editor]].",
        "watchlistedit-raw-titles": "Stránky:",
        "watchlistedit-raw-submit": "Aktualizovať zoznam sledovaných stránok",
        "watchlistedit-raw-done": "Váš zoznam sledovaných stránok bol aktualizovaný.",
        "watchlistedit-clear-submit": "Vyprázdniť zoznam sledovaných stránok (natrvalo!)",
        "watchlistedit-clear-done": "Váš zoznam sledovaných stránok bol vyprázdnený.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|Bol odstránený jeden názov|Boli odstránené $1 názvy|Bolo odstránených $1 názvov}}:",
+       "watchlistedit-too-many": "Zoznam obsahuje priveľa stránok na zobrazenie.",
        "watchlisttools-clear": "Vyprázdniť zoznam sledovaných stránok",
        "watchlisttools-view": "Zobraziť súvisiace zmeny",
        "watchlisttools-edit": "Zobraziť a upraviť zoznam sledovaných stránok",
-       "watchlisttools-raw": "Upraviť nespracovaný zoznam sledovaných stránok",
+       "watchlisttools-raw": "Upraviť textovú verziu zoznamu sledovaných stránok",
        "iranian-calendar-m1": "Farvardín",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusia]])",
-       "duplicate-defaultsort": "Upozornenie: Štandardný kláves na zoraďovanie „$2“ nahrádza starý kláves „$1“.",
+       "duplicate-defaultsort": "Upozornenie: DEFAULTSORT s triediacim kľúčom „$2“ prepisuje vyššie nastavenú hodnotu „$1“.",
+       "duplicate-displaytitle": "<strong>Upozornenie:</strong> Predchádzajúci titulok (DISPLAYTITLE) „$1“ je nahradený titulkom „$2“.",
        "version": "Verzia",
        "version-extensions": "Nainštalované rozšírenia",
        "version-skins": "Témy vzhľadu",
        "tags-tag": "Názov značky",
        "tags-display-header": "Vzhľad v zoznamoch úprav",
        "tags-description-header": "Popis významu",
+       "tags-source-header": "Zdroj",
        "tags-active-header": "Aktívna?",
        "tags-hitcount-header": "Označených úprav",
+       "tags-actions-header": "Akcie",
        "tags-active-yes": "Áno",
        "tags-active-no": "Nie",
        "tags-edit": "upraviť",
        "tags-hitcount": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
+       "tags-deactivate-reason": "Dôvod:",
+       "tags-edit-title": "Upraviť značky",
+       "tags-edit-new-tags": "Nové značky:",
+       "tags-edit-remove": "Odstrániť tieto značky:",
+       "tags-edit-chosen-placeholder": "Vyberte niektoré značky",
+       "tags-edit-reason": "Dôvod",
        "comparepages": "Porovnať stránky",
        "compare-page1": "Stránka 1",
        "compare-page2": "Stránka 2",
        "htmlform-chosen-placeholder": "Vyberte možnosť",
        "htmlform-cloner-create": "Pridať ďalšie",
        "htmlform-cloner-delete": "Odstrániť",
+       "htmlform-cloner-required": "Je povinná najmenej jedna hodnota.",
        "sqlite-has-fts": "$1 s podporou vyhľadávania v plnom texte",
        "sqlite-no-fts": "$1 bez podpory vyhľadávania v plnom texte",
        "logentry-delete-delete": "$1 zmazal stránku $3",
        "revdelete-uname-unhid": "používateľské meno odkryté",
        "revdelete-restricted": "obmedzenia správcov použité",
        "revdelete-unrestricted": "obmedzenia správcov odstránené",
+       "logentry-block-block": "$1 {{GENDER:$2|zablokoval|zablokovala}} {{GENDER:$4|používateľa|používateľku}} $3 s časom ukončenia $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|odblokoval|odblokovala}} {{GENDER:$4|používateľa|používateľku}} $3",
+       "logentry-block-reblock": "$1 {{GENDER:$2|zmenil|zmenila}} nastavenia bloku {{GENDER:$4|používateľa|používateľky}} $3 s časom ukončenia $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|zablokoval|zablokovala}} {{GENDER:$4|používateľa|používateľku}} $3 s časom ukončenia $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|zmenil|zmenila}} nastavenia bloku {{GENDER:$4|používateľa|používateľky}} $3 s časom ukončenia $5 $6",
        "logentry-move-move": "$1 premiestnil stránku $3 na $4",
        "logentry-move-move-noredirect": "$1 premiestnil stránku $3 na $4, ale neponechal presmerovanie",
        "logentry-move-move_redir": "$1 premiestnil stránku $3 na $4 prostredníctvom presmerovania",
        "rightsnone": "(žiadne)",
        "revdelete-summary": "zhrnutie úprav",
        "feedback-adding": "Pridáva sa komentár na stránku...",
+       "feedback-back": "Späť",
        "feedback-bugcheck": "Skvelé! Teraz len skontrolujte, či to nie je jedna z už [$1 známych chýb].",
        "feedback-bugnew": "Skontroloval som. Poslať nové hlásenie o chybe.",
        "feedback-bugornote": "Ak ste pripravený podrobne popísať technický problém, prosím pošlite [$1 hlásenie o chybe]. \nV opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš komentár sa pridá na stránku „[$3 $2]“ spolu s vašim používateľským meno a prehliadačom, ktorý používate.",
        "feedback-cancel": "Zrušiť",
        "feedback-close": "Hotovo",
+       "feedback-dialog-title": "Odoslať názor",
+       "feedback-error-title": "Chyba",
        "feedback-error1": "Chyba: Nerozpoznaný výsledok z API",
        "feedback-error2": "Chyba: Úprava sa nepodarila",
        "feedback-error3": "Chyba: Žiadna odpoveď z API",
        "feedback-subject": "Predmet:",
        "feedback-submit": "Odoslať",
        "feedback-thanks": "Ďakujeme. Váš komentár bol odoslaný na stránku „[$2 $1]“.",
+       "feedback-thanks-title": "Ďakujeme",
+       "feedback-useragent": "Prehliadač:",
        "searchsuggest-search": "Hľadať",
        "searchsuggest-containing": "obsahuje...",
        "api-error-badaccess-groups": "Nemáte oprávnenie nahrávať súbory na tejto wiki.",
        "expand_templates_input": "Vstupný text:",
        "expand_templates_output": "Výsledok",
        "expand_templates_xml_output": "XML výstup",
+       "expand_templates_html_output": "Surový HTML výstup",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Odstrániť komentáre",
        "expand_templates_remove_nowiki": "Potlačiť značky <nowiki> vo výsledku",
        "expand_templates_generate_xml": "Zobraziť strom XML",
+       "expand_templates_generate_rawhtml": "Zobraziť surové HTML",
        "expand_templates_preview": "Náhľad",
        "pagelang-name": "Stránka",
        "pagelang-language": "Jazyk",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
        "mediastatistics": "Štatistika súborov",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtov}} ($2; $3 %)",
+       "mediastatistics-table-mimetype": "MIME typ",
+       "mediastatistics-table-extensions": "Možné prípony",
        "mediastatistics-table-count": "Počet súborov",
        "mediastatistics-table-totalbytes": "Celková veľkosť",
        "mediastatistics-header-unknown": "Neznáme",
        "mediastatistics-header-text": "Text",
        "mediastatistics-header-executable": "Spustiteľné súbory",
        "mediastatistics-header-archive": "Komprimované formáty",
+       "json-warn-trailing-comma": "Z JSONu {{PLURAL:$1|bola odstránená 1 koncová čiarka|boli odstránené $1 koncové čiarky|bolo odstránených $1 koncových čiarok}}",
+       "json-error-unknown": "Došlo k problému s JSONom. Chyba: $1",
+       "json-error-depth": "Maximálna hĺbka zásobníka bola prekročená",
+       "json-error-state-mismatch": "Nesprávny alebo poškodený JSON",
+       "json-error-syntax": "Syntaktická chyba",
        "headline-anchor-title": "Odkaz na túto sekciu",
        "special-characters-group-latin": "Latinka",
        "special-characters-group-latinextended": "Latina rozšírené",
        "special-characters-group-persian": "Perzský",
        "special-characters-group-hebrew": "Hebrejské",
        "special-characters-group-bangla": "Bengálčina",
+       "special-characters-group-tamil": "Tamilčina",
        "special-characters-group-telugu": "Telugčina",
-       "special-characters-group-sinhala": "sinhalčina",
-       "special-characters-group-gujarati": "gudžarátčina",
+       "special-characters-group-sinhala": "Sinhalčina",
+       "special-characters-group-gujarati": "Gudžarátčina",
+       "special-characters-group-devanagari": "Dévanágarí",
        "special-characters-group-thai": "Thajské",
        "special-characters-group-lao": "Laoské",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "pomlčka",
+       "special-characters-title-emdash": "dlhá pomlčka",
+       "special-characters-title-minus": "mínus"
 }
index b2b4911..ce555e4 100644 (file)
        "passwordreset": "Ponastavitev gesla",
        "passwordreset-text-one": "Da ponastavite svoje geslo, izpolnite naslednji obrazec.",
        "passwordreset-text-many": "{{PLURAL:$1|Da po e-pošti prejmete začasno geslo, izpolnite eno od polj.}}",
-       "passwordreset-legend": "Ponastavitev gesla",
        "passwordreset-disabled": "Ponastavljanje gesla je na tem wikiju onemogočeno.",
        "passwordreset-emaildisabled": "Na tem wikiju so možnosti e-pošte onemogočene.",
        "passwordreset-username": "Uporabniško ime:",
        "resettokens": "Ponastavitev žetonov",
        "resettokens-text": "Žetone lahko ponastavite, kar omogoča dostop do nekaterih zasebnih podatkov, povezanih z vašim računom.\n\nTo storite, če ste po nesreči žetone z nekom delili, ali če je bil vaš račun ogrožen.",
        "resettokens-no-tokens": "Ni nobenih žetonov za ponastavitev.",
-       "resettokens-legend": "Ponastavitev žetonov",
        "resettokens-tokens": "Žetoni:",
        "resettokens-token-label": "$1 (trenutna vrednost: $2)",
        "resettokens-watchlist-token": "Žeton spletnega vira (Atom/RSS) [[Special:Watchlist|sprememb strani na vašem spisku nadzorov]]",
        "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!'''",
+       "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",
        "protectedpagewarning": "'''Opozorilo: Stran je bila zaklenjena in jo lahko urejajo le uporabniki z administratorskimi pravicami.'''\nZadnji vnos v dnevnik je naveden spodaj:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazen objekt",
        "content-json-empty-array": "Prazno polje",
+       "duplicate-args-warning": "<strong>Opozorilo:</strong> [[:$1]] kliče [[:$2]] z več kot eno vrednostjo za parameter »$3«. Uporabili bomo samo zadnjo navedeno vrednost.",
        "duplicate-args-category": "Strani s podvojenimi argumenti v klicih predlog",
        "duplicate-args-category-desc": "Stran vsebuje klice predlog, ki vsebujejo dvojnike argumentov, kot sta <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ali <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Opozorilo:''' Ta stran vsebuje preveč klicev funkcije razčlenjevalnika kode.\n\nStran naj bi vsebovala manj kot $2 {{PLURAL:$2|klic|klica|klice|klicev}}, trenutno {{PLURAL:$1|je v uporabi $1 klic|sta v uporabi $1 klica|so v uporabi $1 klici|je v uporabi $1 klicev}}.",
        "showhideselectedversions": "Prikaži/skrij izbrane redakcije",
        "editundo": "razveljavi",
        "diff-empty": "(Ni razlike)",
-       "diff-multi-sameuser": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} istega uporabnika ni prikazana)",
-       "diff-multi-otherusers": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|1=drugega uporabnika|$2 uporabnikov}} ni prikazana)",
+       "diff-multi-sameuser": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} istega uporabnika {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|1=drugega uporabnika|$2 uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} več kot $2 {{PLURAL:$2|uporabnika|uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
        "difference-missing-revision": "{{PLURAL:$2|Ene redakcije|$2 redakcij}} razlike ($1) {{PLURAL:$2|nisem}} našel.\n\nPo navadi se to zgodi, ko sledite zastareli povezavi na razliko redakcij strani, ki jo je nekdo izbrisal.\nPodrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Izid iskanja",
        "badsig": "Neveljaven surovi podpis; preverite oznake HTML.",
        "badsiglength": "Vaš podpis je preobsežen.\nNe sme biti daljši od $1 {{PLURAL:$1|znaka|znakov}}.",
        "yourgender": "Kako vam je ljubše, da vas opišemo?",
-       "gender-unknown": "ne želim navesti",
+       "gender-unknown": "Ko boste omenjeni, bo programje uporabilo nevtralen spol, kjer je to mogoče",
        "gender-male": "On ureja wikistrani.",
        "gender-female": "Ona ureja wikistrani.",
        "prefs-help-gender": "Nastavitev ni obvezna.\nProgramje uporablja njeno vrednost za vaše naslavljanje in omenjanje v ustreznem slovničnem spolu.\nPodatek bo javno prikazan.",
        "uploaddisabledtext": "Nalaganje datotek je onemogočeno.",
        "php-uploaddisabledtext": "Nalaganje datotek je onemogočeno v PHP.\nProsimo preverite file_uploads nastavitev.",
        "uploadscripted": "Datoteka vsebuje HTML- ali skriptno kodo, ki bi jo lahko brskalnik razlagal napačno.",
+       "upload-scripted-pi-callback": "Ne moremo naložiti datoteke, ki vsebuje navodila za slogovno obdelavo XML.",
+       "uploaded-script-svg": "V naloženi datoteki SVG smo našli skriptni element »$1«.",
+       "uploaded-hostile-svg": "V slogovnem elementu naložene datoteke SVG smo našli nevaren CSS.",
+       "uploaded-event-handler-on-svg": "Določevanje atributov za dogodke <code>$1=\"$2\"</code> v datotekah SVG ni dovoljeno.",
+       "uploaded-href-attribute-svg": "Atributi href <code>&lt;$1 $2=\"$3\"&gt;</code> z nelokalnimi cilji (npr. http://, javascript: idr.) v datotekah SVG niso dovoljeni.",
+       "uploaded-href-unsafe-target-svg": "V naloženi datoteki SVG smo našli href z nevarnim ciljem <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "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-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-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.",
        "uploadvirus": "Datoteka vsebuje virus!\nPodrobnosti: $1",
        "nmembers": "$1 {{PLURAL:$1|element|elementa|elementi|elementov|elementov}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|element|elementa|elementi|elementov}}",
        "nrevisions": "$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}",
-       "nviews": "$1 {{PLURAL:$1|ogled|ogleda|ogledi|ogledov|ogledov}}",
        "nimagelinks": "Uporabljeno na $1 {{PLURAL:$1|strani|straneh}}",
        "ntransclusions": "uporabljeno na $1 {{PLURAL:$1|strani|straneh}}",
        "specialpage-empty": "Za to poročilo ni rezultatov.",
        "version-libraries": "Nameščene knjižnice",
        "version-libraries-library": "Knjižnica",
        "version-libraries-version": "Različica",
+       "version-libraries-license": "Dovoljenje",
+       "version-libraries-description": "Opis",
+       "version-libraries-authors": "Avtorji",
        "redirect": "Preusmeri po datoteki, uporabniku, strani ali ID-ju redakcije",
        "redirect-legend": "Preusmeritev na datoteko ali stran",
        "redirect-summary": "Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije ali ID strani) ali uporabniško stran (če podate številski ID uporabnika). Uporaba: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ali [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Kmerski",
        "special-characters-title-endash": "navaden pomišljaj",
        "special-characters-title-emdash": "dolgi pomišljaj",
-       "special-characters-title-minus": "znak za minus"
+       "special-characters-title-minus": "znak za minus",
+       "mw-widgets-titleinput-description-new-page": "stran še ne obstaja",
+       "mw-widgets-titleinput-description-redirect": "preusmeritev na $1"
 }
index 877c32c..d828ff5 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-watchlist-token": "Жетон за веб довод (Atom/RSS) вашег [[Special:Watchlist|списка надгледања]]",
        "currentrev": "Текућа измена",
        "currentrev-asof": "Текућа измена од $2 у $3",
        "revisionasof": "Измена од $2 у $3",
-       "revision-info": "Измена од $1; {{GENDER:$6|$2}}$7",
+       "revision-info": "Измена од $1 коју је {{GENDER:$6|уредио $2|уредила $2}}$7",
        "previousrevision": "← Старија измена",
        "nextrevision": "Новија измена →",
        "currentrevisionlink": "Текућа измена",
        "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": "Нема резултата за овај извештај.",
        "special-characters-group-gujarati": "гуџарати",
        "special-characters-group-thai": "тајландски",
        "special-characters-group-lao": "лаоски",
-       "special-characters-group-khmer": "кмерски"
+       "special-characters-group-khmer": "кмерски",
+       "mw-widgets-titleinput-description-new-page": "страница још увек не постоји",
+       "mw-widgets-titleinput-description-redirect": "преусмерава на $1"
 }
index 6c1ba97..a20d502 100644 (file)
        "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-legend": "Poništi lozinku",
        "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:",
        "changeemail-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "resettokens": "Resetovanje žetona",
        "resettokens-no-tokens": "Nema žetona za resetovanje.",
-       "resettokens-legend": "Resetovanje žetona",
        "resettokens-tokens": "Žetoni:",
        "resettokens-token-label": "$1 (trenutna vrednost: $2)",
        "resettokens-watchlist-token": "Žeton za veb dovod (Atom/RSS) vašeg [[Special:Watchlist|spiska nadgledanja]]",
        "currentrev": "Tekuća izmena",
        "currentrev-asof": "Tekuća izmena od $2 u $3",
        "revisionasof": "Izmena od $2 u $3",
-       "revision-info": "Izmena od $1; {{GENDER:$6|$2}}$7",
+       "revision-info": "Izmena od $1 koju je {{GENDER:$6|uredio $2|uredila $2}}$7",
        "previousrevision": "← Starija izmena",
        "nextrevision": "Novija izmena →",
        "currentrevisionlink": "Tekuća izmena",
        "nmembers": "$1 {{PLURAL:$1|član|člana|članova}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|član|člana|članova}}",
        "nrevisions": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
-       "nviews": "$1 {{PLURAL:$1|pregled|pregleda|pregleda}}",
        "nimagelinks": "Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "ntransclusions": "koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "specialpage-empty": "Nema rezultata za ovaj izveštaj.",
index 6ec7e68..94ca2f1 100644 (file)
        "searchall": "sadayana",
        "showingresults": "Di handap ieu némbongkeun {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimimitianku  #'''$2'''.",
        "showingresultsinrange": "Di handap dipidangkeun nepi ka {{PLURAL:$1|<strong>1</strong> hasil}} ti #<strong>$2</strong> nepi ka #<strong>$3</strong>.",
-       "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> ti <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> ti <strong>$3</strong>|Hasil <strong>$1 - $2</strong> ti <strong>$3</strong>}}",
        "search-nonefound": "Euweuh hasil nu cocog jeung kueri.",
        "powersearch-legend": "Panéangan tuluy",
        "powersearch-ns": "Téangan di ngaranspasi:",
        "recentchanges-label-bot": "Ieu parobahan dijieun ku bot",
        "recentchanges-label-unpatrolled": "Ieu éditan can karoris",
        "recentchanges-legend-heading": "'''Pedaran:'''",
-       "recentchanges-legend-newpage": "$1 - kaca anyar",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tempo ogé [[Special:NewPages|béréndélan kaca anyar]])",
        "rcnotefrom": "Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
        "rcshowhideminor": "$1 éditan minor",
        "sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
        "uploadnewversion-linktext": "ngamuatkeun vérsi anyar koropak ieu",
        "shared-repo-from": "ti $1",
+       "upload-disallowed-here": "Anjeun teu bisa nimpah ieu berkas.",
        "filerevert": "balikkeun $1",
        "filerevert-legend": "Balikkeun gambar",
        "filerevert-intro": "Anjeun keur mulangkeun '''[[Media:$1|$1]]''' ka [vérsi $4, $3, $2].",
        "namespace": "Ngaranspasi:",
        "invert": "Balikkeun pilihan",
        "blanknamespace": "(Utama)",
-       "contributions": "Kontribusi ti kontributor",
+       "contributions": "Kontribusi {{GENDER:$1|pamaké}}",
        "contributions-title": "Sumbangan tulisan ti $1",
        "mycontris": "Kontribusi",
        "contribsub2": "Pikeun {{GENDER:$3|$1}} ($2)",
        "tooltip-pt-mycontris": "Daptar tulisan Anjeun",
        "tooltip-pt-login": "Leuwih hadé asup log, sanajan teu wajib",
        "tooltip-pt-logout": "Kaluar log",
+       "tooltip-pt-createaccount": "Najan henteu kudu, Anjeun leuwih hadé nyieun akun sarta asup log",
        "tooltip-ca-talk": "Sawala ngeunaan eusi kaca",
        "tooltip-ca-edit": "Anjeun bisa ngédit kaca ieu. Paké tombol pramidang méméh nyimpen.",
        "tooltip-ca-addsection": "Jieun bahasan anyar",
        "pageinfo-watchers": "Jumlah nu ngawaskeun",
        "pageinfo-edits": "Jumlah éditan",
        "pageinfo-authors": "Jumlah kontributor nu béda",
+       "pageinfo-toolboxlink": "Émbaran kaca",
        "pageinfo-contentpage-yes": "Enya",
        "pageinfo-protect-cascading-yes": "Enya",
        "markaspatrolleddiff": "Tandaan salaku geus diriksa",
        "watchlisttools-view": "Témbongkeun parobahan nu patali",
        "watchlisttools-edit": "Témbongkeun sarta édit béréndélan awaskeuneun",
        "watchlisttools-raw": "Robah béréndélan awaskeuneun",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|obrolan]])",
        "duplicate-defaultsort": "'''Awas''': Konci runtuyan asal \"$2\" ngalindih konci runtuyan asal \"$1\" anu saméméhna.",
        "version": "Vérsi",
        "version-extensions": "Éksténsi nu diinstal",
        "external_image_whitelist": " #Antepkeun ieu baris sakumaha ayana<pre>\n#Paké fragmén éxprési régulér (ukur bagian anu aya di antara //) di handap\n#Ieu fragmén bakal dicocogkeun jeung URL gambar-gambar éksternal\n#Fragmén anu cocog bakal dipidangkeun minangka gambar, lamun henteu nu katémbong ukur tutumbuna #Baris nu dimimitian ku # bakal dianggap koméntar\n#Ieu teu ngabédakeun gedé leutikna aksara\n#Teundeun sakabéh fragmén éxprési régulér luhureun ieu baris. Antepkeun ieu baris sakumaha ayana</pre>",
        "tag-filter": "Saringan [[Special:Tags|tag]]:",
        "tag-filter-submit": "Saring",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
        "tags-title": "Tag",
        "tags-tag": "Ngaran tag",
        "tags-edit": "édit",
        "htmlform-submit": "Kirim",
        "htmlform-reset": "Bolaykeun parobahan",
        "htmlform-selectorother-other": "Lianna",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ngahapus}} kaca $3",
        "revdelete-restricted": "akses geus dibatesan ukur keur kuncén",
        "revdelete-unrestricted": "Watesan akses kuncén dihapuskeun",
+       "logentry-newusers-create": "Akun pamaké $1 jeus {{GENDER:$2|dijieun}}",
        "rightsnone": "(euweuh)",
        "revdelete-summary": "ringkesan ngédit",
        "feedback-cancel": "Bolay",
index afd2ef3..bf11951 100644 (file)
        "passwordreset": "Återställ lösenord",
        "passwordreset-text-one": "Fyll i detta formulär för att återställa ditt lösenord.",
        "passwordreset-text-many": "{{PLURAL:$1|Fyll i ett av fälten för att få ett tillfälligt lösenord via e-post.}}",
-       "passwordreset-legend": "Återställ lösenord",
        "passwordreset-disabled": "Lösenordsåterställning har inaktiverats på denna wiki.",
        "passwordreset-emaildisabled": "E-postfunktioner har inaktiverats på denna wiki.",
        "passwordreset-username": "Användarnamn:",
        "resettokens": "Återställ nycklar",
        "resettokens-text": "Du kan återställa nycklar som tillåter åtkomst till vissa privata uppgifter som är associerade till ditt konto här.\n\nDu bör återställa om du av misstag delade dem med någon eller om ditt konto har äventyrats.",
        "resettokens-no-tokens": "Det finns inga nycklar att återställa.",
-       "resettokens-legend": "Återställ nycklar",
        "resettokens-tokens": "Nycklar:",
        "resettokens-token-label": "$1 (aktuellt värde: $2)",
        "resettokens-watchlist-token": "Nyckel för webbflöde (Atom/RSS) av [[Special:Watchlist|ändringar i sidor på din bevakningslista]]",
        "yourdiff": "Skillnader",
        "copyrightwarning": "Observera att alla bidrag till {{SITENAME}} är att betrakta som utgivna under $2 (se $1 för detaljer). Om du inte vill att din text ska redigeras eller kopieras efter andras gottfinnande skall du inte skriva något här.<br />\nDu lovar oss också att du skrev texten själv, eller kopierade från kulturellt allmängods som inte skyddas av upphovsrätt, eller liknande källor. '''LÄGG INTE UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN TILLÅTELSE!'''",
        "copyrightwarning2": "Observera att alla bidrag till {{SITENAME}} kan komma att redigeras, ändras, eller tas bort av andra deltagare. Om du inte vill se din text förändrad efter andras gottfinnade skall du inte skriva in någon text här.<br />\nDu lovar oss också att du skrev texten själv, eller kopierade från kulturellt allmängods som inte skyddas av upphovsrätt, eller liknande källor - se $1 för detaljer.\n'''LÄGG INTE UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN TILLÅTELSE!'''",
+       "editpage-cannot-use-custom-model": "Innehållsmodellen för denna sida kan inte ändras.",
        "longpageerror": "'''FEL: Texten som du försöker spara är {{PLURAL:$1|en kilobyte|$1 kilobyte}}, vilket är mer än det maximalt tillåtna {{PLURAL:$2|en kilobyte|$2 kilobyte}}.'''\nDen kan inte sparas.",
        "readonlywarning": "'''VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara dina ändringar just nu.\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:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Tomt objekt",
        "content-json-empty-array": "Tomt fält",
+       "duplicate-args-warning": "<strong>Varning:</strong> [[:$1]] anropar [[:$2]] med mer än ett värde för \"$3\"-parametern. Endast det sista värdet kommer att användas.",
        "duplicate-args-category": "Sidor som använder upprepade argument i mallanrop",
        "duplicate-args-category-desc": "Sidan innehåller mallanrop som använder repeterade argument, så som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Varning: Denna sida innehåller för många anrop av resurskrävande parserfunktioner.\n\nAntalet anrop får vara högst $2, nu görs {{PLURAL:$1|$1 anrop}}",
        "badsig": "Det är något fel med råsignaturen, kontrollera HTML-koden.",
        "badsiglength": "Din signatur är för lång.\nDen får inte vara längre än $1 {{PLURAL:$1|tecken|tecken}}.",
        "yourgender": "Hur vill du att andra refererar till dig?",
-       "gender-unknown": "Jag föredrar att inte uppge det",
+       "gender-unknown": "När jag omnämns ska mjukvaran använda könsneutrala ord närhelst det är möjligt",
        "gender-male": "Han redigerar wikisidor",
        "gender-female": "Hon redigerar wikisidor",
        "prefs-help-gender": "Denna inställning är valfri.\nProgramvaran använder detta värde för att adressera dig till andra med rätt genus. Denna information kommer att vara offentlig.",
        "right-passwordreset": "Visa e-postmeddelanden med lösenordsåterställning",
        "right-managechangetags": "Skapa och radera [[Special:Tags|taggar]] från databasen",
        "right-applychangetags": "Tillämpa [[Special:Tags|taggar]] tillsammans med ens ändringar",
+       "right-changetags": "Lägg till och ta bort godtyckliga [[Special:Tags|märken]] på individuella sidversioner och loggposter.",
        "newuserlogpage": "Logg över nya användare",
        "newuserlogpagetext": "Detta är en logg över nya användarkonton.",
        "rightslog": "Användarrättighetslogg",
        "action-editcontentmodel": "ändra innehållsmodellen för en sida",
        "action-managechangetags": "skapa och radera taggar från databasen",
        "action-applychangetags": "tillämpa taggar tillsammans med dina ändringar",
+       "action-changetags": "lägg till och ta bort godtyckliga märken på individuella sidversioner och loggposter",
        "nchanges": "$1 {{PLURAL:$1|ändring|ändringar}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sedan senaste besöket}}",
        "enhancedrc-history": "historik",
        "uploaded-hostile-svg": "Hittade osäker CSS i den uppladdade filens stilelement.",
        "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-href-svg": "Användning av taggen \"set\" för att lägga till attributen \"href\" till överordnade element blockeras.",
        "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.",
        "randomincategory-nopages": "Det finns inga sidor i kategorin [[:Category:$1]].",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Slumpsida i kategori",
+       "randomincategory-submit": "Gå",
        "randomredirect": "Slumpmässig omdirigering",
        "randomredirect-nopages": "Det finns inte några omdirigeringar i namnrymden \"$1\".",
        "statistics": "Statistik",
        "nmembers": "$1 {{PLURAL:$1|medlem|medlemmar}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|medlem|medlemmar}}",
        "nrevisions": "$1 {{PLURAL:$1|version|versioner}}",
-       "nviews": "$1 {{PLURAL:$1|visning|visningar}}",
        "nimagelinks": "Används på $1 {{PLURAL:$1|sida|sidor}}",
        "ntransclusions": "används på $1 {{PLURAL:$1|sida|sidor}}",
        "specialpage-empty": "Det finns inga resultat för denna rapport.",
        "rollback-success": "Återställde ändringar av $1;\nändrade tillbaka till senaste version av $2.",
        "sessionfailure-title": "Sessionsfel",
        "sessionfailure": "Något med din session som inloggad är på tok. Din begärda åtgärd har avbrutits, för att förhindra att någon kapar din session. Klicka på \"Tillbaka\" i din webbläsare och ladda om den sida du kom ifrån. Försök sedan igen.",
+       "changecontentmodel": "Ändra innehållsmodell för en sida",
+       "changecontentmodel-legend": "Ändra innehållsmodell",
+       "changecontentmodel-title-label": "Sidtitel",
+       "changecontentmodel-model-label": "Ny innehållsmodell",
+       "changecontentmodel-reason-label": "Orsak:",
+       "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",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|ändrade}} innehållsmodellen för sidan $3 från \"$4\" till \"$5\"",
+       "logentry-contentmodel-change-revertlink": "återställ",
+       "logentry-contentmodel-change-revert": "återställ",
        "protectlogpage": "Skrivskyddslogg",
        "protectlogtext": "Detta är en lista över applicerande och borttagande av skrivskydd.\nSe [[Special:ProtectedPages|listan över skyddade sidor]] för listan över aktiva sidskydd.",
        "protectedarticle": "skrivskyddade \"[[$1]]\"",
        "tooltip-pt-logout": "Logga ut",
        "tooltip-pt-createaccount": "Du uppmuntras att skapa ett konto och logga in, men det är inte obligatoriskt",
        "tooltip-ca-talk": "Diskussion om innehållssidan",
-       "tooltip-ca-edit": "Du kan redigera den här sidan.\nVänligen använd förhandsgranskningsknappen innan du sparar.",
+       "tooltip-ca-edit": "Redigera denna sida",
        "tooltip-ca-addsection": "Starta ett nytt avsnitt",
        "tooltip-ca-viewsource": "Den här sidan är skrivskyddad. Du kan se källtexten.",
        "tooltip-ca-history": "Tidigare versioner av sidan",
        "version-libraries": "Installerade bibliotek",
        "version-libraries-library": "Bibliotek",
        "version-libraries-version": "Version",
+       "version-libraries-license": "Licens",
+       "version-libraries-description": "Beskrivning",
+       "version-libraries-authors": "Författare",
        "redirect": "Omdirigering efter filnamn, användar-ID, sida eller versions-ID",
        "redirect-legend": "Omdirigera till en fil eller sida",
        "redirect-summary": "Den här specialsidan omdirigerar till en fil (efter filnamn), en sida (efter en versions eller sidas ID) eller en användarsida (efter användar-ID). Användning: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], eller [[{{#Special:Redirect}}/user/101]].",
        "revdelete-restricted": "satte begränsningar för administratörer",
        "revdelete-unrestricted": "tog bort begränsningar för administratörer",
        "logentry-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
-       "logentry-block-unblock": "$1 {{GENDER:$2|upphävde blockeringen för}} {{GENDER:$4|$3}}",
+       "logentry-block-unblock": "$1 {{GENDER:$2|avblockerade}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tankstreck",
        "special-characters-title-emdash": "långt tankstreck",
-       "special-characters-title-minus": "minustecken"
+       "special-characters-title-minus": "minustecken",
+       "mw-widgets-titleinput-description-new-page": "sidan existerar inte ännu",
+       "mw-widgets-titleinput-description-redirect": "omdirigerar till $1"
 }
index 9db8359..093635c 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) சீட்டுகள்",
        "yourdiff": "வேறுபாடுகள்",
        "copyrightwarning": "{{SITENAME}} தளத்தில் உங்கள் பங்களிப்புகள் $2 உரிமத்தின் கீழ் அளிக்கப்பட்டதாக கருதப்படும்.(மேலதிக தகவல்களுக்கு $1 பக்கத்தைப் பார்க்க) உங்களுடைய எழுத்துக்கள் கடுமையாகத் தொகுக்கப்படுவதையோ, விரும்பியபடி பகிரப்படுவதையோ நீங்கள் விரும்பாவிடில் இங்கே சமர்ப்பிக்காதீர்.<br />\nஅத்துடன் நீங்களே இதை எழுதியதாகவோ, அல்லது வேறு பொதுக் களம் அல்லது அது போன்ற விடுதலையளிக்கும் மூலங்களிலிருந்து பிரதி பண்ணியிருப்பதாகவோ உறுதி கூறுகிறீர்கள்.\n'''பதிப்புரிமையுள்ள ஆக்கங்களை அனுமதியின்றி சமர்ப்பிக்க வேண்டாம்!'''",
        "copyrightwarning2": "{{SITENAME}} தளத்துக்கான உமது பங்களிப்புக்கள் அனைத்தும் வேறு பயனர்களால் தொகுக்கப் படவோ, மாற்றங்கள் செய்யப்படவோ அல்லது நீக்கப்படவோ கூடும். உமது பங்களிப்புகள் கடுமையாகத் தொகுக்கப்படுவதை நீர் விரும்பாவிடில் இங்கே சமர்ப்பிக்காதீர்.<br />\nநீர் இதை எழுதியதாகவோ, அல்லது வேறு பொதுக் களம் அல்லது அது போன்ற விடுதலையளிக்கும் மூலங்களிலிருந்து பிரதி பண்ணியிருப்பதாகவோ உறுதி கூறுகிறீர்.(மேலதிக தகவல்களுக்கு $1).'''பதிப்புரிமையுள்ள ஆக்கங்களை அனுமதியின்றி சமர்ப்பிக்காதீர்!'''",
+       "editpage-cannot-use-custom-model": "இப்பக்கத்தின் உள்ளடக்க மாதிரிகையை மாற்ற முடியாது.",
        "longpageerror": "'''தவறு: நீங்கள் இட்ட உரை {{PLURAL:$1|ஒரு கிலோபைட்|$1கிலோபைட்டுகள்}}  நீளமானது,{{PLURAL:$2|ஒரு கிலோபைட்|$2கிலோபைட்டுகள்}}  கூடிய அளவுள்ள பக்கங்கள் இங்கே அனுமதிக்கப்படுவதில்லை. உங்கள் உரையை சேமிக்க முடியாது.'''",
        "readonlywarning": "'''எச்சரிக்கை: பராமரிப்புக்காகத் தரவுவழங்கி பூட்டப்பட்டுள்ளது, எனவே உங்கள் தொகுப்புக்களை இப்பொழுது சேமிக்க முடியாது. உங்கள் உரையை இன்னொரு உரைக் கோப்பில் வெட்டி ஒட்டி சேமித்துவைத்துப் பின்பு பயன்படுத்தலாம்.'''\n\nஇந்தத் தரவுவழங்கியைப் பூட்டிய நிர்வாகி அதுகுறித்து அளித்த விளக்கம் பின்வருமாறு: $1",
        "protectedpagewarning": "'''எச்சரிக்கை: இது ஒரு பாதுகாக்கப்பட்ட பக்கமாகும். இதனை நிர்வாகிகள் தரத்திற்கான உரிமைகளை பெற்றவர்களே தொகுக்க முடியும்.'''\n\nகடைசியாகப் பதியபட்ட குறிப்பினை தங்களின் கவனத்திற்காக கீழே கொடுக்கப்பட்டது.",
        "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": "{{PLURAL:$1|ஒரு திருத்தம்|$1 திருத்தங்கள்}}",
-       "nviews": "{{PLURAL:$1|ஒரு பார்வை|$1 பார்வைகள்}}",
        "nimagelinks": "$1 {{PLURAL:$!|பக்கத்தில்|பக்கங்களில்}} பயன்படுத்தப்பட்டது",
        "ntransclusions": "$1 {{PLURAL:$1|பக்கத்தில்|பக்கங்களில்}} பயன்படுத்தப்பட்டது",
        "specialpage-empty": "இந்தப் புகாருக்குகந்த முடிவுகள் எதுவுமில்லை.",
index d153dcb..397188b 100644 (file)
        "passwordreset": "సంకేతపదాన్ని మార్చుకోండి",
        "passwordreset-text-one": "ఈమెయిలు ద్వారా తాత్కాలిక సంకేతపదాన్ని పొందేందుకు ఈ ఫారమును నింపండి.",
        "passwordreset-text-many": "{{PLURAL:$1|ఈమెయిలు ద్వారా తాత్కాలిక సంకేతపదాన్ని పొందేందుకు ఏదో ఒక ఫీల్డును నింపండి.Fill in one of the fields to receive a temporary password via email.}}",
-       "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|changes to pages on your watchlist]] యొక్క జాల వడ్డన (Atom/RSS) కు టోకెన్",
        "yourdiff": "తేడాలు",
        "copyrightwarning": "{{SITENAME}}కు సమర్పించే అన్ని రచనలూ $2కు లోబడి ప్రచురింపబడినట్లుగా భావించబడతాయి (వివరాలకు $1 చూడండి). మీ రచనలను ఎవ్వరూ మార్చ రాదనీ లెదా వేరే ఎవ్వరూ వాడుకో రాదని మీరు భావిస్తే, ఇక్కడ ప్రచురించకండి.<br /> మీ స్వీయ రచనను గాని, సార్వజనీనమైన రచననుగాని, ఇతర ఉచిత వనరుల నుండి సేకరించిన రచననుగాని మాత్రమే ప్రచురిస్తున్నానని కూడా మీరు ప్రమాణం చేస్తున్నారు. <strong>కాపీహక్కులుగల రచనను తగిన అనుమతి లేకుండా సమర్పించకండి!</strong>",
        "copyrightwarning2": "{{SITENAME}}లో ప్రచురించే రచనలన్నిటినీ ఇతర రచయితలు సరిదిద్దడం, మార్చడం, తొలగించడం జరగవచ్చు. మీ రచనలను అలా నిర్దాక్షిణ్యంగా దిద్దుబాట్లు చెయ్యడం మీకిష్టం లేకపోతే, వాటిని ఇక్కడ ప్రచురించకండి. <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మీ మార్పులను ఒక ఫాఠ్య ఫైలులోకి కాపీ చేసి భద్రపరచుకొని, తరువాత సమర్పించండి.\n\nతాళం వేసిన నిర్వాహకుడి వివరణ ఇదీ: $1",
        "protectedpagewarning": "<strong>హెచ్చరిక: ఈ పేజీ సంరక్షించబడింది. కాబట్టి నిర్వాహక అనుమతులు ఉన్న వాడుకరులు మాత్రమే మార్చగలరు.</strong>\nచివరి లాగ్ పద్దును మీ సమాచారం కోసం ఇక్కడ ఇస్తున్నాం:",
        "content-model-javascript": "జావాస్క్రిప్ట్",
        "content-model-css": "CSS",
        "content-json-empty-object": "ఖాళీ అంశం",
+       "content-json-empty-array": "ఖాళీ అరే",
        "expensive-parserfunction-warning": "<strong>హెచ్చరిక:</strong> ఈ పేజీలో ఖరీదైన పార్సరు పిలుపులు చాలా ఉన్నాయి.\n\nపార్సరు {{PLURAL:$2|పిలుపు|పిలుపులు}} $2 కంటే తక్కువ ఉండాలి,  ప్రస్తుతం {{PLURAL:$1|$1 పిలుపు ఉంది|$1  పిలుపులు ఉన్నాయి}}.",
        "expensive-parserfunction-category": "పార్సరు సందేశాలు అధికంగా ఉన్న పేజీలు",
        "post-expand-template-inclusion-warning": "<strong>హెచ్చరిక:</strong> మూస ఇముడ్పు సైజు చాలా పెద్దదిగా ఉంది.\nకొన్ని మూసలు ఇమడ్చబడవు.",
        "parser-template-recursion-depth-warning": "మూస రికర్షను లోతు అధిగమించబడింది ($1)",
        "language-converter-depth-warning": "భాషా మార్పిడి లోతు పరిమితిని అధిగమించారు ($1)",
        "node-count-exceeded-category": "నోడ్-కౌంటును మించిన పేజీలు",
-       "node-count-exceeded-category-desc": "à°¨à±\8bà°¡à±\81-à°¸à°\82à°\96à±\8dà°¯ à°\8eà°\95à±\8dà°\95à±\81à°µ à°\85యిన à°ªà±\8dà°°à°¤à±\81à°²à°\95à±\81 à°µà°°à±\8dà°\97à°®à±\81",
-       "node-count-exceeded-warning": "పేజీ నోడ్-కౌంటును మించింది",
+       "node-count-exceeded-category-desc": "à°ªà±\87à°\9cà±\80 à°\97à°°à°¿à°·à±\8dà°  à°¨à±\8bà°¡à±\81-à°¸à°\82à°\96à±\8dà°¯ à°®à°¿à°\82à°\9aినది.",
+       "node-count-exceeded-warning": "పేజీ నోడ్-కౌంటు మించింది",
        "expansion-depth-exceeded-category": "విస్తరణ లోతును మించిన పేజీలు",
-       "expansion-depth-exceeded-category-desc": "విసà±\8dతరణ à°²à±\8bà°¤à±\81à°¨à±\81 à°®à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80à°²à°\95à±\81 à°µà°°à±\8dà°\97à°®à±\81",
+       "expansion-depth-exceeded-category-desc": "à°ªà±\87à°\9cà±\80 à°\97à°°à°¿à°·à±\8dà°  à°µà°¿à°¸à±\8dతరణ à°²à±\8bà°¤à±\81à°¨à±\81 à°®à°¿à°\82à°\9aà°¿à°\82ది",
        "expansion-depth-exceeded-warning": "పేజీ విస్తరణ లోతును మించింది",
        "parser-unstrip-loop-warning": "Unstrip లూపును కనుక్కున్నాం",
        "parser-unstrip-recursion-limit": "Unstrip రికర్షన్ పరిమితిని దాటింది ($1)",
        "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": "(చిట్టా వివరాలను తొలగించారు)",
        "revdelete-legend": "సందర్శక నిబంధనలు అమర్చు",
        "revdelete-hide-text": "కూర్పు పాఠ్యం",
        "revdelete-hide-image": "ఫైలులోని విషయాన్ని దాచు",
-       "revdelete-hide-name": "à°\9aà°°à±\8dయనà±\81, à°²à°\95à±\8dà°·à±\8dయానà±\8dà°¨à±\80 à°¦à°¾à°\9aà±\81",
+       "revdelete-hide-name": "పారామితà±\81లనà±\81, à°²à°\95à±\8dà°·à±\8dయానà±\8dà°¨à±\80 à°¦à°¾à°¯à°¿",
        "revdelete-hide-comment": "దిద్దుబాటు సారాంశం",
        "revdelete-hide-user": "దిద్దుబాటు చేసిన వాడుకరి పేరు/ఐపీ చిరునామా",
        "revdelete-hide-restricted": "డేటాను అందరిలాగే నిర్వాహకులకు కూడా కనబడనివ్వకు",
        "preferences": "అభిరుచులు",
        "mypreferences": "అభిరుచులు",
        "prefs-edits": "దిద్దుబాట్ల సంఖ్య:",
-       "prefsnologintext2": "మీ అభిరుచులను మార్చుకునేందుకు $1.",
+       "prefsnologintext2": "మీ అభిరుచులను మార్చుకునేందుకు ప్రవేశించండి.",
        "prefs-skin": "రూపు",
        "skin-preview": "మునుజూడు",
        "datedefault": "ఏదైనా పరవాలేదు",
        "prefs-personal": "వాడుకరి ప్రవర",
        "prefs-rc": "ఇటీవలి మార్పులు",
        "prefs-watchlist": "వీక్షణ జాబితా",
+       "prefs-editwatchlist": "వీక్షణజాబితాను సవరించు",
        "prefs-editwatchlist-label": "మీ వీక్షణజాబితా లోని అంశాలను సవరించండి:",
+       "prefs-editwatchlist-edit": "మీ వీక్షణజాబితాపై ఉన్న శీర్షికలను చూడండి, తీసివేయండి",
+       "prefs-editwatchlist-raw": "ముడి వీక్షణజాబితాను సవరించు",
+       "prefs-editwatchlist-clear": "మీ వీక్షణజాబితాను తుడిచివేయండి",
        "prefs-watchlist-days": "వీక్షణ జాబితాలో చూపించవలసిన రోజులు:",
        "prefs-watchlist-days-max": "గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజులు}}",
        "prefs-watchlist-edits": "విస్తృత వీక్షణ జాబితాలో చూపించవలసిన దిద్దుబాట్లు:",
        "right-browsearchive": "తొలగించిన పేజీల్లో వెతకడం",
        "right-undelete": "పేజీ తొలగింపును రద్దు చెయ్యి",
        "right-suppressrevision": "నిర్వాహకులకు కనబడకుండా ఉన్న కూర్పులను సమీక్షించి పునస్థాపించడం",
+       "right-viewsuppressed": "ఏ వాడుకరి నుండైనా వీక్షణ సంస్కరణలు దాయబడ్డాయి",
        "right-suppressionlog": "గోప్యంగా ఉన్న లాగ్‌లను చూడడం",
        "right-block": "దిద్దుబాటు చెయ్యకుండా ఇతర వాడుకరులను నిరోధించగలగడం",
        "right-blockemail": "ఈమెయిలు పంపకుండా సభ్యుని నిరోధించు",
        "right-protect": "సంరక్షణ స్థాయిలను మార్చు, కాస్కేడ్-రక్షిత పేజీలలో దిద్దుబాటు చెయ్యి",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" గా సంక్షించబడిన పేజీలను సరిదిద్దు",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" గా సంరక్షించబడ్డ పేజీలను మార్చు",
+       "right-editcontentmodel": "పేజీ యొక్క కంటెంటు మోడలును సవరించు",
        "right-editinterface": "యూజరు ఇంటరుఫేసులో దిద్దుబాటు చెయ్యి",
        "right-editusercssjs": "ఇతర వాడుకరుల CSS, JS ఫైళ్ళలో దిద్దుబాటు చెయ్యి",
        "right-editusercss": "ఇతర వాడుకరుల CSS ఫైళ్ళలో దిద్దుబాటు చెయ్యడం",
        "action-viewmywatchlist": "మీ వీక్షణ జాబితాను చూడండి",
        "action-viewmyprivateinfo": "మీ గోపనీయ సమాచారాన్ని చూడండి",
        "action-editmyprivateinfo": "మీ గోపనీయ సమాచారాన్ని సరిదిద్దండి",
+       "action-editcontentmodel": "పేజీ యొక్క కంటెంటు మోడలును సవరించు",
        "action-managechangetags": "డేటాబేసులో ట్యాగులను చేర్చే లేదా తొలగించే",
        "action-applychangetags": "మీ మార్పులతో ట్యాగులను ఆపాదించే",
        "nchanges": "{{PLURAL:$1|ఒక మార్పు|$1 మార్పులు}}",
        "license": "లైసెన్సు వివరాలు:",
        "license-header": "లైసెన్సింగ్",
        "nolicense": "దేన్నీ ఎంచుకోలేదు",
+       "licenses-edit": "లైసెన్సు ఎంపికలను సవరించు",
        "license-nopreview": "(మునుజూపు అందుబాటులో లేదు)",
        "upload_source_url": " (సార్వజనికంగా అందుబాటులో ఉన్న, సరైన URL)",
-       "upload_source_file": " (మీ కంప్యూటర్లో ఒక ఫైలు)",
+       "upload_source_file": "(మీ కంప్యూటరు నుండి ఎంచుకోబడిన దస్త్రం)",
        "listfiles-delete": "తొలగించు",
        "listfiles-summary": "ఈ ప్రత్యేక పేజీ, ఎక్కించిన ఫైళ్ళన్నిటినీ చూపిస్తుంది.",
        "listfiles_search_for": "మీడియా పేరుకై వెతుకు:",
        "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": "{{PLURAL:$1|కూర్పు|$1 కూర్పులు}}",
-       "nviews": "$1 {{PLURAL:$1|సందర్శన|సందర్శనలు}}",
        "nimagelinks": "$1 {{PLURAL:$1|పుట|పుటల}}లో ఉపయోగించారు",
        "ntransclusions": "$1 {{PLURAL:$1|పుట|పుటల}}లో ఉపయోగించారు",
        "specialpage-empty": "ఈ పేజీ ఖాళీగా ఉంది.",
        "wantedtemplates": "కావాల్సిన మూసలు",
        "mostlinked": "అధిక లింకులు చూపే పేజీలు",
        "mostlinkedcategories": "అధిక లింకులు చూపే వర్గాలు",
-       "mostlinkedtemplates": "à°\8eà°\95à±\8dà°\95à±\81à°µà°\97à°¾ à°\89పయà±\8bà°\97à°¿à°\82à°\9aà°¿à°¨ à°®à±\82à°¸లు",
+       "mostlinkedtemplates": "à°\8eà°\95à±\8dà°\95à±\81à°µà°\97à°¾ à°\89పయà±\8bà°\97à°¿à°\82à°\9aà°¿à°¨ à°ªà±\87à°\9cà±\80లు",
        "mostcategories": "అధిక వర్గాలలో చేరిన వ్యాసాలు",
        "mostimages": "అధిక లింకులు గల బొమ్మలు",
        "mostinterwikis": "అత్యధిక అంతరవికీ లింకులు కలిగిన పేజీలు",
        "logempty": "సరిపోలిన అంశాలేమీ చిట్టాలో లేవు.",
        "log-title-wildcard": "ఈ పాఠ్యంతో మొదలయ్యే పుస్తకాల కొరకు వెతుకు",
        "showhideselectedlogentries": "ఎంచుకున్న చిట్టా పద్దులను చూపించు/దాచు",
+       "log-edit-tags": "ఎంచుకున్న చిట్టా ప్రవేశాల ట్యాగులను సవరించు",
        "allpages": "అన్ని పేజీలు",
        "nextpage": "తరువాతి పేజీ ($1)",
        "prevpage": "మునుపటి పేజీ ($1)",
        "trackingcategories": "పహారా కాయు వర్గాలు",
        "trackingcategories-msg": "పహారా కార్యు వర్గము",
        "trackingcategories-name": "సందేశం పేరు",
+       "trackingcategories-desc": "వర్గపు చేర్పు క్రైటేరియా",
+       "broken-file-category-desc": "ఈ పుటలో విరిగిన దస్త్ర లంకె ఉన్నది (దస్త్రం ఉనికిలో లేనప్పుడు దస్త్రానికి ఎంబెడ్ చేయు లంకె).",
        "trackingcategories-nodesc": "వివరణ లేదు.",
        "trackingcategories-disabled": "వర్గం అచేతనమై ఉంది",
        "mailnologin": "పంపించవలసిన చిరునామా లేదు",
        "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దాన్ని మీ కంప్యూటర్లో భద్రపరచి, ఆపై ఇక్కడికి ఎక్కించండి.",
        "version-entrypoints": "ప్రవేశ బిందు చిరునామాలు",
        "version-entrypoints-header-entrypoint": "ప్రవేశ బిందువు",
        "version-entrypoints-header-url": "చిరునామా",
+       "version-libraries-library": "గ్రంథాలయం",
        "version-libraries-version": "సంచిక",
+       "version-libraries-license": "లైసెన్సు",
+       "version-libraries-description": "వివరణ",
+       "version-libraries-authors": "రచయితలు",
        "redirect": "ఫైలు, వాడుకరి, పేజీ లేదా కూర్పు ఐడీ ప్రకారం దారిమార్పు",
        "redirect-legend": "ఫైలు లేదా పేజీకి దారిమార్పు",
        "redirect-submit": "వెళ్ళు",
        "tags-apply-no-permission": "మీ మార్పులతో పాటు వాటికి ట్యాగులను ఆపాదించే అనుమతి మీకు లేదు.",
        "tags-apply-not-allowed-one": "\"$1\" ట్యాగును మానవీయంగా ఆపాదించలేరు.",
        "tags-apply-not-allowed-multi": "ఈ {{PLURAL:$2|ట్యాగును|ట్యాగులను}} మానవీయంగా ఆపాదించడానికి అనుమతించరు:",
+       "tags-edit-title": "ట్యాగులను సవరించు",
+       "tags-edit-manage-link": "ట్యాగులను నిర్వహించండి",
        "tags-edit-existing-tags": "ప్రస్తుత ట్యాగులు:",
        "tags-edit-existing-tags-none": "''ఏమీలేవు''",
        "tags-edit-new-tags": "కొత్త ట్యాగులు:",
        "mediastatistics-header-drawing": "రేఖాచిత్రాలు (వెక్టర్ చిత్రాలు)",
        "mediastatistics-header-audio": "ఆడియో",
        "mediastatistics-header-video": "వీడియోలు",
+       "mediastatistics-header-office": "కార్యాలయం",
        "mediastatistics-header-text": "పాఠ్య",
        "json-error-state-mismatch": "చెల్లని లేదా సరికాని JSON",
+       "json-error-syntax": "వ్యాకరణ దోషం",
        "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-titleinput-description-new-page": "పేజీ ఉనికిలో లేదు"
 }
index a337bdd..e346734 100644 (file)
@@ -11,7 +11,8 @@
                        "Urhixidur",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "AryanSogd"
                ]
        },
        "tog-underline": "Пайвандҳо хаткашида:",
        "uploaddisabledtext": "Боркунии парванда ғайрифаъол аст.",
        "php-uploaddisabledtext": "Дар PHP боркунии парванда ғайрифаъол шудааст.\nЛутфан танзимоти file_uploads баррасӣ намоед.",
        "uploadscripted": "Ин парванда коди скриптӣ ё HTML дорад, ки метавонад дар мурургарӣ веб нодуруст намоён шавад.",
+       "upload-scripted-pi-callback": "Имкони боргузории файл ки мундариҷаи услуби коркарди XML-дастур дорад, нест.",
+       "uploaded-href-attribute-svg": "Муайянкунанда <нишон>&lt;$1 $2=\"$3\"&gt;</нишон> дар ҳадафҳои ғайри маҳаллӣ (масалан: http://, JavaScript:, ва ғайра) дар SVG-файлҳо иҷозат дода намешавад.",
        "uploadvirus": "Ин парванда вирус дорад! Ҷузъиёт: $1",
        "upload-source": "Парвандаи манбаъ",
        "sourcefilename": "Номи парвандаи аслӣ:",
index b75b945..d7b5dd4 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|การเปลี่ยนแปลงแก่หน้าในรายการเฝ้าดูของคุณ]]",
        "badsig": "ลายเซ็นดิบไม่ถูกต้อง \nให้ตรวจสอบป้ายระบุเอชทีเอ็มแอล",
        "badsiglength": "ลายเซ็นของคุณยาวเกินไป \nต้องยาวไม่เกิน $1 อักขระ",
        "yourgender": "ต้องการให้ระบุคุณเป็นเพศใด",
-       "gender-unknown": "à¸\82อà¹\84มà¹\88ระà¸\9aุ",
+       "gender-unknown": "à¹\80มืà¹\88อà¸\81ลà¹\88าวà¸\96ึà¸\87à¸\84ุà¸\93 à¸\8bอà¸\9fà¸\95à¹\8cà¹\81วรà¹\8cà¸\88ะà¹\83à¸\8aà¹\89à¸\84ำà¸\97ีà¹\88à¹\84มà¹\88ระà¸\9aุà¹\80à¸\9eศà¸\97ุà¸\81à¹\80มืà¹\88อà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99à¹\84à¸\9bà¹\84à¸\94à¹\89",
        "gender-male": "ชาย",
        "gender-female": "หญิง",
        "prefs-help-gender": "เลือกตั้งค่านี้หรือไม่ก็ได้\nซอฟต์แวร์ใช้ค่านี้เพื่อติดต่อคุณและกล่าวถึงคุณโดยใช้เพศทางไวยากรณ์ที่เหมาะสมเมื่อติดต่อผู้อื่น\nสารสนเทศนี้เปิดเผยต่อสาธารณะ",
        "nmembers": "$1 หน้า",
        "nmemberschanged": "$1 → $2 สมาชิก",
        "nrevisions": "$1 รุ่นปรับปรุง",
-       "nviews": "$1 ครั้ง",
        "nimagelinks": "ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}",
        "ntransclusions": "ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}",
        "specialpage-empty": "ไม่มีผลลัพธ์รายงานนี้",
        "blocklogpage": "ปูมการบล็อก",
        "blocklog-showlog": "ผู้ใช้นี้เคยถูกบล็อก\nปูมการบล็อกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
        "blocklog-showsuppresslog": "ผู้ใช้นี้ถูกบล็อกและซ่อน\nปูมการระงับแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
-       "blocklogentry": "บล็อก [[$1]] หมดอายุ $2 $3",
-       "reblock-logentry": "à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารà¸\9aลà¹\87อà¸\81สำหรัà¸\9a [[$1]] หมดอายุ $2 $3",
+       "blocklogentry": "à¸\9aลà¹\87อà¸\81 [[$1]] à¹\82à¸\94ยมีà¹\80วลาหมà¸\94อายุ $2 $3",
+       "reblock-logentry": "à¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\81ารà¸\9aลà¹\87อà¸\81สำหรัà¸\9a [[$1]] à¹\82à¸\94ยมีà¹\80วลาหมดอายุ $2 $3",
        "blocklogtext": "นี่คือปูมการบล็อกและการเลิกบล็อกผู้ใช้\nการบล็อกที่อยู่ไอพีโดยอัตโนมัติจะไม่แสดงในรายการ\nดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน",
        "unblocklogentry": "ปลดบล็อก $1",
        "block-log-flags-anononly": "เฉพาะผู้ใช้นิรนาม",
        "tooltip-pt-logout": "ล็อกเอาต์",
        "tooltip-pt-createaccount": "สนับสนุนให้คุณสร้างบัญชีและล็อกอิน แต่ไม่บังคับ",
        "tooltip-ca-talk": "อภิปรายเกี่ยวกับหน้าเนื้อหา",
-       "tooltip-ca-edit": "à¸\84ุà¸\93สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\82à¸\9bรà¸\94à¹\83à¸\8aà¹\89à¸\9bุà¹\88มà¸\95ัวอยà¹\88าà¸\87à¸\81à¹\88อà¸\99à¸\9aัà¸\99à¸\97ึà¸\81",
+       "tooltip-ca-edit": "à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89",
        "tooltip-ca-addsection": "เริ่มส่วนใหม่",
        "tooltip-ca-viewsource": "หน้านี้ถูกล็อก \nแต่ยังดูโค้ดได้",
        "tooltip-ca-history": "รุ่นที่แล้วของหน้านี้",
index c37821f..8797346 100644 (file)
        "nmembers": "{{PLURAL:$1|üye|üye}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|üye|üye}}",
        "nrevisions": "{{PLURAL:$1|değişiklik|değişiklikler}}",
-       "nviews": "$1 {{PLURAL:$1|görünüm|görünüm}}",
        "nimagelinks": "$1 {{PLURAL:$1|sayfada|sayfada}} kullanılıyor",
        "ntransclusions": "$1 {{PLURAL:$1|sayfada|sayfada}} kullanılıyor",
        "specialpage-empty": "Bu rapor için hiç sonuç yok.",
index e35ef3a..9c7671b 100644 (file)
        "note": "'''Тайылбыр:'''",
        "previewnote": "'''Бо чүгле шенеп көөрү-дүр.'''\nБижик ам-даа шыгжатынмаан!",
        "editing": "«$1» деп арынны эдери",
+       "creating": "$1 деп арын чаяары",
        "editingsection": "Эдилге: «$1» (үлеш)",
        "editingcomment": "«$1» деп арынны өскертип турар (чаа салбыр)",
        "yourtext": "Силерниң сөзүглелиңер",
index 02c6f54..b43794e 100644 (file)
        "passwordreset": "Скинути пароль",
        "passwordreset-text-one": "Заповніть цю форму, щоб отримати тимчасовий пароль електронною поштою.",
        "passwordreset-text-many": "{{PLURAL:$1|Заповніть одне з полів для отримання тимчасового пароля електронною поштою.}}",
-       "passwordreset-legend": "Перевстановити пароль",
        "passwordreset-disabled": "У цій вікі вимкнена можливість скидання пароля.",
        "passwordreset-emaildisabled": "В цій вікі вимкнуто Функції електронної пошти.",
        "passwordreset-username": "Ім'я користувача:",
        "resettokens": "Скидання жетонів",
        "resettokens-text": "Ви можете скинути жетони, що забезпечують доступ до певних особистих даних, пов'язаних тут із вашим обліковим записом.\nВам слід це зробити, якщо ви випадково поділились жетонами з кимось, або якщо ваш обліковий запис було зламано.",
        "resettokens-no-tokens": "Немає жетонів до скидання.",
-       "resettokens-legend": "Скинути жетони",
        "resettokens-tokens": "Жетони:",
        "resettokens-token-label": "$1 (поточне значення: $2)",
        "resettokens-watchlist-token": "Маркер стрічки новин (Atom/RSS) щодо [[Special:Watchlist|зміни на сторінці з вашого списку спостереження]]",
        "yourdiff": "Відмінності",
        "copyrightwarning": "Зверніть увагу, що будь-які додавання і зміни до {{grammar:genitive|{{SITENAME}}}} розглядаються як випущені на умовах ліцензії $2 (детальніше див. $1).\nЯкщо ви не бажаєте, щоб написане вами безжально редагувалось і розповсюджувалося за бажанням будь-кого, не пишіть тут.<br />\nВи також підтверджуєте, що написане вами тут належить вам або взяте з джерела, що є суспільним надбанням чи подібного вільного джерела.\n'''Не публікуйте тут без дозволу матеріали, захищені авторським правом!'''",
        "copyrightwarning2": "Будь ласка, зверніть увагу, що всі зміни, внесені вами до {{SITENAME}}, можуть редагуватися, доповнюватися або вилучатися іншими користувачами.\nЯкщо ви не бажаєте, щоб написане вами безжально редагувалось — не пишіть тут.<br />\nВи також підтверджуєте, що наведене тут написано вами особисто або запозичено з джерела, яке є суспільним надбанням, або подібного вільного джерела (див. $1).<br />\n'''Не публікуйте тут без дозволу матеріали, захищені авторським правом!'''",
+       "editpage-cannot-use-custom-model": "Модель вмісту цієї сторінки не може бути змінена.",
        "longpageerror": "'''Помилка: Поданий вами текст становить $1 {{PLURAL:$1|кілобайт|кілобайти|кілобайтів}}, що більше за встановлену межу у {{PLURAL:$2|кілобайт|кілобайти|кілобайтів}}.'''\nЙого неможливо зберегти.",
        "readonlywarning": "'''Попередження: База даних заблокована на обслуговування, тому, на даний момент, ви не можете записати ваші зміни.\nМожливо, вам варто скопіювати текст у файл на вашому комп'ютері й зберегти його на пізніше.'''\n\nАдміністратор, що заблокував базу даних, залишив наступне пояснення: $1",
        "protectedpagewarning": "'''Попередження: Ця сторінка була захищена від змін так, що тільки користувачі з правами адміністратора можуть її редагувати.'''\nОстанній запис журналу наведений нижче для довідки:",
        "badsig": "Неправильний підпис.\nПеревірте коректність HTML-тегів.",
        "badsiglength": "Ваш підпис дуже довгий.\nПовинно бути не більше $1 {{PLURAL:$1|символу|символів|символів}}.",
        "yourgender": "Стать:",
-       "gender-unknown": "Ð\9dе Ð²Ð¸Ð·Ð½Ð°Ñ\87ена",
+       "gender-unknown": "Ð\97гадÑ\83Ñ\8eÑ\87и Ð\92аÑ\81, Ð¿Ñ\80огÑ\80амне Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ\87еннÑ\8f Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83ваÑ\82име Ð¿Ð¾ Ð·Ð¼Ð¾Ð·Ñ\96 Ð³ÐµÐ½Ð´ÐµÑ\80но Ð½ÐµÐ¹Ñ\82Ñ\80алÑ\8cнÑ\96 Ñ\81лова",
        "gender-male": "Чоловіча",
        "gender-female": "Жіноча",
        "prefs-help-gender": "Задання цього параметру — необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
        "right-viewsuppressed": "Перегляд змін, приховаих від усіх користувачів",
        "right-suppressionlog": "перегляд приватних журналів",
        "right-block": "заборона редагувань для інших дописувачів",
-       "right-blockemail": "Ð\91локування користувача від надсилання електронної пошти",
+       "right-blockemail": "блокування користувача від надсилання електронної пошти",
        "right-hideuser": "блокування імені користувача і приховування його",
        "right-ipblock-exempt": "уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
        "right-proxyunbannable": "уникнення автоматичного блокування проксі-серверів",
        "uploaddisabledtext": "Можливість завантаження файлів відключена.",
        "php-uploaddisabledtext": "Завантаження файлів вимкнене у налаштуваннях PHP. Будь ласка, перевірте значення file_uploads.",
        "uploadscripted": "Файл містить HTML-код або скрипт, який може неправильно обробитися браузером.",
-       "upload-scripted-pi-callback": " \t\nНеможливо завантажити файл, що містить інструкції опрацювання таблиці стилів XML.",
+       "upload-scripted-pi-callback": "Неможливо завантажити файл, що містить інструкції опрацювання таблиці стилів XML.",
        "uploaded-script-svg": " \t\t\nЗнайдений небезпечний елемент з підтримкою сценаріїв «$1» в завантаженому файлі SVG.",
        "uploaded-hostile-svg": " \t\nЗнайдений небезпечний CSS-код в елементі стилю завантаженого файлу SVG.",
        "uploaded-event-handler-on-svg": " \t\nУстановка атрибутів обробника подій <code>$1=\"$2\"</code> не дозволено для SVG-файлів.",
-       "uploaded-href-attribute-svg": " \t\t\nУ SVG-файлів не допускаються href атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> з засобів перехресного локального обміну повідомленнями з метою (т. е. http:// javascript:, тощо).",
+       "uploaded-href-attribute-svg": "У SVG-файлів не допускаються href-атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> з не локальною ціллю (напр. http://, javascript:, тощо).",
+       "uploaded-href-unsafe-target-svg": "У завантаженому SVG-файлі знайдено href до цілі <code>&lt;$1 $2=\"$3\"&gt;</code>, що не є безпечною.",
+       "uploaded-animate-svg": "У завантаженому SVG-файлі знайдено теґ «animate», який може змінювати href, використовуючи атрибут «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-event-handler-svg": "Встановлення  атрибутів обробника подій заблоковане, у завантаженому файлі SVG знайдено <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-href-svg": "Використання теґа «set» для додавання атрибуту «href» у батьківський елемент заблоковано.",
+       "uploaded-wrong-setting-svg": "Використання теґу «set» для додавання віддаленої адреси/даних/сценарію як цілі до будь-якого атрибуту заблоковано. В завантаженому SVG-файлі знайдено <code>&lt;set to=\"$1\"&gt;</code>.",
+       "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\"",
        "uploadinvalidxml": "Не вдалося проаналізувати XML у завантаженому файлі.",
        "uploadvirus": "Файл містить вірус! Див. $1",
        "nmembers": "$1 {{PLURAL:$1|об'єкт|об'єкти|об'єктів}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|член|члени|членів}}",
        "nrevisions": "$1 {{PLURAL:$1|версія|версії|версій}}",
-       "nviews": "$1 {{PLURAL:$1|перегляд|перегляди|переглядів}}",
        "nimagelinks": "Використовується на $1 {{PLURAL:$1|1=сторінці|сторінках}}",
        "ntransclusions": "використовується на $1 {{PLURAL:$1|1=сторінці|сторінках}}",
        "specialpage-empty": "Запит не дав результатів.",
        "unusedimages": "Файли, що не використовуються",
        "wantedcategories": "Необхідні категорії",
        "wantedpages": "Необхідні статті",
-       "wantedpages-summary": "Список неіснуючих сторінок із найбільшою кількістю посилань на них, за винятком тих сторінок, на які ведуть лише перенаправлення. Щоб отримати список неіснуючих сторінок, на які ведуть перенаправлення, перегляньте [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Список неіснуючих сторінок із найбільшою кількістю посилань на них, за винятком тих сторінок, на які ведуть лише перенаправлення. Щоб отримати список неіснуючих сторінок, на які ведуть перенаправлення, перегляньте [[{{#special:BrokenRedirects}}|список поламаних перенаправлень]].",
        "wantedpages-badtitle": "Неправильний заголовок у результатах запиту: $1",
        "wantedfiles": "Необхідні файли",
        "wantedfiletext-cat": "Наступні файли використовують, але вони не існують. У цей список можуть помилково потрапити файли, що знаходяться на зовнішніх сховищах. Такі хибні моменти помічаються <del>перекреслюванням</del>. Крім того, сторінки, що використовують неіснуючі файли, перелічені в [[:$1]].",
        "spam_blanking": "Всі версії містять посилання на $1, очистка",
        "spam_deleting": "Все версії, що містили посилання на $1, вилучаються",
        "simpleantispam-label": "Перевірка на спам.\n'''НЕ''' заповнюйте це!",
-       "pageinfo-title": "Інформація про \" $1 \"",
+       "pageinfo-title": "Інформація про «$1»",
        "pageinfo-not-current": "Вибачте, неможливо переглянути цю інформацію для старих версій.",
        "pageinfo-header-basic": "Основна інформація",
        "pageinfo-header-edits": "Історія редагувань",
        "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 f391f1d..17cfc1a 100644 (file)
        "gotaccountlink": "داخل ہوجائیے",
        "userlogin-resetlink": "داخلِ نوشتہ ہونے کی تفاصیل بھول گئے ہیں؟",
        "userlogin-resetpassword-link": "کلمہ شناخت بھول گئے؟",
-       "userlogin-helplink2": "داخل ہو کر ہماری مدد کریں",
+       "userlogin-helplink2": "داخل نوشتگی میں معاونت درکار ہے؟",
        "createacct-emailrequired": "ای میل پتہ",
        "createacct-emailoptional": "ای میل ایڈریس (اختیاری)",
        "createacct-email-ph": "اپنا برقی پتہ لکھیں",
        "currentrev": "حـالیـہ تـجدید",
        "currentrev-asof": "حالیہ نظرثانی بمطابق $1",
        "revisionasof": "تـجدید بـمطابق $1",
-       "revision-info": "نظرثانی بتاریخ $1 از $2",
+       "revision-info": "نظرثانی بتاریخ $1 از {{GENDER:$6|$2}}$7",
        "previousrevision": "←پرانی تدوین",
        "nextrevision": "→اگلا اعادہ",
        "currentrevisionlink": "حالیہ نظرثانی",
        "unusedtemplateswlh": "دیگر روابط",
        "randompage": "بےترتیب صفحہ",
        "randomincategory-category": "زمرہ:",
+       "randomincategory-submit": "جانا",
        "statistics": "اعداد و شمار",
        "statistics-header-pages": "احصائے صفحات",
        "statistics-header-edits": "احصائے تدوین",
        "invert": "انتخاب بالعکس",
        "namespace_association": "متعلقہ فضا",
        "blanknamespace": "(مرکز)",
-       "contributions": "{{جنس:$1|صارف}} شراکتیں",
+       "contributions": "{{GENDER:$1|صارف}} شراکتیں",
        "contributions-title": "مساہماتِ صارف برائے $1",
        "mycontris": "شراکت",
        "contribsub2": "براۓ $1 ($2)",
        "isimage": "ربطِ ملف",
        "whatlinkshere-links": "روابط ←",
        "whatlinkshere-hideredirs": "رجوع مکررات $1",
-       "whatlinkshere-hidetrans": "تضمینات",
+       "whatlinkshere-hidetrans": "$1 تضمینات",
        "whatlinkshere-hidelinks": "روابط $1",
        "whatlinkshere-hideimages": "روابطِ تصاویر $1",
        "whatlinkshere-filters": "فلٹرذ",
        "blocklink": "پابندی لگائیں",
        "unblocklink": "پابندی ختم",
        "change-blocklink": "پابندی میں تبدیلی",
-       "contribslink": "شـراکـت",
+       "contribslink": "شراکت",
        "blocklogpage": "نوشتۂ پابندی",
        "block-log-flags-nocreate": "کھاتے کی تخلیق غیرفعال",
        "move-page": "منتقلی",
index 84dae98..ad3028e 100644 (file)
@@ -10,7 +10,8 @@
                        "Sociologist",
                        "Xexdof",
                        "Arystanbek",
-                       "6ahodir"
+                       "6ahodir",
+                       "Таржимон"
                ]
        },
        "tog-underline": "Havolalarning tagiga chizish:",
        "passwordreset": "Maxfiy soʻzni yangilash",
        "passwordreset-text-one": "Mahfiy soʻzni tashlash uchun ushbu oynalarni toʻltiring.",
        "passwordreset-text-many": "{{PLURAL:$1|Quyidagi oynalardan birini toʻldirsangiz, elektron pochtangizga vaqtinchalik maxfiy soʻz joʻnatiladi.}}",
-       "passwordreset-legend": "Maxfiy soʻzni yangilash",
        "passwordreset-emaildisabled": "Email xususiyatlari ushbu vikida oʻchirib qoʻyilgan.",
        "passwordreset-username": "Foydalanuvchi nomi:",
        "passwordreset-domain": "Domen:",
        "changeemail-password": "Sizning {{SITENAME}}dagi maxfiy so‘zingiz:",
        "changeemail-submit": "Manzilni o'zgartirish",
        "resettokens": "Kalitlaringizni yangilash",
-       "resettokens-legend": "Kalitlaringizni yangilash",
        "resettokens-tokens": "Kalitlar:",
        "resettokens-token-label": "$1 (joriy koʻrsatkich: $2)",
        "resettokens-done": "Kalitlar yangilandi.",
        "preview": "Ko‘rib chiqish",
        "showpreview": "Koʻrib chiqish",
        "showdiff": "Kiritilgan o‘zgarishlar",
-       "anoneditwarning": "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
+       "anoneditwarning": "<strong>Diqqat:</strong> Siz tizimga kirmagansiz. Agar tahrir kiritsangiz, IP-manzilingiz hammaga koʻrsatiladi. Tizimga <strong>[$1 kirsangiz]</strong> yoki <strong>[$2 hisob yaratsangiz]</strong> tahrirlar foydalanuvchi nomingiz bilan bogʻlanadi, va boshqa imtiyozlarga ham ega boʻlasiz.",
        "missingcommenttext": "Iltimos sharh qoldiring.",
        "summary-preview": "Tavsif bunday koʻrinishda boʻladi:",
        "subject-preview": "Sarlavha bunday koʻrinishda boʻladi:",
        "blockednoreason": "sabab ko'rsatilmadi",
        "whitelistedittext": "Siz sahifalarni oʻzgartirish uchun $1.",
        "nosuchsectiontitle": "Boʻlimni topishni iloji yoʻq",
-       "nosuchsectiontext": "Siz mavjud boʻlmagan boʻlimni tahrirlamoqchi boʻldingiz. Ushbu boʻlim Siz bu sahifani koʻrayotgan mahalda koʻchirilgan yoki yoʻqotilgan boʻlishi mumkin.",
+       "nosuchsectiontext": "Siz mavjud boʻlmagan boʻlimni tahrirlamoqchi boʻldingiz. Ushbu boʻlim sahifani koʻrayotganingizda oʻchirilgan yoki koʻchirilgan boʻlishi mumkin.",
        "loginreqtitle": "Shaxsiyatni aniqlash talab etiladi",
        "loginreqlink": "Kirish",
        "loginreqpagetext": "Boshqa sahifalarni koʻrish uchun $1",
        "sectioneditnotsupported-text": "Ushbu sahifada boʻlimlarni tahrirlash imkoniyati yoʻq.",
        "permissionserrors": "Ruxsat huquqida xato",
        "permissionserrorstext-withaction": "Sizda quyidagi {{PLURAL:$1|sabab|sabablar}}ga koʻra '''$2'''ga ruxsat mavjud emas:",
-       "recreate-moveddeleted-warn": "<strong>Diqqat: Siz avval yoʻqotilgan sahifani qaytadan yaratmoqchisiz.</strong>\n\nU avval nega yoʻqotilgani bilan qiziqib koʻring.\nQuyida ushbu sahifaga oid yoʻqotish va koʻchirish qaydlari keltirilgan:",
+       "recreate-moveddeleted-warn": "<strong>Diqqat: Siz avval oʻchirilgan sahifani qaytadan yaratmoqchisiz.</strong>\n\nU avval nega oʻchirilgani bilan qiziqib koʻring.\nQuyida ushbu sahifaga oid oʻchirish va koʻchirish qaydlari keltirilgan:",
        "moveddeleted-notice": "Bu sahifa oʻchirilgan.\nMaʼlumot uchun quyida oʻchirish va qayta nomlash jurnallaridan mos yozuvlar keltirilgan.",
        "log-fulllog": "Qaydlarni toʻliq koʻrish",
        "edit-conflict": "Tahrirlash toʻqnashuvi.",
        "nextn": "keyingi {{PLURAL:$1|$1}}",
        "prevn-title": "Avvalgi $1 {{PLURAL:$1|natija|natijalar}}",
        "nextn-title": "Keyingi $1 {{PLURAL:$1|natija|natijalar}}",
-       "shown-title": "Sahifada $1 ta natija koʻrsatish",
+       "shown-title": "Sahifada $1 ta {{PLURAL:$1|natija}} koʻrsat",
        "viewprevnext": "Koʻrish ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Ushbu vikida \"[[:$1]]\" nomli sahifa mavjud.'''",
        "searchmenu-new": "<strong>'''Ushbu vikida \"[[:$1]]\" sahifasini yarating!</strong> {{PLURAL:$2|0=|Shuningdek qidiruvingiz orqali topilgan sahifani qarang.|Shuningdek topilgan qidiruv natijalarini qarang.}}",
        "powersearch-togglenone": "Hech qaysini",
        "search-external": "Tashqi qidiruv",
        "preferences": "Moslamalar",
-       "mypreferences": "Moslamalarim",
+       "mypreferences": "Moslamalar",
        "prefs-edits": "Tahrirlar soni:",
        "prefsnologintext2": "Iltimos, moslamalarni oʻzgartirish uchun tizimga kiring.",
        "prefs-skin": "Tashqi ko‘rinishi",
        "prefs-displayrc": "Tasvirlash moslamalari",
        "prefs-displaywatchlist": "Tasvirlash moslamalari",
        "prefs-diffs": "Versiyalar farqi",
-       "userrights": "Foydalanuvchining huquqlarini boshqarish",
+       "userrights": "Foydalanuvchi huquqlarini oʻzgartirish",
        "userrights-user-editname": "Foydalanuvchi nomi:",
        "editusergroup": "Guruhlardagi aʼzoligini oʻzgartirish",
        "userrights-groupsmember": "Aʼzolik:",
        "rcshowhidebots": "Botlarni $1",
        "rcshowhidebots-show": "koʻrsat",
        "rcshowhidebots-hide": "yashir",
-       "rcshowhideliu": "Roʻyxatdan oʻtgan foydalanuvchilarni $1",
+       "rcshowhideliu": "Roʻyxatdan oʻtganlarni $1",
        "rcshowhideliu-show": "koʻrsat",
        "rcshowhideliu-hide": "yashir",
-       "rcshowhideanons": "Anonim foydalanuvchilarni $1",
+       "rcshowhideanons": "Anonimlarni $1",
        "rcshowhideanons-show": "koʻrsat",
        "rcshowhideanons-hide": "yashir",
        "rcshowhidepatr": "Tekshirilgan tahrirlarni $1",
        "upload": "Fayl yuklash",
        "uploadbtn": "Fayl yuklash",
        "uploaderror": "Yuklashda xatolik",
-       "upload-recreate-warning": "<strong>Diqqat: bunday nomli fayl avval yoʻqotilgan yoki koʻchirilgan.</strong>\n\nQuyida bu sahifaga oid yoʻqotish va koʻchirish qaydlari keltirilgan:",
+       "upload-recreate-warning": "<strong>Diqqat: bunday nomli fayl avval oʻchirilgan yoki koʻchirilgan.</strong>\n\nQuyida ushbu sahifaga oid oʻchirish va koʻchirish qaydlari keltirilgan:",
        "upload-permitted": "Yuklash mumkin fayl turlari: $1.",
        "uploadlogpage": "Yuklash qaydlari",
        "filename": "Fayl nomi",
        "filedelete-intro": "Siz ushbu faylni — <strong>[[Media:$1|$1]]</strong> va uning tarixini butunlay oʻchirib tashlamoqchi boʻlyapsiz.",
        "filedelete-comment": "Sabab:",
        "filedelete-submit": "O‘chirish",
+       "filedelete-success": "<strong>$1</strong> oʻchirildi.",
        "filedelete-reason-dropdown": "* Umumiy sabablar\n** mualliflik huquqlari buzilyapti\n** mavjud faylning nusxasi",
        "mimetype": "MIME-tur:",
        "download": "yuklash",
        "confirmdeletetext": "Siz ushbu sahifani va uning tarixini butunlay oʻchirib tashlamoqchi boʻlyapsiz. Iltimos, [[Special:Whatlinkshere/{{FULLPAGENAMEE}}|bogʻlangan sahifalar]] bilan tanishib chiqishni unutmang.",
        "actioncomplete": "Bajarildi",
        "actionfailed": "Jarayon amalga oshmadi",
-       "deletedtext": "\"$1\" yoʻqotildi.\nYaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.",
-       "dellogpage": "Yoʻqotish qaydlari",
-       "dellogpagetext": "Quyida oxirgi yoʻqotish qaydlari keltirilgan",
-       "deletionlog": "yoʻqotish qaydlari",
+       "deletedtext": "«$1» oʻchirildi.\nYaqinda sodir etilgan oʻchirishlar roʻyxatini $2 sahifasida qarang.",
+       "dellogpage": "Oʻchirish qaydlari",
+       "dellogpagetext": "Quyida yaqinda oʻchirilgan sahifalar roʻyxati keltirilgan",
+       "deletionlog": "oʻchirish qaydlari",
        "reverted": "Eski holiga keltirildi",
        "deletecomment": "Sababi:",
        "deleteotherreason": "Boshqa/qoʻshimcha sabab:",
        "sp-contributions-newbies-sub": "Yangi hisob yozuvlaridan",
        "sp-contributions-newbies-title": "Yangi hisob yozuvlarining hissalari",
        "sp-contributions-blocklog": "chetlatishlar",
-       "sp-contributions-deleted": "yoʻqotilgan tahrirlar",
+       "sp-contributions-deleted": "oʻchirilgan tahrirlar",
        "sp-contributions-uploads": "yuklamalar",
        "sp-contributions-logs": "qaydlar",
        "sp-contributions-talk": "munozara",
-       "sp-contributions-userrights": "foydalanuvchining huquqlarini boshqarish",
+       "sp-contributions-userrights": "huquqlarini oʻzgartirish",
        "sp-contributions-blocked-notice": "Ushbu foydalanuvchi hozirda tahrirlashdan chetlatilgan. Quyida chetlatish qaydlaridan soʻnggi yozuv keltirilgan:",
        "sp-contributions-search": "Hissalarni qidirish",
        "sp-contributions-username": "IP-manzil yoki foydalanuvchi nomi:",
        "file-info-size": "$1 × $2 piksel, fayl hajmi: $3, MIME tipi: $4",
        "file-nohires": "Bundan kattaroq tasvir yoʻq.",
        "svg-long-desc": "SVG fayl, asl oʻlchamlari $1 × $2 piksel, fayl hajmi: $3",
-       "show-big-image": "Toʻliq hajmdagi tasvir",
+       "show-big-image": "Asl fayl",
        "noimages": "Tasvir mavjud emas.",
        "ilsubmit": "Qidirish",
        "variantname-uz-latn": "lotincha",
        "exif-iimcategory-wea": "Ob-havo",
        "namespacesall": "Barchasi",
        "monthsall": "barchasi",
-       "confirmrecreate": "Ushbu sahifa siz tahrir qilayotganingizda foydalanuvchi [[User:$1|$1]] ([[User talk:$1|munozara]]) tomonidan quyidagi sababga binoan yoʻqotilgan:\n: <em>$2</em>\nIltimos, sahifani qaytadan yaratmoqchi ekanligingizni tasdiqlang.",
-       "confirmrecreate-noreason": "Ushbu sahifa siz tahrir qilayotganingizda foydalanuvchi [[User:$1|$1]] ([[User talk:$1|munozara]]) tomonidan yoʻqotilgan. Iltimos, sahifani qaytadan yaratmoqchi ekanligingizni tasdiqlang.",
+       "confirmrecreate": "Ushbu sahifa, Siz uni tahrir qilayotganingizda, foydalanuvchi [[User:$1|$1]] ([[User talk:$1|munozara]]) tomonidan quyidagi sababga binoan oʻchirilgan:\n: <em>$2</em>\nIltimos, sahifani qaytadan yaratmoqchi ekanligingizni tasdiqlang.",
+       "confirmrecreate-noreason": "Ushbu sahifa, Siz uni tahrir qilayotganingizda, foydalanuvchi [[User:$1|$1]] ([[User talk:$1|munozara]]) tomonidan oʻchirgan. Iltimos, sahifani qaytadan yaratmoqchi ekanligingizni tasdiqlang.",
        "unit-pixel": " piksel",
        "imgmultipageprev": "← oldingi sahifa",
        "imgmultipagenext": "keyingi sahifa →",
index 4c0ddb1..0cfe6c8 100644 (file)
        "badtitletext": "Tựa trang yêu cầu không đúng, rỗng, hoặc là một liên kết ngôn ngữ hoặc liên kết wiki sai. Nó có thể chứa một hoặc nhiều ký tự mà tựa trang không thể sử dụng.",
        "title-invalid-empty": "Tiêu đề trang được yêu cầu rỗng hoặc chỉ chứa tên của một không gian tên.",
        "title-invalid-utf8": "Tiêu đề trang được yêu cầu chứa một chuỗi UTF-8 không hợp lệ",
-       "title-invalid-interwiki": "Tiêu đề chứa một liên kết liên wiki",
+       "title-invalid-interwiki": "Tiêu đề trang yêu cầu có chứa một liên kết liên wiki mà không thể được sử dụng làm tiêu đề",
        "title-invalid-talk-namespace": "Tiêu đề trang đã yêu cầu chỉ đến trang thảo luận không thể tồn tại.",
        "title-invalid-characters": "Tiêu đề trang đã yêu cầu chứa ký tự không hợp lệ: \"$1\".",
        "title-invalid-relative": "Tiêu đề có đường dẫn tương đối. Tiêu đề trang tương đối (./, ../) là không hợp lệ , bởi chúng thường sẽ không thể đến được khi được xử lý bởi trình duyệt của người dùng.",
        "title-invalid-magic-tilde": "Tiêu đề trang đã yêu cầu chứa dãy dấu ngã không hợp lệ (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Tiêu đề trang đã yêu cầu quá dài. Tiêu đề phải ngắn hơn $1 byte theo mã hóa UTF-8.",
+       "title-invalid-too-long": "Tiêu đề trang đã yêu cầu quá dài. Tiêu đề phải ngắn hơn $1 {{PLURAL:$1|byte|bytes}} byte theo mã hóa UTF-8.",
        "title-invalid-leading-colon": "Tiêu đề trang đã yêu cầu chứa dấu hai chấm ở đầu là không hợp lệ.",
        "perfcached": "Dữ liệu sau được lấy từ bộ nhớ đệm và có thể đã lỗi thời. Tối đa có sẵn {{PLURAL:$1|một kết quả|$1 kết quả}} trong bộ nhớ đệm.",
        "perfcachedts": "Dữ liệu dưới đây được đưa vào vùng nhớ đệm và được cập nhật lần cuối lúc $1. Tối đa có sẵn {{PLURAL:$4|một kết quả|$4 kết quả}} trong vùng nhớ đệm.",
        "passwordreset": "Tái tạo mật khẩu",
        "passwordreset-text-one": "Hãy điền mẫu đơn này để tái tạo mật khẩu.",
        "passwordreset-text-many": "Điền vào {{PLURAL:$1}}một hộp sau để nhận một mật khẩu tạm thời qua thư điện tử.",
-       "passwordreset-legend": "Tái tạo mật khẩu",
        "passwordreset-disabled": "Chức năng tái tạo mật khẩu đã bị tắt trên wiki này.",
        "passwordreset-emaildisabled": "Tính năng gửi thư điện tử không được kích hoạt trên wiki này.",
        "passwordreset-username": "Tên người dùng:",
        "resettokens": "Đặt lại dấu hiệu",
        "resettokens-text": "Bạn có thể đặt lại các dấu hiệu cho phép truy cập những dữ liệu cá nhân của tài khoản của bạn tại đây.\n\nBạn nên sử dụng chức năng này nếu bạn đã vô tình chia sẻ các dấu hiệu với người khác hoặc tài khoản của bạn đã bị xâm phạm.",
        "resettokens-no-tokens": "Không có dấu hiệu để đặt lại.",
-       "resettokens-legend": "Đặt lại dấu hiệu",
        "resettokens-tokens": "Dấu hiệu:",
        "resettokens-token-label": "$1 (giá trị hiện tại: $2)",
        "resettokens-watchlist-token": "Dấu hiệu cho nguồn cấp [[Special:Watchlist|thay đổi trong danh sách theo dõi]] (dạng Atom/RSS)",
        "yourdiff": "Khác",
        "copyrightwarning": "Xin chú ý rằng tất cả các đóng góp của bạn tại {{SITENAME}} được xem là sẽ phát hành theo giấy phép $2 (xem $1 để biết thêm chi tiết). Nếu bạn không muốn trang của bạn bị sửa đổi không thương tiếc và không sẵn lòng cho phép phát hành lại, đừng đăng trang ở đây.<br />\nBạn phải đảm bảo với chúng tôi rằng chính bạn là người viết nên, hoặc chép nó từ một nguồn thuộc phạm vi công cộng hoặc tự do tương đương.\n'''ĐỪNG ĐĂNG TÁC PHẨM CÓ BẢN QUYỀN MÀ CHƯA XIN PHÉP!'''",
        "copyrightwarning2": "Xin chú ý rằng tất cả các đóng góp của bạn tại {{SITENAME}} có thể được sửa đổi, thay thế, hoặc xóa bỏ bởi các thành viên khác. Nếu bạn không muốn trang của bạn bị sửa đổi không thương tiếc, đừng đăng trang ở đây.<br />\nBạn phải đảm bảo với chúng tôi rằng chính bạn là người viết nên, hoặc chép nó từ một nguồn thuộc phạm vi công cộng hoặc tự do tương đương (xem $1 để biết thêm chi tiết).\n'''ĐỪNG ĐĂNG TÁC PHẨM CÓ BẢN QUYỀN MÀ CHƯA XIN PHÉP!'''",
+       "editpage-cannot-use-custom-model": "Mẫu nội dung của trang này không thể thay.",
        "longpageerror": "'''Lỗi: Văn bạn mà bạn muốn lưu dài $1 kilôbyte, dài hơn độ dài tối đa cho phép $2 kilôbyte.'''\nKhông thể lưu trang.",
        "readonlywarning": "'''CẢNH BÁO: Cơ sở dữ liệu đã bị khóa để bảo dưỡng, do đó bạn không thể lưu các sửa đổi của mình. Bạn nên cắt-dán đoạn bạn vừa sửa vào một tập tin và lưu nó lại để sửa đổi sau này.'''\n\nBảo quản viên khi khóa dữ liệu đã đưa ra lý do: $1",
        "protectedpagewarning": "'''Cảnh báo: Trang này đã bị khóa và chỉ có các thành viên có quyền quản lý mới có thể sửa được.'''\nThông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Đối tượng trống",
        "content-json-empty-array": "Mảng trống",
+       "duplicate-args-warning": "<strong>Cảnh báo:</strong> [[:$1]] đang gọi  [[:$2]] với nhiều hơn một giá trị cho thông số \"$3\". Chỉ giá trị cuối cùng mới được sử dụng.",
        "duplicate-args-category": "Trang đưa đối số thừa vào bản mẫu",
        "duplicate-args-category-desc": "Trang đưa một đối số nhiều lần vào một bản mẫu được nhúng, thí dụ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> hoặc <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Cảnh báo: Trang này có quá nhiều lần gọi hàm cú pháp cần mức độ xử lý cao.\n\nNó nên ít hơn $2 {{PLURAL:$2|lần gọi|lần gọi}}, hiện giờ đang là {{PLURAL:$1|$1 lần gọi|$1 lần gọi}}.",
        "badsig": "Chữ ký không hợp lệ; hãy kiểm tra thẻ HTML.",
        "badsiglength": "Chữ ký của bạn quá dài.\nNó không được dài quá $1 ký tự.",
        "yourgender": "Bạn muốn được miêu tả như thế nào?",
-       "gender-unknown": "Tôi không muốn chỉ rõ",
+       "gender-unknown": "Khi nhắc nhở bạn, phần mềm sẽ sử dụng các từ chỉ giới tính trung tính bất cứ khi nào có thể",
        "gender-male": "Nam",
        "gender-female": "Nữ",
        "prefs-help-gender": "Tùy chỉnh này không được bắt buộc.\nPhần mềm sử dụng giá trị này để xưng hô bạn với giới tính đúng.\nThông tin này là công khai.",
        "userrights-lookup-user": "Quản lý nhóm thành viên",
        "userrights-user-editname": "Nhập tên thành viên:",
        "editusergroup": "Sửa nhóm thành viên",
-       "editinguser": "Thay đổi quyền hạn của thành viên '''[[User:$1|$1]]''' $2",
+       "editinguser": "Thay đổi quyền hạn thành viên  của {{GENDER:$1|user}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Sửa nhóm thành viên",
        "saveusergroups": "Lưu nhóm thành viên",
        "userrights-groupsmember": "Thuộc nhóm:",
        "uploaddisabledtext": "Chức năng tải tập tin đã bị tắ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-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.",
        "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.",
        "listfiles-delete": "xóa",
        "listfiles-summary": "Trang đặc biệt này liệt kê các tập tin được tải lên.",
        "listfiles_search_for": "Tìm kiếm theo tên tập tin:",
-       "listfiles-userdoesnotexist": "Tài khoản người dùng \"$ 1\" không được đăng ký.",
+       "listfiles-userdoesnotexist": "Tài khoản người dùng \"$1\" không được đăng ký.",
        "imgfile": "tập tin",
        "listfiles": "Danh sách tập tin",
        "listfiles_thumb": "Hình nhỏ",
        "randomincategory-nopages": "Không có trang nào trong [[:Category:$1]].",
        "randomincategory-category": "Thể loại:",
        "randomincategory-legend": "Trang ngẫu nhiên trong thể loại",
+       "randomincategory-submit": "Xem",
        "randomredirect": "Trang đổi hướng ngẫu nhiên",
        "randomredirect-nopages": "Không có trang đổi hướng nào trong không gian tên “$1”.",
        "statistics": "Thống kê",
        "nmembers": "$1 trang",
        "nmemberschanged": "$1 → $2 trang",
        "nrevisions": "$1 {{PLURAL:$1|phiên bản|phiên bản}}",
-       "nviews": "$1 {{PLURAL:$1|lượt truy cập|lượt truy cập}}",
        "nimagelinks": "Được sử dụng trong $1 trang",
        "ntransclusions": "được sử dụng trong $1 trang",
        "specialpage-empty": "Trang này đang trống.",
        "unusedimages": "Tập tin chưa dùng",
        "wantedcategories": "Thể loại cần thiết",
        "wantedpages": "Trang cần viết",
-       "wantedpages-summary": "Danh sách các trang không tồn tại có nhiều trang nhất liên kết đến, trừ các trang chỉ có trang đổi hướng đến. Xem danh sách các trang không tồn tại có trang đổi hướng đến tại [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Danh sách các trang không tồn tại có nhiều trang nhất liên kết đến, trừ các trang chỉ có trang đổi hướng đến. Xem [[{{#special:BrokenRedirects}}|danh sách các trang không tồn tại có trang đổi hướng đến]].",
        "wantedpages-badtitle": "Tiêu đề không hợp lệ trong tập kết quả: $1",
        "wantedfiles": "Tập tin cần thiết",
        "wantedfiletext-cat": "Các tập tin sau được nhúng nhưng không tồn tại. Các tập tin từ kho dùng chung có thể được liệt kê trong khi tồn tại; các trường hợp này được <del>gạch bỏ</del>. Ngoài ra, các trang nhúng tập tin không tồn tại được liệt kê tại [[:$1]].",
        "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.",
        "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]]”",
        "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",
        "version-libraries": "Các thư viện đã cài đặt",
        "version-libraries-library": "Thư viện",
        "version-libraries-version": "Phiên bản",
+       "version-libraries-license": "Giấy phép",
+       "version-libraries-description": "Miêu tả",
+       "version-libraries-authors": "Tác giả",
        "redirect": "Đổi hướng đến tập tin, người dùng, trang, hoặc số phiên bản",
        "redirect-legend": "Đổi hướng đến tập tin hoặc trang",
        "redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "Khơ-me",
        "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ừ"
+       "special-characters-title-minus": "dấu trừ",
+       "mw-widgets-titleinput-description-new-page": "Trang này chưa tồn tại",
+       "mw-widgets-titleinput-description-redirect": "Đổi hướng đến $1"
 }
index d17bf77..f341b8c 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|გვერდების ცვლილებები თქვენი კონტროლის სიაში]]",
        "noarticletext": "ასე თე ხასილას ტექსტ ვა რე. \nთქვა შეილებუნა [[Special:Search/{{PAGENAME}}|გორათ ათე ხასილაშ ჯოხო]] შხვა ხასილეფს,\n<span class=\\\"plainlinks\\\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} დოგორათ მეხუჯაფილ ჟურნალეფ],\nვარა [{{fullurl:{{FULLPAGENAME}}|action=edit}} დიჭყათ ათე ხასილაშ რედაქტირაფა]</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“ ვაარსებენს. დერწმუნით, ნამჷ-და დასურო გოკონა თე ანგარიშიშ დორსხუაფა ვარდა მიშათინუა.",
        "userpage-userdoesnotexist-view": "მომხმარებელი „$1“ არ არის დარეგისტრირებული.",
        "blocked-notice-logextract": "ეს მომხმარებელი უკვე დაიბლოკა.\nდაბლოკვის მიზეზი შემდეგშია:",
        "clearyourcache": "'''შენიშვნა:''' შენახვის შემდეგ შესაძლოა დაგჭირდეთ ბრაუზერის ქეშის გაწმენდა ცვლილებების სანახავად. \n* '''Firefox / Safari:''' დააჭირეთ ''Shift'' ''Reload''-ზე დაწკაპებისას, ან დააჭირეთ ''Ctrl-F5'', ან ''Ctrl-R'' (''⌘-R'' Mac-ზე); \n* '''Google Chrome:''' დააჭირეთ ''Ctrl-Shift-R'' (''⌘-Shift-R'' Mac-ზე);\n* '''IE:''' დააჭირეთ ''Ctrl'' ''Refresh''-ზე დაწკაპებისას, ან დააჭირეთ ''Ctrl-F5'';\n* '''Opera''' გაწმინდეთ კეში ''Tools→Preferences''-დან.",
        "usercssyoucanpreview": "'''რჩევა:''' შენახვამდე გამოიყენეთ ღილაკი \"{{int:showpreview}}\" თქვენი ახალი CSS ტესტირებისთვის.",
        "userjsyoucanpreview": "<strong>რჩევა:</strong> შენახვამდე გამოიყენეთ ღილაკი \"{{int:showpreview}}\" თქვენი ახალი JS ტესტირებისთვის.",
+       "usercsspreview": "'''რშუდან, ნამჷ-და თქვა ხვალო გიწოთოლორაფას ორწყეთ თქვან მახვარებუშ CSS-ის, თინა დიო ვარე ჩუალირი!'''",
+       "sitecsspreview": "'''რშუდან, ნამჷ-და თქვა ხვალო გიწოთოლორაფას ორწყეთ თქვან მახვარებუშ CSS-ის, თინა დიო ვარე ჩუალირი!'''",
+       "sitejspreview": "'''რშუდან, ნამჷ-და თქვა თე JavaScript კოდიშ ხვალო გიწოთოლორაფას ორწყეთ.'''\n'''თინა დიო ვარე ჩუალირი!'''",
        "updated": "(განახლდა)",
        "note": "<strong>შენიშვნა:</strong>",
        "previewnote": "<strong>რშუდანი თენა რე ხვალე გიწოთოლორაფა</strong>\nთქვანი თირაფეფი დიო ვარე ჩუალირი!",
        "shown-title": "ქაძირი $1 მოღალუ ირ ხასჷლას",
        "viewprevnext": "ქოძირ  ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "თე ვიკის \"[[:$1]]\" ჯოხოთ ხასჷლა რე",
-       "searchmenu-new": "''ქჷდარსხი \"[[:$1]]\" ხასჷლა თე ვიკის'''",
+       "searchmenu-new": "'''ქჷდარსხით „[[:$1]]“ ხასჷლა თე ვიკის!''' {{PLURAL:$2|0=|თაშნეშე ქოძირით გორუაშ შედეგი.|თაშნეშე ქოძირით გორუაშ შედეგეფი.}}",
        "searchprofile-articles": "სტატიეფი",
        "searchprofile-images": "მულტიმედია",
        "searchprofile-everything": "ირფელი",
        "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": "ეს გვერდი ცარიელია.",
        "namespace": "ჯოხოეფიშ ოფირჩა:",
        "invert": "არძო, მერჩქინელიშ მოხ",
        "blanknamespace": "(დუდ)",
-       "contributions": "მახვარებუშ მიშაღალირ თია",
+       "contributions": "{{GENDER:$1|მახვარებუშ}} მიშნაღელ თია",
        "contributions-title": "$1-შა მახვარებუშ მიშაღალირ თია",
        "mycontris": "ჩქიმ მიშნაღელ თია",
        "contribsub2": "$1 ($2) შენი",
        "svg-long-desc": "SVG ფაილ, ნომინალურო $1 × $2 პიქსელ, ფაილიშ ზიმა: $3",
        "show-big-image": "რსული გიშაგორანჯალა",
        "show-big-image-preview": "ზჷმა გიწოთოლორაფაშ ბორჯის: $1.",
+       "show-big-image-other": "შხვა {{PLURAL:$2|გოფართაფა|გოფართაფა}}: $1.",
        "show-big-image-size": "$1 × $2 პიქსელი",
        "newimages": "ახალ სურათეფ",
        "newimages-legend": "ფილტრი",
        "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-imagewidth": "სიგანე",
        "exif-imagelength": "სიმაღალე",
+       "exif-orientation": "ორიენტაცია",
+       "exif-xresolution": "ჰორიზონტალური გაფართაფა",
+       "exif-yresolution": "ვერტიკალური გაფართაფა",
        "exif-datetime": "ფაილიშ თირუაშ რიცხუ დო ბორჯი",
+       "exif-make": "კამერაშ მაწარმაფალი",
+       "exif-model": "კამერაშ მოდელი",
        "exif-software": "გჷმორინაფილი პროგრამა",
        "exif-exifversion": "ვერსია Exif",
        "exif-colorspace": "ფერეფიშ პალიტრა",
+       "exif-datetimeoriginal": "გენერირაფაშ თარიღი დო ბორჯი",
+       "exif-datetimedigitized": "ციფრირაფაშ თარიღი დო ბორჯი",
        "exif-meteringmode": "ექსპოზიციის დათვლის რეჟიმი",
        "exif-lightsource": "განათების წყარო",
        "exif-flash": "ფლეშის სტატუსი",
        "htmlform-cloner-required": "აუცილებელია სულ მცირე ერთი მნიშვნელობა.",
        "logentry-delete-delete": "მოხვარებუქ $1 {{GENDER:$2|დოლასუ}} ხასჷლა: „$3“",
        "logentry-move-move": "მახვარებუქ $1 ხასჷლა „$3“ {{GENDER:$2|გეგნიღჷ}} ხასჷლაშა „$4“",
+       "logentry-newusers-create": "{{GENDER:$2|დორსხუაფილი რე}} მახვარებუშ ანგარიში $1",
        "logentry-upload-upload": "მახვარებუქ $1 {{GENDER:$2|ეხარგუ}} $3",
        "rightsnone": "(არცერთი)",
        "revdelete-summary": "ცვლილებების აღწერა",
index e5c65f6..500a168 100644 (file)
@@ -13,7 +13,8 @@
                        "פוילישער",
                        "아라",
                        "Har-wradim",
-                       "Amire80"
+                       "Amire80",
+                       "පසිඳු කාවින්ද"
                ]
        },
        "tog-underline": "שטרייכט אונטער לינקען",
        "badtitle": "שלעכט קעפל",
        "badtitletext": "דאס קעפל פון דעם געזוכטן בלאט איז געווען אומגעזעצליך, ליידיג, אן אינטערשפראך אדער אינטערוויקי לינק וואס פאסט נישט, אדער אנטהאט כאראקטערס וואס מ'קען נישט ניצן אין א קעפל.",
        "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 רעזולטאטן זענען}} פאראן אין זאפאס.",
        "perfcachedts": "די פאלגנדע דאטן זענען פונעם זאַפאַס, וואס איז לעצט געווארן דערהײַנטיגט $1. מאקסימום {{PLURAL:$4|איין רעזולטאט איז|$4 רעזולטאטן זענען}} פאראן אין זאפאס",
        "querypage-no-updates": "דערהיינטיגן דעם בלאט איז איצט אומערמעגלעכט.\nדאטן דא וועט נישט דערווייל ווערן באנייט.",
        "passwordreset": "צוריקשטעלן פאַסווארט",
        "passwordreset-text-one": "דערגאַנצט די פאָרעם צוריקצושטעלן אײַער פאַסווארט.",
        "passwordreset-text-many": "{{PLURAL:$1|דערגאַנצט איינע פֿון די פֿעלדער כדי צו באקומען א פראוויזאריש פאַסווארט דור כן פאסט.}}",
-       "passwordreset-legend": "צוריקשטעלן פאַסווארט",
        "passwordreset-disabled": "מען האט אומאַקטיוויטר צוריקשטעלן פאַסווערטער אויף דער וויקי.",
        "passwordreset-emaildisabled": "ע-פאסט דינסטן זענען געווארן אומאקטיווירט אויף דער דאזיקער וויקי.",
        "passwordreset-username": "באַניצער נאָמען:",
        "resettokens": "צוריקזעצן טאקנס",
        "resettokens-text": "דא קענט איר צוריקשטעלן טאקנס וואס דערלויבן צוטריט צו געוויסע פריוואטע דאטן שייך צו אײַער קאנטע.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
        "resettokens-no-tokens": "נישט פאראן קיין טאקנס צוריקצוזעצן.",
-       "resettokens-legend": "צוריקזעצן טאקנס",
        "resettokens-tokens": "טאקנס:",
        "resettokens-token-label": "$1 (אקטועלער ווערט: $2)",
        "resettokens-watchlist-token": "טאקן פארן וועב־פֿיד (Atom/RSS) פון [[Special:Watchlist|ענדערונגען צו בלעטער אויף אייער אויפֿפאסונג ליסטע]]",
        "creating": "שאפֿן $1",
        "editingsection": "ענדערט $1 (אפטיילונג)",
        "editingcomment": "רעדאַקטירן $1 (נײַע אפטיילונג)",
-       "editconflict": "×¢× ×\93ער×\9f ×§×\90נפליקט: $1",
+       "editconflict": "רע×\93×\90ק×\98×\99ר×\9f ×§×\90נפֿליקט: $1",
        "explainconflict": "איינער אנדערשט האט געטוישט דעם בלאט זינט איר האט אנגעהויבן דאס צו ענדערן.\nדער אויבערשטער טעקסט אפטייל אנטהאלט דעם בלאט טעקסט ווי עס טוט איצט עקזעסטירן.\nאייערע ענדערונגן זענען געוויזן אין דער אונטערשטער טעקסט אפטיילונג.\nאיר וועט דארפן צאמשטעלן אייערע ענדערונגען אינעם עקזעסטירנדן טעקסט.\n'''בלויז''' דער טעקסט אינעם אויבערשטען טעקסט אפטיילונג וועט ווערן אפגעהיטן ווען איר וועט קוועטשן \"טוט אויפֿהיטן\".",
        "yourtext": "אייער טעקסט",
        "storedversion": "אוועגעלייגטע ווערסיע",
        "yourdiff": "אונטערשיידן",
        "copyrightwarning": "<small>ביטע מערקט אויף אז אייערע אלע ביישטייערונגען אינעם '''{{SITENAME}}''' ערשיינען אונטער דעם $2 דערלויבן (זעט $1 פֿאַר מער פרטים). אויב איר וויִלט נישט לאזן אַנדערע ענדערן אײַערע בײַשטײַערונגען און פֿאַרשפרייטן אייער אַרבעט - ביטע שרײַבט זיי נישט דאָ.<br />\nאיר זאָגט צו אז איר האט געשריבן אן אייגענעם אינהאַלט, אדער האט איר באקומען ערלויבעניש צו שרײַבן אים דאָ.</small>",
        "copyrightwarning2": "'''אכטונג:''' אנדערע באניצערס קענען מעקן און ענדערן אייערע ביישטייערונגען צו {{SITENAME}}.\nאויב ווילט איר נישט  אז אייער ארבעט זאל זיין הפקר פאר אנדערע דאס צו באארבעטן – פארשפרייט זי נישט דא.\n\nאזוי אויך, זאגט איר צו אז איר האט דאס געשריבן אליין, אדער דאס איבערקאפירט פון א מקור מיט פולן רשות דאס מפקיר זיין (זעט $1 פאר מער פרטים).\n'''זיכט נישט באניצן מיט שטאף וואס איז באשיצט מיט קאפירעכטן!'''",
+       "editpage-cannot-use-custom-model": "מען קען נישט ענדערן דעם אינהאלט־מאדעל פון דעם בלאט.",
        "longpageerror": "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}.\nער קען נישט ווערן אפגעהיטן.'''",
        "readonlywarning": "'''ווארענונג: די דאטנבאזע איז געווארן פארשלאסן פאר אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. '''\nאיר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן אויף שפעטער.\n\nדער אדמיניסטראטאר וואס האט זי פארשלאסן האט מסביר געווען אזוי: $1",
        "protectedpagewarning": "'''ווארענונג:  דער בלאט איז געווארן פארשפארט אז בלויז באניצערס מיט סיסאפ פריווילעגיעס קענען אים ענדערן.'''\nדי פארגאנגענע לאגבוך באשרײַבונג ווערט געוויזן דא:",
        "badsig": "נישט גילטיקער רויער אונטערשריפט. ביטע קאנטראלירט די HTML טאַגן.",
        "badsiglength": "אונטערשריפט צו לאנג; מוז זיין ווינציגער פון {{PLURAL:$1|איין אות|$1 אותיות}}.",
        "yourgender": "וויאזוי ווילסטו זיך באשרײַבן?",
-       "gender-unknown": "×\9b\95×\95×\99×\9c ×\96×\99×\9a × ×\99ש×\98 ×\91×\90שרײַ×\91×\9f",
+       "gender-unknown": "×\91×\99×\99×\9d ×\93ער×\9e×\90× ×¢×\9f ×\90×\99×\99×\9a, ×\95×\95×¢×\98 ×\93×\90ס ×\95×\95×\99×\99×\9b×\95×\95×\90ר×\92 × ×\99צ×\9f × ×\99×\99×\98ר×\90×\9c×¢ ×\95×\95ער×\98ער ×\95×\95×¢×\9f ×\9e×¢×\92×\9c×¢×\9a",
        "gender-male": "ער רעדאקטירט וויקי בלעטער",
        "gender-female": "זי רעדאקטירט וויקי בלעטער",
        "prefs-help-gender": "שטעלן דעם פרעפֿערענץ איז אפציאנאַל.\nדאס ווייכוואַרג באניצט זיין ווערט אײַך צו אַדרעסירן און דערמאנען צו אנדערע מיטן געהעריגן מין פֿארעם. \nדי אינפֿארמאַציע ווערט ידוע צו אַלעמען.",
        "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": "{{PLURAL:$1|איין רעוויזיע|$1 רעוויזיעס}}",
-       "nviews": "{{PLURAL:$1|איין קוק|$1 קוקן}}",
        "nimagelinks": "געניצט אויף $1 {{PLURAL:$1|בלאַט|בלעטער}}",
        "ntransclusions": "געניצט אויף $1 {{PLURAL:$1|בלאַט|בלעטער}}",
        "specialpage-empty": "דער בלאט איז ליידיג.",
        "tooltip-pt-logout": "ארויסלאגירן",
        "tooltip-pt-createaccount": "איר ווערט דערמוטיגט צו שאפן א קאנטע און אריינלאגירן; ס'איז אביר נישט אבליגאטאריש",
        "tooltip-ca-talk": "שמועס וועגן דעם אינהאַלט בלאַט",
-       "tooltip-ca-edit": "×\90×\99ר ×§×¢× ×\98 ×¢× ×\93ער×\9f ×\93×¢×\9d ×\91×\9c×\90×\98. ×\91×\99×\98×¢ ×\91×\90× ×\99צ×\98 ×\93×¢×\9d ''פֿ×\90ר×\95×\99סק×\95ק'' ×§× ×¢×¤×\9c ×\91עפֿ×\90ר×\9f ×\90פ×\94×\99×\98×\9f",
+       "tooltip-ca-edit": "רע×\93×\90ק×\98×\99ר×\9f ×\93×¢×\9d ×\91×\9c×\90Ö·×\98",
        "tooltip-ca-addsection": "אָנהייבן א נײַע אָפטיילונג",
        "tooltip-ca-viewsource": "דאס איז א פֿארשלאסענער בלאט, איר קענט נאר באַקוקן זיין מקור",
        "tooltip-ca-history": "פריערדיגע ווערסיעס פון דעם בלאט.",
index e90cb51..5d21409 100644 (file)
@@ -23,7 +23,9 @@
                        "Impersonator 1",
                        "Cedric tsan cantonais",
                        "Liuxinyu970226",
-                       "Yueman"
+                       "Yueman",
+                       "CRCHF",
+                       "Shinjiman"
                ]
        },
        "tog-underline": "連結加底線:",
        "no-null-revision": "唔可以對 \"$1\" 開個新嘅空白修改",
        "badtitle": "錯嘅標題",
        "badtitletext": "要求嘅標題唔啱、空白,跨語言或者跨維基連結標題錯誤。亦可能係標題包括咗一個或多過一個字元。",
+       "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": "響呢一頁嘅更新現時停用。啲資料將唔會即時更新。",
        "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 嘅密匙",
        "creating": "開版$1",
        "editingsection": "而家喺度編輯$1 (小節)",
        "editingcomment": "而家喺度編輯$1 (新小節)",
-       "editconflict": "編輯è¡\9dçª\81ï¼\9a$1",
+       "editconflict": "ç\94±æ\96¼ç·¨è¼¯è¡\9dçª\81ï¼\8c{{GENDER:|ä½ |妳|ä½ }}å\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": "已經儲存咗嘅修訂",
        "semiprotectedpagewarning": "'''注意:'''呢一頁已經保護咗,只有已經註冊嘅用戶先至可以改。\n最近嘅日誌響下面提供以便參考:",
        "cascadeprotectedwarning": "'''警告:'''呢一頁已經保護咗,只有管理員權限嘅用戶先至可以改,因為佢係響以下連串保護嘅{{PLURAL:$1|一|幾}}頁度包含咗:",
        "titleprotectedwarning": "'''警告:呢一版已經保護咗,需要一啲[[Special:ListGroupRights|指定權限]]先至可以開到。'''\n最近嘅日誌響下面提供以便參考:",
-       "templatesused": "呢版用嘅模{{PLURAL:$1|模|模}}:",
+       "templatesused": "呢版用嘅{{PLURAL:$1|模}}:",
        "templatesusedpreview": "呢一次預覽裏面,用咗下面呢啲{{PLURAL:$1|模|模}}:",
        "templatesusedsection": "呢一節用咗嘅{{PLURAL:$1|模|模}}:",
        "template-protected": "(保護)",
        "content-model-css": "層疊樣式表",
        "content-json-empty-object": "吉嘅嘢",
        "content-json-empty-array": "吉嘅陣列",
-       "duplicate-args-category": "模用重複參數嘅嘅版面",
+       "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次呼叫,佢而家係$1次呼叫。",
        "expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
        "post-expand-template-inclusion-warning": "警告: 包含模大細太大。\n有啲模將唔會包含。",
        "right-move": "搬版",
        "right-move-subpages": "搬版同埋佢哋嘅細版",
        "right-move-rootuserpages": "搬根用戶版",
+       "right-move-categorypages": "移走類頁",
        "right-movefile": "搬檔案",
        "right-suppressredirect": "當搬版嗰陣唔開來源頁嘅跳轉",
        "right-upload": "上載檔案",
        "nmembers": "$1 位成員",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|位成員}}",
        "nrevisions": "$1 次修訂",
-       "nviews": "$1 次瀏覽",
        "nimagelinks": "用響$1版",
        "ntransclusions": "用響$1版",
        "specialpage-empty": "呢個報告嘅結果係空嘅。",
        "tooltip-pt-logout": "登出",
        "tooltip-pt-createaccount": "建議你開返個戶口簽到,不過唔做都無所謂。",
        "tooltip-ca-talk": "關於內容頁嘅討論",
-       "tooltip-ca-edit": "你可以編輯呢一頁。請在儲存之前先預覽一吓。",
+       "tooltip-ca-edit": "改呢版",
        "tooltip-ca-addsection": "開始新嘅小節",
        "tooltip-ca-viewsource": "呢一頁已經被保護。你可以睇吓呢一頁呢原始碼。",
        "tooltip-ca-history": "呢一頁之前嘅修訂",
index 4cb8dc1..474a009 100644 (file)
        "passwordreset": "重置密码",
        "passwordreset-text-one": "请输入你要重置的用户名。",
        "passwordreset-text-many": "{{PLURAL:$1|在此键入您希望接收临时密码的邮件地址。}}",
-       "passwordreset-legend": "重置密码",
        "passwordreset-disabled": "此Wiki已经禁用密码重置。",
        "passwordreset-emaildisabled": "此Wiki上无法使用邮件功能。",
        "passwordreset-username": "用户名:",
        "resettokens": "重置密钥",
        "resettokens-text": "你可以在这里重置允许访问与你的账户有关的特定私人数据的密钥。\n\n如果你意外将它们分享给他人,或是你的账户已经被入侵,你应该重置它们。",
        "resettokens-no-tokens": "没有可以重置的密钥。",
-       "resettokens-legend": "重置密钥",
        "resettokens-tokens": "密钥:",
        "resettokens-token-label": "$1(当前值:$2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|对你的监视列表中的页面的更改]]的网页feed(Atom/RSS)的密钥",
        "yourdiff": "差异",
        "copyrightwarning": "请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布,请查看在$1的细节。\n如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。\n'''不要在未获授权的情况下发表!'''<br />",
        "copyrightwarning2": "请注意,您对{{SITENAME}}的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅$1的细节)。'''不要在未获授权的情况下发表!'''",
+       "editpage-cannot-use-custom-model": "此页面的内容模型不能被更改。",
        "longpageerror": "'''错误:您所提交的文本长度有{{PLURAL:$1|1|$1}}KB,这大于{{PLURAL:$2|1|$2}}KB的最大值。'''\n因此,该文本无法保存。",
        "readonlywarning": "<strong>警告:数据库被锁定以进行维护,所以您目前将无法保存您的编辑。</strong>您可能希望将您的文本复制粘贴到一个文本文档并保存它,以便稍后更改。\n\n锁定数据库的管理员有如下解释:$1",
        "protectedpagewarning": "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
        "badsig": "错误的原始签名。请检查HTML标签。",
        "badsiglength": "签名过长。请不超过$1个字符。",
        "yourgender": "您希望使用什么性别称呼?",
-       "gender-unknown": "我不愿意指明",
+       "gender-unknown": "当提及您时,软件将使用性别中性的词汇(只要可能)",
        "gender-male": "他",
        "gender-female": "她",
        "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
        "uploaddisabledtext": "文件上传已停用。",
        "php-uploaddisabledtext": "PHP文件上传停用。请检查file_uploads设置。",
        "uploadscripted": "该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。",
-       "upload-scripted-pi-callback": "不能上传包含xml-stylesheet处理命令的文件。",
+       "upload-scripted-pi-callback": "不能上传包含XML-stylesheet处理命令的文件。",
        "uploaded-script-svg": "在上传的SVG文件中找到可编写脚本的元素“$1”。",
        "uploaded-hostile-svg": "在上传的SVG文件中的样式元素中找到不安全CSS。",
        "uploaded-event-handler-on-svg": "在SVG文件中不允许设置event-handler属性<code>$1=\"$2\"</code>。",
-       "uploaded-href-attribute-svg": "在SVG文件中不允许Href属性<code>&lt;$1 $2=\"$3\"&gt;</code>带非本地目标(例如http://、javascript:等)。",
+       "uploaded-href-attribute-svg": "在SVG文件中不允许href属性<code>&lt;$1 $2=\"$3\"&gt;</code>带非本地目标(例如http://、javascript:等)。",
        "uploaded-href-unsafe-target-svg": "在上传的SVG文件中找到href至不安全目标<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-animate-svg": "在上传的SVG文件找到“animate”标签,它可能会更改href,使用“from”属性<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-setting-event-handler-svg": "设置event-handler属性时受阻,在上传的SVG文件中找到<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "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": "删除文件",
        "randomincategory-nopages": "[[:Category:$1]]中没有页面。",
        "randomincategory-category": "分类:",
        "randomincategory-legend": "分内中随机页面",
+       "randomincategory-submit": "提交",
        "randomredirect": "随机重定向",
        "randomredirect-nopages": "“$1”名字空间中没有重定向。",
        "statistics": "统计",
        "nmembers": "$1个成员",
        "nmemberschanged": "$1 → $2个成员",
        "nrevisions": "$1个版本",
-       "nviews": "$1次浏览",
        "nimagelinks": "用于$1个页面中",
        "ntransclusions": "用于$1个页面中",
        "specialpage-empty": "此报告无结果。",
        "notvisiblerev": "上次由不同用户所作的版本已经删除",
        "watchlist-details": "不计讨论页,您的监视列表中有$1个页面。",
        "wlheader-enotif": "已启用电子邮件通知。",
-       "wlheader-showupdated": "您上次访问后发生更改的页面'''加粗'''显示",
+       "wlheader-showupdated": "您上次访问后发生更改的页面<strong>加粗</strong>显示。",
        "wlnote": "下面是{{PLURAL:$2|过去<strong>$2</strong>小时}}的{{PLURAL:$1|最后<strong>$1</strong>个更改}},截至$3 $4。",
        "wlshowlast": "显示过去$1小时$2天",
        "watchlist-options": "监视列表选项",
        "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-title-cantexist": "在$1尚不能有一个页面。",
+       "changecontentmodel-nodirectediting": "$1内容模型不支持直接编辑",
+       "log-name-contentmodel": "内容模型更改日志",
+       "log-description-contentmodel": "与一个页面的内容模型相关的活动",
+       "logentry-contentmodel-change": "$1将页面$3的内容模型从“$4”{{GENDER:$2|更改}}为“$5”",
+       "logentry-contentmodel-change-revertlink": "回退",
+       "logentry-contentmodel-change-revert": "回退",
        "protectlogpage": "保护日志",
        "protectlogtext": "下面是页面保护更改的列表。请见[[Special:ProtectedPages|受保护页面列表]]查看目前正在进行的页面保护的列表。",
        "protectedarticle": "保护“[[$1]]”",
        "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": "本页面过去的版本",
        "pageinfo-robot-index": "允许",
        "pageinfo-robot-noindex": "不允许",
        "pageinfo-watchers": "页面监视者数",
+       "pageinfo-visiting-watchers": "正在访问最近编辑的页面浏览者数量",
        "pageinfo-few-watchers": "少于$1个监视者",
+       "pageinfo-few-visiting-watchers": "这里可能有或可能没有观察用户正在访问最近编辑",
        "pageinfo-redirects-name": "至该页面的重定向数",
        "pageinfo-subpages-name": "该页面的子页面数",
        "pageinfo-subpages-value": "$1($2个{{PLURAL:$2|重定向}},$3个{{PLURAL:$3|非重定向}})",
        "deletedwhileediting": "'''警告''':此页在您开始编辑之后已经被删除!",
        "confirmrecreate": "在您开始编辑这个页面后,用户[[User:$1|$1]] ([[User talk:$1|讨论]])以下列原因删除了这个页面:\n: ''$2''\n请确认在您重新创建页面前三思。",
        "confirmrecreate-noreason": "用户 [[User:$1|$1]]([[User talk:$1|talk]]) 在您开始编辑之后删除此页面。请确认您确实要重新创建此页面。",
-       "recreate": "重建",
+       "recreate": "重新创建",
        "confirm_purge_button": "确定",
        "confirm-purge-top": "要清除此页面的缓存吗?",
        "confirm-purge-bottom": "清除页面数据会清除缓存并强制显示最近的版本。",
        "watchlistedit-normal-done": "已从你的监视列表删除$1个标题:",
        "watchlistedit-raw-title": "编辑原始监视列表",
        "watchlistedit-raw-legend": "编辑原始监视列表",
-       "watchlistedit-raw-explain": "æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84æ \87é¢\98å\9c¨ä¸\8bé\9d¢æ\98¾ç¤ºï¼\8cå\90\8cæ\97¶ä¹\9få\8f¯ä»¥å\8f¯ä»¥é\80\9aè¿\87ç¼\96è¾\91è¿\99个表å\8e»å\8a å\85¥ä»¥å\8f\8a移é\99¤æ \87é¢\98ï¼\9bä¸\80è¡\8cä¸\80个æ \87é¢\98ã\80\82å½\93å®\8cæ\88\90以å\90\8eï¼\8cç\82¹å\87»{{int:Watchlistedit-raw-submit}}ã\80\82æ\82¨ä¹\9få\8f¯ä»¥ä½¿ç\94¨[[Special:EditWatchlist|标准编辑器]]。",
+       "watchlistedit-raw-explain": "æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中ç\9a\84æ \87é¢\98å\9c¨ä¸\8bé\9d¢æ\98¾ç¤ºï¼\8c并å\8f¯é\80\9aè¿\87ç¼\96è¾\91此表以添å\8a æ\88\96移é\99¤æ \87é¢\98ï¼\9bæ¯\8fè¡\8cä¸\80个æ \87é¢\98ã\80\82å½\93å®\8cæ\88\90以å\90\8eï¼\8cç\82¹å\87»â\80\9c{{int:Watchlistedit-raw-submit}}â\80\9dã\80\82æ\82¨ä¹\9få\8f¯ä»¥[[Special:EditWatchlist|使ç\94¨标准编辑器]]。",
        "watchlistedit-raw-titles": "标题:",
        "watchlistedit-raw-submit": "更新监视列表",
        "watchlistedit-raw-done": "您的监视列表已经更新。",
        "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]]。",
        "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 57c5c02..6e435e3 100644 (file)
        "searcharticle": "執行",
        "history": "頁面歷史",
        "history_short": "歷史",
-       "updatedmarker": "自我上次參觀後的更新",
+       "updatedmarker": "自我上次造訪後的更新",
        "printableversion": "可列印版",
        "permalink": "靜態連結",
        "print": "列印",
        "passwordreset": "重新設定密碼",
        "passwordreset-text-one": "完成此表單,透過電子郵件傳送臨時密碼以重新設定您的密碼。",
        "passwordreset-text-many": "{{PLURAL:$1|請完成此表單以透過電子郵件接收臨時密碼。}}",
-       "passwordreset-legend": "重設密碼",
        "passwordreset-disabled": "此 Wiki 已停用重設密碼。",
        "passwordreset-emaildisabled": "此 Wiki 已停用電子郵件功能。",
        "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 的密鑰",
        "subject-preview": "主旨/標題預覽:",
        "previewerrortext": "嘗試預覽您的變更時發生錯誤。",
        "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|偏好設定]] 中設定了一個有效的電子郵地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細訊息。",
-       "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細資料。",
+       "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|偏好設定]] 中設定了一個有效的電子郵地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細訊息。",
+       "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細資料。",
        "blockednoreason": "未說明原因",
        "whitelistedittext": "請先 $1 才可編輯頁面。",
        "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件地址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件地址。",
        "creating": "正在建立 $1",
        "editingsection": "正在編輯 $1 (章節)",
        "editingcomment": "正在編輯 $1 (新章節)",
-       "editconflict": "編輯è¡\9dçª\81ï¼\9a$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",
        "explainconflict": "在您開始編輯之後已有其他人儲存了此頁面。\n上方的文字框內顯示了目前頁面中的文字內容,\n您所變更的文字內容顯示在下方文字框中。\n您須要將您所變更的文字內容合併到已儲存的文字內容當中。\n若您直接點選 \"{{int:savearticle}}\" <strong>只有</strong> 上方文字框中的內容會被儲存。",
        "yourtext": "您的文字",
        "storedversion": "已儲存修訂",
        "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": "此頁面的內容模型不能被修改。",
        "longpageerror": "<strong>錯誤:您所送出的文字內容共有 {{PLURAL:$1|1 KB|$1 KB}},已超出系統上限 {{PLURAL:$2|1 KB|$2 KB}}。</strong>\n\n無法儲存。",
        "readonlywarning": "<strong>警告:資料庫已被鎖定以進行維護,因此無法儲存您目前所做的編輯動作。</strong>\n您可先複製您的文字並貼上到文字檔案中儲存,稍後再儲存您編輯。\n\n鎖定資料庫的管理員有以下說明:$1",
        "protectedpagewarning": "<strong>警告:本頁已經被保護,只有擁有管理員權限的使用者才可編輯。</strong>\n以下提供最近的日誌以便參考:",
        "badsig": "錯誤的原始簽名。請檢查 HTML 標籤。",
        "badsiglength": "您的簽名過長。\n它的長度不可超過 $1 個字元。",
        "yourgender": "您希望使用何種性別稱呼?",
-       "gender-unknown": "我不想說明",
+       "gender-unknown": "當提到您時,本軟體將會盡可能使用不分性別詞",
        "gender-male": "他編輯了 Wiki 頁面",
        "gender-female": "她編輯了 Wiki 頁面",
        "prefs-help-gender": "此偏好設定為選填欄位。\n系統會使用您選擇的方式稱呼您,對他人提及您時也會使用適當語法稱呼。\n此項資訊會被公開。",
        "uploaddisabledtext": "已停用檔案上傳。",
        "php-uploaddisabledtext": "PHP 已停用檔案上傳。\n請檢查 file_uploads 設定。",
        "uploadscripted": "此檔案包含可能會被網頁瀏覽器錯誤執行的 HTML 或 Script。",
-       "upload-scripted-pi-callback": "無法上傳包含 xml-stylesheet 處理命令的檔案。",
+       "upload-scripted-pi-callback": "無法上傳包含 XML-stylesheet 處理命令的檔案。",
        "uploaded-script-svg": "於已上傳的 SVG 檔案中找到可程式的腳本標籤 \"$1\"。",
        "uploaded-hostile-svg": "於已上傳的 SVG 檔案的樣式標籤中找到不安全的 CSS。",
        "uploaded-event-handler-on-svg": "不允許在 SVG 檔案設定 event-handler 屬性 <code>$1=\"$2\"</code>。",
-       "uploaded-href-attribute-svg": "不允許在 SVG 檔案中的 Href 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 使用非本地的目標  (例如 http://, javascript:, 等)。",
+       "uploaded-href-attribute-svg": "不允許在 SVG 檔案中的 href 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 使用非本地的目標  (例如 http://, javascript:, 等)。",
        "uploaded-href-unsafe-target-svg": "於已上傳的 SVG 檔案中找到 href 連結至不安全的目標 <code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-animate-svg": "於已上傳的 SVG 檔案中找到 \"animate\" 標籤可能會使用 \"from\" 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 更改 href。",
        "uploaded-setting-event-handler-svg": "於已上傳的 SVG 檔案中找到 <code>&lt;$1 $2=\"$3\"&gt;</code>,已禁止設定 event-handler 屬性。",
        "randomincategory-nopages": "[[:Category:$1]] 中沒有任何頁面。",
        "randomincategory-category": "分類:",
        "randomincategory-legend": "隨機分類頁面",
+       "randomincategory-submit": "進入",
        "randomredirect": "隨機重新導向",
        "randomredirect-nopages": "在命名空間 \"$1\" 中沒有任何重新導向頁面。",
        "statistics": "統計",
        "nmembers": "$1 個成員",
        "nmemberschanged": "$1 → $2 個成員",
        "nrevisions": "$1 次修訂",
-       "nviews": "$1 次檢視",
        "nimagelinks": "被 $1 個頁面使用",
        "ntransclusions": "被 $1 個頁面使用",
        "specialpage-empty": "此報表無查無任何結果。",
        "noindex-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__NOINDEX__</nowiki></code> 未被機器人列入索引的頁面。",
        "index-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__INDEX__</nowiki></code> 被機器人列入索引的頁面。",
        "post-expand-template-inclusion-category-desc": "展開模板後大小超過 <code>$wgMaxArticleSize</code> 導致部份模板未正常展開的頁面。",
-       "post-expand-template-argument-category-desc": "å±\95é\96\8b樣板參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
+       "post-expand-template-argument-category-desc": "å±\95é\96\8b模板參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
        "expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的解析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
        "broken-file-category-desc": "含有損壞檔案連結的頁面 (內嵌檔案連結的檔案不存在)。",
        "hidden-category-category-desc": "內容中使用 <code><nowiki>__HIDDENCAT__</nowiki></code> 的分類,可隱藏預設在頁面上顯示的分類連結方塊。",
        "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-title-cantexist": "無法於 $1 建立頁面。",
+       "changecontentmodel-nodirectediting": "$1 的內容模型不支援直接編輯",
+       "log-name-contentmodel": "內容模型變更日誌",
+       "log-description-contentmodel": "與頁面內容模型相關的事件",
+       "logentry-contentmodel-change": "$1 已變頁面 $3 的內容模型自 \"$4\" 至 \"$5\"",
+       "logentry-contentmodel-change-revertlink": "還原",
+       "logentry-contentmodel-change-revert": "還原",
        "protectlogpage": "保護日誌",
        "protectlogtext": "以下為變更頁面保護的清單。\n請參考 [[Special:ProtectedPages|受保護頁面清單]] 檢視目前受保護頁面。",
        "protectedarticle": "已保護 \"[[$1]]\"",
        "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-preview": "請在儲存前預覽您的變更!",
        "tooltip-diff": "顯示您對內容所做的變更",
        "tooltip-compareselectedversions": "檢視此頁兩個已選擇的修訂間的差異",
-       "tooltip-watch": "新增此頁面至您的監視清單",
+       "tooltip-watch": "加入此頁面至您的監視清單",
        "tooltip-watchlistedit-normal-submit": "移除標題",
        "tooltip-watchlistedit-raw-submit": "更新監視清單",
        "tooltip-recreate": "無論是否被刪除,重新建立該頁面。",
        "pageinfo-robot-index": "允許",
        "pageinfo-robot-noindex": "不允許",
        "pageinfo-watchers": "頁面監視者數",
+       "pageinfo-visiting-watchers": "頁面監視者參觀最近編輯數",
        "pageinfo-few-watchers": "少於 $1 名監視者",
+       "pageinfo-few-visiting-watchers": "參觀近期編輯的使用者可能為監視使用者",
        "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
        "pageinfo-subpages-name": "此頁面的子頁面數",
        "pageinfo-subpages-value": "$1 ($2 個{{PLURAL:$2|重新導向}}; $3 個{{PLURAL:$3|非重新導向}})",
        "exif-headline": "標題",
        "exif-credit": "製作/提供者",
        "exif-source": "來源",
-       "exif-editstatus": "å\9c\96ç\89\87編輯狀態",
+       "exif-editstatus": "å\9c\96ç\89\87社è©\95狀態",
        "exif-urgency": "緊急性",
        "exif-fixtureidentifier": "夾具名稱",
        "exif-locationdest": "描繪地點",
        "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
        "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
        "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
-       "recreate": "重新建立",
+       "recreate": "此頁面在您編輯的這段期間已被刪除,請點選 \"$1\" 重新建立頁面。",
        "confirm_purge_button": "確定",
        "confirm-purge-top": "要清除此頁面的快取嗎?",
        "confirm-purge-bottom": "清除頁面會清空頁面的快取記錄並強制顯示最近的頁面修訂。",
        "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]]。",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|已停用}}標籤 \"$4\" 供使用者與機器人使用",
        "log-name-tag": "標籤日誌",
        "log-description-tag": "當使用者自各別修訂或日誌項目加入或移除[[Special:Tags|標籤]]時會顯示於此頁面。 此日誌並不會列出當時對標籤所做的編輯、刪除或類似的動作。",
-       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|已加入}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的修訂 $4。",
-       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|已加入}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的日誌項目 $5。",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|已新增}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的修訂版本 $4。",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|已新增}}{{PLURAL:$7|標籤|標籤}} $6 至頁面 $3 的日誌項目 $5。",
        "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|已移除}}{{PLURAL:$9|標籤|標籤}} $8 自頁面 $3 的修訂 $4。",
        "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|已移除}}{{PLURAL:$9|標籤|標籤}} $8 自日誌項目 $3 的修訂 $5。",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|已更新}}標籤於頁面 $3 的修訂 $4 ({{PLURAL:$7|加入}} $6; {{PLURAL:$9|移除}} $8)。",
        "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 9f86bd6..4591312 100644 (file)
@@ -8,4 +8,4 @@
  *
  */
 
-$fallback = 'aeb-arab';
\ No newline at end of file
+$fallback = 'aeb-arab';
index 1043496..8f0088e 100644 (file)
@@ -10,4 +10,4 @@
 
 $fallback = 'ar';
 
-$rtl = true;
\ No newline at end of file
+$rtl = true;
index 6fda808..e553b7f 100644 (file)
@@ -84,7 +84,7 @@ $specialPageAliases = array(
        'Mostlinkedcategories'      => array( 'Najviše_povezane_kategorije' ),
        'Mostlinkedtemplates'       => array( 'Najviše_povezani_šabloni' ),
        'Mostrevisions'             => array( 'Najviše_uređivane_stranice' ),
-       'Movepage'                  => array( 'PreusmjeriStranicu' ),
+       'Movepage'                  => array( 'Premjesti_stranicu', 'PreusmjeriStranicu' ),
        'Mycontributions'           => array( 'MojiDoprinosi' ),
        'Mypage'                    => array( 'MojaStranica' ),
        'Mytalk'                    => array( 'MojRazgovor' ),
diff --git a/languages/messages/MessagesDty.php b/languages/messages/MessagesDty.php
new file mode 100644 (file)
index 0000000..f90746c
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+/** Doteli (डोटेली)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'ne';
\ No newline at end of file
index 23b702c..57a79bc 100644 (file)
@@ -303,6 +303,7 @@ $magicWords = array(
        'stylepath'               => array( 0, 'STYLEPATH' ),
        'grammar'                 => array( 0, 'GRAMMAR:' ),
        'gender'                  => array( 0, 'GENDER:' ),
+       'bidi'                    => array( 0, 'BIDI:' ),
        'notitleconvert'          => array( 0, '__NOTITLECONVERT__', '__NOTC__' ),
        'nocontentconvert'        => array( 0, '__NOCONTENTCONVERT__', '__NOCC__' ),
        'currentweek'             => array( 1, 'CURRENTWEEK' ),
@@ -395,6 +396,7 @@ $specialPageAliases = array(
        'Booksources'               => array( 'BookSources' ),
        'BrokenRedirects'           => array( 'BrokenRedirects' ),
        'Categories'                => array( 'Categories' ),
+       'ChangeContentModel'        => array( 'ChangeContentModel' ),
        'ChangeEmail'               => array( 'ChangeEmail' ),
        'ChangePassword'            => array( 'ChangePassword', 'ResetPass', 'ResetPassword' ),
        'ComparePages'              => array( 'ComparePages' ),
@@ -451,7 +453,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'PageLanguage' ),
        'PasswordReset'             => array( 'PasswordReset' ),
        'PermanentLink'             => array( 'PermanentLink', 'PermaLink' ),
-       'Popularpages'              => array( 'PopularPages' ),
        'Preferences'               => array( 'Preferences' ),
        'Prefixindex'               => array( 'PrefixIndex' ),
        'Protectedpages'            => array( 'ProtectedPages' ),
diff --git a/languages/messages/MessagesGom.php b/languages/messages/MessagesGom.php
new file mode 100644 (file)
index 0000000..4adf154
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+/** Goan Konkani (गोवा कोंकणी / Gova Konknni)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'gom-deva';
diff --git a/languages/messages/MessagesGom_deva.php b/languages/messages/MessagesGom_deva.php
new file mode 100644 (file)
index 0000000..b5cc343
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/** Goan Konkani - Devanagari script (गोवा कोंकणी)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Darshan kandolkar
+ */
+
+$fallback = 'hi';
+
+$namespaceNames = array(
+       NS_MEDIA            => 'मिडिया',
+       NS_SPECIAL          => 'विशेश',
+       NS_TALK             => 'चर्चा',
+       NS_USER             => 'उपेगकर्तो',
+       NS_USER_TALK        => 'उपेगकर्तो_चर्चा',
+       NS_PROJECT_TALK     => '$1_चर्चा',
+       NS_FILE             => 'फायल',
+       NS_FILE_TALK        => 'फायल_चर्चा',
+       NS_MEDIAWIKI        => 'मिडियाविकी',
+       NS_MEDIAWIKI_TALK   => 'मिडियाविकी_चर्चा',
+       NS_TEMPLATE         => 'प्रारूप',
+       NS_TEMPLATE_TALK    => 'प्रारूप_चर्चा',
+       NS_HELP             => 'मजत',
+       NS_HELP_TALK        => 'मजत_चर्चा',
+       NS_CATEGORY         => 'श्रेणी',
+       NS_CATEGORY_TALK    => 'श्रेणी_चर्चा',
+);
index afb3772..94a7a39 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Luri (لوری)
+/** Northern Luri (لۊری شومالی)
  *
  * To improve a translation please visit https://translatewiki.net
  *
@@ -15,139 +15,139 @@ $fallback = 'fa';
 $rtl = true;
 
 $namespaceNames = array(
-       NS_MEDIA            => 'رسانه',
-       NS_SPECIAL          => 'ویجه',
-       NS_TALK             => 'چک_چنه',
-       NS_USER             => 'کارور',
-       NS_USER_TALK        => 'چک_چنه_کارور',
-       NS_PROJECT_TALK     => 'چک_چنه_$1',
+       NS_MEDIA            => 'ڤارئسگأر',
+       NS_SPECIAL          => 'ڤیجە',
+       NS_TALK             => 'چأک_چئنە',
+       NS_USER             => 'کاریار',
+       NS_USER_TALK        => 'چأک_چئنە_کاریار',
+       NS_PROJECT_TALK     => 'چأک_چئنە_$1',
        NS_FILE             => 'جانیا',
-       NS_FILE_TALK        => 'چک_چنه_جانیا',
-       NS_MEDIAWIKI        => 'Ù\85دÛ\8cاÙ\88یکی',
-       NS_MEDIAWIKI_TALK   => 'چک_چنه_مدیاویکی',
-       NS_TEMPLATE         => 'چوئه',
-       NS_TEMPLATE_TALK    => 'چک_چنه_چوئه',
-       NS_HELP             => 'هومیاری',
-       NS_HELP_TALK        => 'چک_چنه_هومیاری',
-       NS_CATEGORY         => 'دسÙ\87',
-       NS_CATEGORY_TALK    => 'چک_چنه_دسه',
+       NS_FILE_TALK        => 'چأک_چئنە_جانیا',
+       NS_MEDIAWIKI        => 'Ù\85ئدÛ\8cاڤیکی',
+       NS_MEDIAWIKI_TALK   => 'چأک_چئنە_مئدیاڤیکی',
+       NS_TEMPLATE         => 'چوٙأ',
+       NS_TEMPLATE_TALK    => 'چأک_چئنە_چوأ',
+       NS_HELP             => 'ھومیاری',
+       NS_HELP_TALK        => 'چأک_چئنە_ھومیاری',
+       NS_CATEGORY         => 'دأسÛ\95',
+       NS_CATEGORY_TALK    => 'چأک_چئنە_دأسە',
 );
 
 $namespaceAliases = array(
-       'عسگ' => NS_FILE,
-       'چک_چنه_عسگ' => NS_FILE_TALK,
+       'Ø£سگ' => NS_FILE,
+       'چأک_چئنە_أسگ' => NS_FILE_TALK,
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'کارÛ\8cارÛ\8cا_Ú©Ù\86شتکار' ),
-       'Allmessages'               => array( 'همه_پیغومیا' ),
-       'AllMyUploads'              => array( 'همه_سوارکردیا_مه', 'همه_جانیایا_مه' ),
-       'Allpages'                  => array( 'همه_بلگه_یا' ),
-       'ApiHelp'                   => array( 'هومیاری_آ_پی_آی' ),
-       'Ancientpages'              => array( 'بلگه_یا_دماتری' ),
-       'Badtitle'                  => array( 'داسÙ\88Ù\86_Ú¯ن' ),
-       'Blankpage'                 => array( 'بلگه_حالی' ),
-       'Block'                     => array( 'نهاگری', 'نهاگری_آی_پی', 'نهاگری_کاریار' ),
-       'Booksources'               => array( 'نهاگری_سرچشمه_یا' ),
-       'BrokenRedirects'           => array( 'واگردونیا_بی_سرانجوم' ),
-       'Categories'                => array( 'دسÙ\87_یا' ),
-       'ChangeEmail'               => array( 'Ø¢Ù\84شت_دئÙ\86_اÛ\8cÙ\85یل' ),
-       'ChangePassword'            => array( 'Ø¢Ù\84شت_دئÙ\86_رازÛ\8cÙ\86Ù\87_Ú¯Ù\88اردن' ),
-       'ComparePages'              => array( 'تÛ\8c\8cÚ©_Ù\86Û\8cائÙ\86_بÙ\84Ú¯Ù\87_یا' ),
-       'Confirmemail'              => array( 'پشت_راس_کاری_ایمیل' ),
-       'Contributions'             => array( 'هومیاری_کردنیا' ),
-       'CreateAccount'             => array( 'راس_کردÙ\86_حساÙ\88' ),
-       'Deadendpages'              => array( 'بلگه_یا_بی_ویرگار' ),
-       'DeletedContributions'      => array( 'هومیاریا_پاکسا_بیه' ),
-       'Diff'                      => array( 'فرخ' ),
-       'DoubleRedirects'           => array( 'Ù\88اگردÙ\88Ù\86Û\8cا_دÙ\88_Ú©Ù\88Ù\86Ù\87' ),
-       'EditWatchlist'             => array( 'ویرایشت_سیل_برگ' ),
-       'Emailuser'                 => array( 'ایمیل_کاریار', 'ایمیل' ),
-       'ExpandTemplates'           => array( 'گپ_کلونکاری_چوئه_یا' ),
-       'Export'                    => array( 'وه_در_دئن' ),
-       'Fewestrevisions'           => array( 'کمتری_وانئریا' ),
-       'FileDuplicateSearch'       => array( 'پی_جوری_دو_کونه_جانیا' ),
-       'Filepath'                  => array( 'مسیر_جانیا' ),
-       'Import'                    => array( 'وا_مین_اوردن' ),
-       'Invalidateemail'           => array( 'بÛ\8c§Ø¹ØªÙ\88ار_کردÙ\86_اÛ\8cÙ\85یل' ),
-       'JavaScriptTest'            => array( 'ازÙ\85اشت_Ù\86Û\8cسسÙ\87\8cا_جاÙ\88ا' ),
-       'BlockList'                 => array( 'نهاگری_نومگه', 'نومگه_نهاگری', 'نومگه_نهاگری_آی_پی' ),
-       'LinkSearch'                => array( 'پی_جوری_هوم_پیوند' ),
-       'Listadmins'                => array( 'نومگه_سردیوونیاریا' ),
-       'Listbots'                  => array( 'نومگه_بوتیا' ),
-       'Listfiles'                 => array( 'نومگه_جانیایا', 'نومگه_جانیا', 'نومگه_عسگ' ),
-       'Listgrouprights'           => array( 'نومگه_حقوق_گرویی', 'حقوق_کاریاری_گرویی' ),
-       'Listredirects'             => array( 'نومگه_واگردونیا' ),
-       'ListDuplicatedFiles'       => array( 'نومگه_جانیایا_دو_کونه', 'نومگه_دو_کونه_بیین_جانیا' ),
-       'Listusers'                 => array( 'نومگه_کاریاریا', 'نومگه_کاریاری' ),
-       'Lockdb'                    => array( 'Ù\82Ù\84Ù\81_کردÙ\86_رسÛ\8cÙ\86Ù\87_جا' ),
-       'Log'                       => array( 'پهرستنومه', 'پهرستنومه_یا' ),
-       'Lonelypages'               => array( 'بلگه_یا_تکی', 'بلگه_یا_بی_حامین' ),
-       'Longpages'                 => array( 'بلگه_یا_فره_بلنگ' ),
-       'MediaStatistics'           => array( 'آماریا_وارسگر' ),
-       'MergeHistory'              => array( 'سرÛ\8cÚ©_سازÛ\8c\88یرگار' ),
-       'MIMEsearch'                => array( 'پی_چوری_ام_آی_ام_ای' ),
-       'Mostcategories'            => array( 'بÛ\8cشتر_دسÙ\87_یا' ),
-       'Mostimages'                => array( 'بÛ\8cشتر_جاÙ\86Û\8cاÛ\8cا_Ù\87Ù\88Ù\85_Ù¾Û\8cÙ\88Ù\86د_بÛ\8cÙ\87', 'بÛ\8cشتر_جاÙ\86Û\8cاÛ\8cا', 'بÛ\8cشتر_عسگیا' ),
-       'Mostinterwikis'            => array( 'بÛ\8cشتر_Ù\85Û\8cÙ\86\88یکی_یا' ),
-       'Mostlinked'                => array( 'بÛ\8cشتر_بÙ\84Ú¯Ù\87\8cا_Ù\87Ù\88Ù\85_Ù¾Û\8cÙ\88Ù\86د_بÛ\8cÙ\87', 'بÛ\8cشتر_Ù\87Ù\88Ù\85_Ù¾Û\8cÙ\88Ù\86د_بÛ\8cÙ\87_یا' ),
-       'Mostlinkedcategories'      => array( 'بÛ\8cشتر_دسÙ\87\8cا_Ù\87Ù\88Ù\85_Ù¾Û\8cÙ\88Ù\86د_بÛ\8cÙ\87', 'بÛ\8cشتر_دسÙ\87\8cا_Ù\88Ù\87_کار_گرتÙ\87_بÛ\8cÙ\87' ),
-       'Mostlinkedtemplates'       => array( 'بÛ\8cشتر_بÙ\84Ú¯Ù\87\81رÙ\87_پر_بÛ\8cÙ\87', 'بÛ\8cشتر_Ú\86Ù\88ئÙ\87\8cا_Ù\87Ù\88Ù\85_Ù¾Û\8cÙ\88Ù\86د_بÛ\8cÙ\87', 'بÛ\8cشتر_Ú\86Ù\88ئÙ\87\8cا_Ù\88Ù\87_کار_گرتÙ\87_بÛ\8cÙ\87' ),
-       'Mostrevisions'             => array( 'بÛ\8cشتر_Ù\88اÙ\86ئریا' ),
-       'Movepage'                  => array( 'جا_وه_جا_کردن_بلگه' ),
-       'Mycontributions'           => array( 'هومیاریا_مه' ),
-       'MyLanguage'                => array( 'زÙ\88Ù\86\85Ù\87' ),
-       'Mypage'                    => array( 'بلگه_مه' ),
-       'Mytalk'                    => array( 'چک_چنه_مه' ),
-       'Myuploads'                 => array( 'سوارکردیا_مه', 'جانیایا_مه' ),
-       'Newimages'                 => array( 'جانیایا_تازه', 'عسگیا_تازه' ),
-       'Newpages'                  => array( 'بلگه_یا_تازه' ),
-       'PagesWithProp'             => array( 'بلگه_یا_حامیندار' ),
-       'PageLanguage'              => array( 'بلگه_زون' ),
-       'PasswordReset'             => array( 'د_نو_زنه_کردن_رازینه_گواردن' ),
-       'PermanentLink'             => array( 'هوم_پیوند_دایمی' ),
-       'Popularpages'              => array( 'صÙ\81Ø­Ù\87â\80\8cÙ\87اÛ\8c\85حبÙ\88ب' ),
-       'Preferences'               => array( 'میزونکاریا' ),
-       'Prefixindex'               => array( 'پیشون_سیائه' ),
-       'Protectedpages'            => array( 'بلگه_یا_پر_و_پیم_بیه' ),
-       'Protectedtitles'           => array( 'داسÙ\88Ù\86ا_پر_Ù\88_Ù¾Û\8cÙ\85_بÛ\8cÙ\87' ),
-       'Randompage'                => array( 'شامسکی', 'بلگه_یا_شامسکی' ),
-       'RandomInCategory'          => array( 'دسÙ\87_شاÙ\85سکی' ),
-       'Randomredirect'            => array( 'واگردونی_شامسکی' ),
-       'Recentchanges'             => array( 'Ø¢Ù\84شتÛ\8cا_اÛ\8cسنی' ),
-       'Recentchangeslinked'       => array( 'Ø¢Ù\84شتÛ\8cا_Ù\87Ù\88Ù\85_Ù¾Û\8cÙ\88Ù\86د_بÛ\8cÙ\87_اÛ\8cسÙ\86Û\8c', 'Ø¢Ù\84شتÛ\8cا_Ù\85رتÙ\88ط' ),
-       'Redirect'                  => array( 'واگردونی' ),
-       'ResetTokens'               => array( 'د_نو_زنه_کردن_شناسیاریا' ),
-       'Revisiondelete'            => array( 'وانئری_پاکسا_کردن' ),
-       'RunJobs'                   => array( 'اÙ\86جÙ\88Ù\85_دئن_کاریا' ),
-       'Search'                    => array( 'پی_جوری' ),
-       'Shortpages'                => array( 'بلگه_یا_کوچک' ),
-       'Specialpages'              => array( 'بلگه_یا_ویجه' ),
+       'Activeusers'               => array( 'کارÛ\8cارÛ\8cا_Ú©Ù\88Ù\86ئشکتار' ),
+       'Allmessages'               => array( 'ھأمە_پیغومیا' ),
+       'AllMyUploads'              => array( 'ھأمە_جانیایا_مە', 'ھأمە_سوڤارکئردیا_مە' ),
+       'Allpages'                  => array( 'ھأمە_بألگە_یا' ),
+       'ApiHelp'                   => array( 'ھومیاری_ئی_پی_آی' ),
+       'Ancientpages'              => array( 'بألگە_یا_دئماتری' ),
+       'Badtitle'                  => array( 'داسÙ\88Ù\99Ù\86_گأن' ),
+       'Blankpage'                 => array( 'بألگە_ھالی' ),
+       'Block'                     => array( 'نئھاگئری', 'نئھاگئری_آی_پی', 'نئھاگئری_کاریار' ),
+       'Booksources'               => array( 'نئھاگری_سأرچئشمە_یا' ),
+       'BrokenRedirects'           => array( 'ڤاگأردوٙنیا_بی_سأرأنجوم' ),
+       'Categories'                => array( 'دأسÛ\95_یا' ),
+       'ChangeEmail'               => array( 'Ø¢Ù\84ئشت_دأئÙ\86_اÛ\8cÙ\85ئیل' ),
+       'ChangePassword'            => array( 'Ø¢Ù\84ئشت_دأئÙ\86_رازÛ\8cÙ\86Û\95_Ú¯Ù\88ڤاردئن' ),
+       'ComparePages'              => array( 'تÛ\95\8cØ£Ú©_Ù\86Û\8cائÙ\86_بأÙ\84Ú¯Û\95_یا' ),
+       'Confirmemail'              => array( 'پوشت_راس_کاری_ایمئیل' ),
+       'Contributions'             => array( 'ھومیاری_کاریا' ),
+       'CreateAccount'             => array( 'راس_کئردئÙ\86_حئسÛ\89' ),
+       'Deadendpages'              => array( 'بألگە_یا_بی_ڤیرگار' ),
+       'DeletedContributions'      => array( 'ھومیاریا_پاکسا_بییە' ),
+       'Diff'                      => array( 'Ù\81أرخ' ),
+       'DoubleRedirects'           => array( 'Ù\88اگأردÙ\88Ù\99Ù\86Û\8cا_دÙ\88Ù\99_Ú©Ù\88Ù\99Ù\86Û\95' ),
+       'EditWatchlist'             => array( 'ڤیرایئشت_سئیل_بأرگ' ),
+       'Emailuser'                 => array( 'ایمئیل_کاریار' ),
+       'ExpandTemplates'           => array( 'گأپ_کئلوٙنکاری_چوٙأ_یا' ),
+       'Export'                    => array( 'ڤە_دأر_دأئن' ),
+       'Fewestrevisions'           => array( 'کأمتئری_ڤانئیأریا' ),
+       'FileDuplicateSearch'       => array( 'پئی_جوٙری_دۊ_کوٙنە_جانیا' ),
+       'Filepath'                  => array( 'Ù\85أسÛ\8cر_جاÙ\86Û\8cا' ),
+       'Import'                    => array( 'ڤا_مین_آڤوردئن' ),
+       'Invalidateemail'           => array( 'بÛ\8c¦ØªØ¦Ú¤Ø§Ø±_کئردئÙ\86_اÛ\8cÙ\85ئیل' ),
+       'JavaScriptTest'            => array( 'ئزÙ\85اشت_Ù\86Û\8cسئسÛ\95\8cا_جاڤا' ),
+       'BlockList'                 => array( 'نئھاگئری_نومگە', 'نومگە_نئھاگئری', 'نومگە_نئھاگئری_آی_پی' ),
+       'LinkSearch'                => array( 'پئی_جوٙری_ھوم_پئیڤأند' ),
+       'Listadmins'                => array( 'نومگە_سأردیوڤوٙنیاریا' ),
+       'Listbots'                  => array( 'نومگە_بوٙتیا' ),
+       'Listfiles'                 => array( 'نومگە_جانیایا', 'نومگە_جانیا', 'نومگە_أسگ' ),
+       'Listgrouprights'           => array( 'حقوق_کاریاری_جأرغە_یی', 'نومگە_حقوق_جأرغە_یی' ),
+       'Listredirects'             => array( 'نومگە_ڤاگأردوٙنیا' ),
+       'ListDuplicatedFiles'       => array( 'نومگە_جانیایا_دۊ_کوٙنە', 'نومگە_دۊ_کوٙنە_بییئن_جانیا' ),
+       'Listusers'                 => array( 'نومگە_کاریاریا', 'نومگە_کاریاری' ),
+       'Lockdb'                    => array( 'Ù\82Ù\88Ù\84Ù\81_کئردئÙ\86_رئسÛ\8cÙ\86Û\95_جا' ),
+       'Log'                       => array( 'پئھرستنوٙمە', 'پئھرستنوٙمە_یا' ),
+       'Lonelypages'               => array( 'بألگە_یا_تأکی', 'بألگە_یا_بی_حامین' ),
+       'Longpages'                 => array( 'بألگە_یا_فئرە_بئلئنگ' ),
+       'MediaStatistics'           => array( 'آماریا_ڤارئسگأر' ),
+       'MergeHistory'              => array( 'سأرÛ\8cØ£Ú©_سازÛ\8c_Ú¤یرگار' ),
+       'MIMEsearch'                => array( 'پئی_جوٙری_ئم_آی_ئم_ئی' ),
+       'Mostcategories'            => array( 'بÛ\8cشتئر_دأسÛ\95_یا' ),
+       'Mostimages'                => array( 'بÛ\8cشتئر_جاÙ\86Û\8cاÛ\8cا_Ú¾Ù\88Ù\85_پئÛ\8cڤأÙ\86د_بÛ\8cÛ\95', 'بÛ\8cشتئر_جاÙ\86Û\8cاÛ\8cا', 'بÛ\8cشتئر_Ø£سگیا' ),
+       'Mostinterwikis'            => array( 'بÛ\8cشتئر_Ù\85Û\8cÙ\86_Ú¤یکی_یا' ),
+       'Mostlinked'                => array( 'بÛ\8cشتئر_بأÙ\84Ú¯Û\95\8cا_Ú¾Ù\88Ù\85_پئÛ\8cڤأÙ\86د_بÛ\8cÛ\95', 'بÛ\8cشتئر_Ú¾Ù\88Ù\85_پئÛ\8cڤأÙ\86د_بÛ\8cÛ\95_یا' ),
+       'Mostlinkedcategories'      => array( 'بÛ\8cشتئر_دأسÛ\95\8cا_Ú¾Ù\88Ù\85_پئÛ\8cڤأÙ\86د_بÛ\8cÛ\95', 'بÛ\8cشتئر_دأسÛ\95\8cا_Ú¤Û\95_کار_گئرتÛ\95_بÛ\8cÛ\95' ),
+       'Mostlinkedtemplates'       => array( 'بÛ\8cشتئر_بأÙ\84Ú¯Û\95\81ئرÛ\95_Ù¾Ù\88ر_بÛ\8cÛ\95', 'بÛ\8cشتئر_Ú\86Ù\88Ù\99Ø£_Û\8cا_Ú¾Ù\88Ù\85_پئÛ\8cڤأÙ\86د_بÛ\8cÛ\95', 'بÛ\8cشتئر_Ú\86Ù\88Ù\99Ø£_Û\8cا_Ú¤Û\95_کار_گئرئتÛ\95_بÛ\8cÛ\95' ),
+       'Mostrevisions'             => array( 'بÛ\8cشتئر_ڤاÙ\86ئÛ\8cØ£ریا' ),
+       'Movepage'                  => array( 'جا_ڤە_جا_کئردئن_بألگە' ),
+       'Mycontributions'           => array( 'ھومیاریا_مە' ),
+       'MyLanguage'                => array( 'زÙ\88Ù\99Ù\86\85Û\95' ),
+       'Mypage'                    => array( 'بألگە_مە' ),
+       'Mytalk'                    => array( 'چأک_چئنە_مە' ),
+       'Myuploads'                 => array( 'سوڤارکئردیا_مە', 'جانیایا_مە' ),
+       'Newimages'                 => array( 'جانیایا_تازە', 'أسگیا_تازە' ),
+       'Newpages'                  => array( 'بألگە_یا_تازە' ),
+       'PagesWithProp'             => array( 'بألگە_یا_حامیندار' ),
+       'PageLanguage'              => array( 'بألگە_زوٙن' ),
+       'PasswordReset'             => array( 'د_نۊ_زئنە_کئردئن_رازینە_گوڤاردئن' ),
+       'PermanentLink'             => array( 'ھوم_پئیڤأند_دایئمی' ),
+       'Popularpages'              => array( 'بأÙ\84Ú¯Û\95\8cا_حاستئÙ\86Û\8c' ),
+       'Preferences'               => array( 'Ù\85Û\8cزÙ\88Ù\99Ù\86کارÛ\8cا' ),
+       'Prefixindex'               => array( 'دئماڤأن_سیاأ' ),
+       'Protectedpages'            => array( 'بألگە_یا_پور_و_پیم_بیە' ),
+       'Protectedtitles'           => array( 'داسÙ\88Ù\99Ù\86ا_Ù¾Ù\88ر_Ù\88_Ù¾Û\8cÙ\85_بÛ\8cÛ\95' ),
+       'Randompage'                => array( 'شامسأکی', 'بألگە_یا_شامسأکی' ),
+       'RandomInCategory'          => array( 'دأسÛ\95_شاÙ\85سأکی' ),
+       'Randomredirect'            => array( 'ڤاگأردوٙنی_شامسأکی' ),
+       'Recentchanges'             => array( 'Ø¢Ù\84ئشتÛ\8cا_ئÛ\8cسئنی' ),
+       'Recentchangeslinked'       => array( 'Ø¢Ù\84ئشتÛ\8cا_Ú¾Ù\88Ù\85_پئÛ\8cڤأÙ\86د_بÛ\8cÛ\95_ئÛ\8cسئÙ\86Û\8c', 'Ø¢Ù\84ئشتÛ\8cا_Ù\85Ù\88رتأڤئط' ),
+       'Redirect'                  => array( 'ڤاگأردۊنی' ),
+       'ResetTokens'               => array( 'د_نۊ_زئنە_کئردئن_شئناسیاریا' ),
+       'Revisiondelete'            => array( 'ڤانئیأری_پاکسا_کئردئن' ),
+       'RunJobs'                   => array( 'Ø£Ù\86جÙ\88Ù\85_دأئن_کاریا' ),
+       'Search'                    => array( 'پئی_جوٙری' ),
+       'Shortpages'                => array( 'بألگە_یا_کوچئک' ),
+       'Specialpages'              => array( 'بألگە_یا_ڤیجھە' ),
        'Statistics'                => array( 'آماریا' ),
-       'Tags'                      => array( 'سردیسیا' ),
-       'TrackingCategories'        => array( 'دماگری_دسه_یا' ),
-       'Unblock'                   => array( 'وا_کردن_قلف' ),
-       'Uncategorizedcategories'   => array( 'دسÙ\87\8cا_دسÙ\87_بÙ\86Û\8c\86بÛ\8cÙ\87' ),
-       'Uncategorizedimages'       => array( 'جاÙ\86Û\8cا_دسÙ\87_بÙ\86Û\8c\86بÛ\8cÙ\87', 'عسگÛ\8cا_دسÙ\87_بÙ\86Û\8c\86بÛ\8cÙ\87' ),
-       'Uncategorizedpages'        => array( 'بلگه_یا_دسه_بنی_نبیه' ),
-       'Uncategorizedtemplates'    => array( 'چوئه_یا_دسه_بنی_نبیه' ),
-       'Undelete'                  => array( 'پاکسا_نکردن' ),
-       'Unlockdb'                  => array( 'وا_کردن_قلف_رسینه_جا' ),
-       'Unusedcategories'          => array( 'دسÙ\87\8cا_Ù\88Ù\87_کار_گرتÙ\87\86بÛ\8cÙ\87' ),
-       'Unusedimages'              => array( 'جانیایا_وه_کار_گرته_نبیه', 'عسگیا_وه_کار_گرته_نبیه' ),
-       'Unusedtemplates'           => array( 'چوئه_یا_وه_کار_گرته_نبیه' ),
-       'Unwatchedpages'            => array( 'بلگه_یا_سیل_نکرده' ),
-       'Upload'                    => array( 'سوارکرد' ),
-       'UploadStash'               => array( 'اÙ\85اÛ\8cÛ\8cÙ\87_جا_سÙ\88ارکرد' ),
-       'Userlogin'                 => array( 'وامین_اومائن_کاریار', 'وامین_اومائن' ),
-       'Userlogout'                => array( 'وه_در_اومائن_کاریار', 'وه_در_اومائن' ),
-       'Userrights'                => array( 'Ø­Ù\82Ù\88Ù\82_کارÛ\8cار', 'سردÛ\8cÙ\88Ù\88Ù\86کار_بÛ\8cÛ\8cÙ\86', 'بÙ\88ت_بÛ\8cÛ\8cن' ),
-       'Version'                   => array( 'نسفه' ),
-       'Wantedcategories'          => array( 'دسÙ\87\8cا_حاستنی' ),
-       'Wantedfiles'               => array( 'جانیایا_حاستنی' ),
-       'Wantedpages'               => array( 'بلگه_یا_حاستنی', 'هوم_پیوندیا_د_بین_رئته' ),
-       'Wantedtemplates'           => array( 'Ú\86Ù\88ئÙ\87\8cا_حاستنی' ),
-       'Watchlist'                 => array( 'سیل_برگ' ),
-       'Whatlinkshere'             => array( 'چه_هوم_پیوندیایی_ها_ایچه' ),
-       'Withoutinterwiki'          => array( 'بی_مین_ویکی' ),
+       'Tags'                      => array( 'سأردÛ\8cسÛ\8cا' ),
+       'TrackingCategories'        => array( 'دئماگئری_دأسە_یا' ),
+       'Unblock'                   => array( 'ڤا_کئردئن_قولف' ),
+       'Uncategorizedcategories'   => array( 'دأسÛ\95\8cا_دأسÛ\95_بأÙ\86Û\8c\86أبÛ\8cÛ\95' ),
+       'Uncategorizedimages'       => array( 'جاÙ\86Û\8cا_دأسÛ\95_بأÙ\86Û\8c\86أبÛ\8cÛ\95', 'أسگÛ\8cا_دأسÛ\95_بأÙ\86Û\8c\86أبÛ\8cÛ\95' ),
+       'Uncategorizedpages'        => array( 'بألگە_یا_دأسە_بأنی_نأبیە' ),
+       'Uncategorizedtemplates'    => array( 'چوٙأ_یا_دأسە_بأنی_نأبیە' ),
+       'Undelete'                  => array( 'پاکسا_نأکثردئن' ),
+       'Unlockdb'                  => array( 'ڤا_کئردئن_قولف_رئسینە_جا' ),
+       'Unusedcategories'          => array( 'دأسÛ\95\8cا_Ú¤Û\95_کار_گئرئتÛ\95\86أبÛ\8cÛ\95' ),
+       'Unusedimages'              => array( 'جانیایا_ڤە_کار_گئرئتە_نأبیە', 'أسگیا_ڤە_کار_گئرئتە_نأبیە' ),
+       'Unusedtemplates'           => array( 'چوٙأ_یا_ڤە_کار_گئرئتە_نأبیە' ),
+       'Unwatchedpages'            => array( 'بألگە_یا_سئیل_نأکئردە' ),
+       'Upload'                    => array( 'سوڤارکئرد' ),
+       'UploadStash'               => array( 'ئÙ\85اÛ\8cÛ\95_جا_سÙ\88ڤارکئرد' ),
+       'Userlogin'                 => array( 'ڤامین_ئومائن_کاریار', 'ڤامین_ئومائن' ),
+       'Userlogout'                => array( 'ڤە_دأر_ئومائن_کاریار', 'ڤە_دأر_ئومائن' ),
+       'Userrights'                => array( 'Ø­Ù\82Ù\88Ù\82_کارÛ\8cار', 'سأردÛ\8cÚ¤Ù\88Ù\99Ù\86کار_بÛ\8cÛ\8cئÙ\86', 'بÙ\88Ù\99ت_بÛ\8cÛ\8cئن' ),
+       'Version'                   => array( 'نوسقە' ),
+       'Wantedcategories'          => array( 'دأسÛ\95\8cا_حاستئنی' ),
+       'Wantedfiles'               => array( 'جانیایا_حاستئنی' ),
+       'Wantedpages'               => array( 'بألگە_یا_حاستئنی', 'ھوم_پئیڤأندیا_د_بئین_رأتە' ),
+       'Wantedtemplates'           => array( 'Ú\86Ù\88Ø£_Û\8cا_حاستئنی' ),
+       'Watchlist'                 => array( 'سئیل_بأرگ' ),
+       'Whatlinkshere'             => array( 'چە_ھوم_پئیڤأندیایی_ھان_ئیچە' ),
+       'Withoutinterwiki'          => array( 'بی_مین_ڤیکی' ),
 );
index 0ca2a49..b0a4ca7 100644 (file)
@@ -48,8 +48,6 @@ $datePreferences = array(
 
 $defaultDateFormat = 'pnt';
 
-
-
 $dateFormats = array(
        'pnt time' => 'H:i',
        'pnt date' => 'j xg Y',
index e231807..22f62fe 100644 (file)
--- a/load.php
+++ b/load.php
@@ -22,6 +22,8 @@
  * @author Trevor Parscal
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 // Bail on old versions of PHP, or if composer has not been run yet to install
 // dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
 require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php';
@@ -38,7 +40,10 @@ if ( !$wgRequest->checkUrlExtension() ) {
 // Respond to resource loading request.
 // foo()->bar() syntax is not supported in PHP4, and this file needs to *parse* in PHP4.
 $configFactory = ConfigFactory::getDefaultInstance();
-$resourceLoader = new ResourceLoader( $configFactory->makeConfig( 'main' ) );
+$resourceLoader = new ResourceLoader(
+       $configFactory->makeConfig( 'main' ),
+       LoggerFactory::getInstance( 'resourceloader' )
+);
 $resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
 
 Profiler::instance()->setTemplated( true );
index e4ac467..04aa3a5 100644 (file)
@@ -957,10 +957,9 @@ abstract class Maintenance {
 
                $wgShowSQLErrors = true;
 
-               // @codingStandardsIgnoreStart Allow error suppression. wfSuppressWarnings()
-               // is not available.
-               @set_time_limit( 0 );
-               // @codingStandardsIgnoreStart
+               MediaWiki\suppressWarnings();
+               set_time_limit( 0 );
+               MediaWiki\restoreWarnings();
 
                $this->adjustMemoryLimit();
        }
index 222c538..6e1ddb4 100644 (file)
@@ -135,9 +135,9 @@ class BackupDumper {
                foreach ( $args as $arg ) {
                        $matches = array();
                        if ( preg_match( '/^--(.+?)(?:=(.+?)(?::(.+?))?)?$/', $arg, $matches ) ) {
-                               wfSuppressWarnings();
+                               MediaWiki\suppressWarnings();
                                list( /* $full */, $opt, $val, $param ) = $matches;
-                               wfRestoreWarnings();
+                               MediaWiki\restoreWarnings();
 
                                switch ( $opt ) {
                                        case "plugin":
index d83f1fc..27be5fd 100644 (file)
@@ -659,13 +659,13 @@ class TextPassDumper extends BackupDumper {
        }
 
        private function getTextSpawned( $id ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                if ( !$this->spawnProc ) {
                        // First time?
                        $this->openSpawn();
                }
                $text = $this->getTextSpawnedOnce( $id );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                return $text;
        }
@@ -712,7 +712,7 @@ class TextPassDumper extends BackupDumper {
        }
 
        private function closeSpawn() {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                if ( $this->spawnRead ) {
                        fclose( $this->spawnRead );
                }
@@ -729,7 +729,7 @@ class TextPassDumper extends BackupDumper {
                        pclose( $this->spawnProc );
                }
                $this->spawnProc = false;
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
        }
 
        private function getTextSpawnedOnce( $id ) {
index 0b77578..4772071 100644 (file)
@@ -60,4 +60,4 @@ class CheckComposerLockUpToDate extends Maintenance {
 }
 
 $maintClass = 'CheckComposerLockUpToDate';
-require_once RUN_MAINTENANCE_IF_MAIN;
\ No newline at end of file
+require_once RUN_MAINTENANCE_IF_MAIN;
index d1c2edd..30a23d3 100644 (file)
@@ -121,9 +121,9 @@ class CheckSyntax extends Maintenance {
                        return; // process only this path
                } elseif ( $this->hasOption( 'list-file' ) ) {
                        $file = $this->getOption( 'list-file' );
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $f = fopen( $file, 'r' );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( !$f ) {
                                $this->error( "Can't open file $file\n", true );
                        }
index 8adae2d..3e86d8a 100644 (file)
@@ -31,7 +31,7 @@ class ConvertExtensionToRegistration extends Maintenance {
         * @var array
         */
        protected $noLongerSupportedGlobals = array(
-               'SpecialPageGroups' => 'deprecated',
+               'SpecialPageGroups' => 'deprecated', // Deprecated 1.21, removed in 1.26
        );
 
        /**
@@ -56,7 +56,8 @@ class ConvertExtensionToRegistration extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = 'Converts extension entry points to the new JSON registration format';
-               $this->addArg( 'path', 'Location to the PHP entry point you wish to convert', /* $required = */ true );
+               $this->addArg( 'path', 'Location to the PHP entry point you wish to convert',
+                       /* $required = */ true );
                $this->addOption( 'skin', 'Whether to write to skin.json', false, false );
        }
 
@@ -95,7 +96,8 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
 
                        if ( isset( $this->custom[$realName] ) ) {
-                               call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value, $vars ) );
+                               call_user_func_array( array( $this, $this->custom[$realName] ),
+                                       array( $realName, $value, $vars ) );
                        } elseif ( in_array( $realName, $globalSettings ) ) {
                                $this->json[$realName] = $value;
                        } elseif ( array_key_exists( $realName, $this->noLongerSupportedGlobals ) ) {
@@ -133,7 +135,9 @@ class ConvertExtensionToRegistration extends Maintenance {
        protected function handleExtensionFunctions( $realName, $value ) {
                foreach ( $value as $func ) {
                        if ( $func instanceof Closure ) {
-                               $this->error( "Error: Closures cannot be converted to JSON. Please move your extension function somewhere else.", 1 );
+                               $this->error( "Error: Closures cannot be converted to JSON. " .
+                                       "Please move your extension function somewhere else.", 1
+                               );
                        }
                }
 
@@ -182,7 +186,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                $this->json[$realName] = $out;
        }
 
-       protected function handleCredits( $realName, $value) {
+       protected function handleCredits( $realName, $value ) {
                $keys = array_keys( $value );
                $this->json['type'] = $keys[0];
                $values = array_values( $value );
@@ -197,7 +201,9 @@ class ConvertExtensionToRegistration extends Maintenance {
                foreach ( $value as $hookName => $handlers ) {
                        foreach ( $handlers as $func ) {
                                if ( $func instanceof Closure ) {
-                                       $this->error( "Error: Closures cannot be converted to JSON. Please move the handler for $hookName somewhere else.", 1 );
+                                       $this->error( "Error: Closures cannot be converted to JSON. " .
+                                               "Please move the handler for $hookName somewhere else.", 1
+                                       );
                                }
                        }
                }
@@ -229,7 +235,6 @@ class ConvertExtensionToRegistration extends Maintenance {
                                }
                        }
 
-
                        $this->json[$realName][$name] = $data;
                }
                if ( $defaults ) {
index 9ed63c3..b39ff55 100644 (file)
@@ -226,8 +226,8 @@ class CopyFileBackend extends Maintenance {
                        }
                        $t_start = microtime( true );
                        $fsFiles = $src->getLocalReferenceMulti( array( 'srcs' => $srcPaths, 'latest' => 1 ) );
-                       $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
-                       $this->output( "\n\tDownloaded these file(s) [{$ellapsed_ms}ms]:\n\t" .
+                       $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
+                       $this->output( "\n\tDownloaded these file(s) [{$elapsed_ms}ms]:\n\t" .
                                implode( "\n\t", $srcPaths ) . "\n\n" );
                }
 
@@ -281,12 +281,12 @@ class CopyFileBackend extends Maintenance {
                        sleep( 10 ); // wait and retry copy again
                        $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
                }
-               $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
+               $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( !$status->isOK() ) {
                        $this->error( print_r( $status->getErrorsArray(), true ) );
                        $this->error( "$wikiId: Could not copy file batch.", 1 ); // die
                } elseif ( count( $copiedRel ) ) {
-                       $this->output( "\n\tCopied these file(s) [{$ellapsed_ms}ms]:\n\t" .
+                       $this->output( "\n\tCopied these file(s) [{$elapsed_ms}ms]:\n\t" .
                                implode( "\n\t", $copiedRel ) . "\n\n" );
                }
        }
@@ -318,12 +318,12 @@ class CopyFileBackend extends Maintenance {
                        sleep( 10 ); // wait and retry copy again
                        $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
                }
-               $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
+               $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( !$status->isOK() ) {
                        $this->error( print_r( $status->getErrorsArray(), true ) );
                        $this->error( "$wikiId: Could not delete file batch.", 1 ); // die
                } elseif ( count( $deletedRel ) ) {
-                       $this->output( "\n\tDeleted these file(s) [{$ellapsed_ms}ms]:\n\t" .
+                       $this->output( "\n\tDeleted these file(s) [{$elapsed_ms}ms]:\n\t" .
                                implode( "\n\t", $deletedRel ) . "\n\n" );
                }
        }
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 dd27c8c..f19c64f 100644 (file)
@@ -1434,6 +1434,7 @@ excludepage
 excludeuser
 executables
 exempt
+exiftool
 existingwiki
 exists
 exiv
@@ -3158,7 +3159,6 @@ pnmtopng
 pointsize
 poolcounter
 popts
-popularpages
 portlet
 portlets
 posplus
index 1c71dc0..145c924 100644 (file)
@@ -17,7 +17,9 @@ class ExportSites extends Maintenance {
        public function __construct() {
                $this->mDescription = 'Exports site definitions the sites table to XML file';
 
-               $this->addArg( 'file', 'A file to write the XML to (see docs/sitelist.txt). Use "php://stdout" to write to stdout.', true );
+               $this->addArg( 'file', 'A file to write the XML to (see docs/sitelist.txt). ' .
+                       'Use "php://stdout" to write to stdout.', true
+               );
 
                parent::__construct();
        }
@@ -34,7 +36,7 @@ class ExportSites extends Maintenance {
 
                $handle = fopen( $file, 'w' );
 
-               if ( !$handle )  {
+               if ( !$handle ) {
                        $this->error( "Failed to open $file for writing.\n", 1 );
                }
 
@@ -51,4 +53,4 @@ class ExportSites extends Maintenance {
 }
 
 $maintClass = 'ExportSites';
-require_once( RUN_MAINTENANCE_IF_MAIN );
+require_once RUN_MAINTENANCE_IF_MAIN;
index ae70441..ad385e5 100644 (file)
@@ -88,23 +88,23 @@ if ( isset( $options['check-userblock'] ) ) {
 }
 
 # Get --from
-wfSuppressWarnings();
+MediaWiki\suppressWarnings();
 $from = $options['from'];
-wfRestoreWarnings();
+MediaWiki\restoreWarnings();
 
 # Get sleep time.
-wfSuppressWarnings();
+MediaWiki\suppressWarnings();
 $sleep = $options['sleep'];
-wfRestoreWarnings();
+MediaWiki\restoreWarnings();
 
 if ( $sleep ) {
        $sleep = (int)$sleep;
 }
 
 # Get limit number
-wfSuppressWarnings();
+MediaWiki\suppressWarnings();
 $limit = $options['limit'];
-wfRestoreWarnings();
+MediaWiki\restoreWarnings();
 
 if ( $limit ) {
        $limit = (int)$limit;
index 7abb8d7..7cd2000 100644 (file)
@@ -17,7 +17,9 @@ class ImportSites extends Maintenance {
        public function __construct() {
                $this->mDescription = 'Imports site definitions from XML into the sites table.';
 
-               $this->addArg( 'file', 'An XML file containing site definitions (see docs/sitelist.txt). Use "php://stdin" to read from stdin.', true );
+               $this->addArg( 'file', 'An XML file containing site definitions (see docs/sitelist.txt). ' .
+                       'Use "php://stdin" to read from stdin.', true
+               );
 
                parent::__construct();
        }
@@ -49,4 +51,4 @@ class ImportSites extends Maintenance {
 }
 
 $maintClass = 'ImportSites';
-require_once( RUN_MAINTENANCE_IF_MAIN );
+require_once RUN_MAINTENANCE_IF_MAIN;
index b948b67..0037ea8 100644 (file)
@@ -104,9 +104,9 @@ class CommandLineInstaller extends Maintenance {
                                $this->error( 'WARNING: You have provided the options "dbpass" and "dbpassfile". '
                                        . 'The content of "dbpassfile" overrides "dbpass".' );
                        }
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $dbpass = file_get_contents( $dbpassfile ); // returns false on failure
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $dbpass === false ) {
                                $this->error( "Couldn't open $dbpassfile", true );
                        }
@@ -119,9 +119,9 @@ class CommandLineInstaller extends Maintenance {
                                $this->error( 'WARNING: You have provided the options "pass" and "passfile". '
                                        . 'The content of "passfile" overrides "pass".' );
                        }
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $pass = file_get_contents( $passfile ); // returns false on failure
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $pass === false ) {
                                $this->error( "Couldn't open $passfile", true );
                        }
index 6fa27ef..96c05a1 100644 (file)
@@ -22,8 +22,8 @@
                                "name": "General",
                                "classes": [
                                        "mw.Title",
-                                       "mw.MalformedTitleException",
                                        "mw.Uri",
+                                       "mw.RegExp",
                                        "mw.messagePoster.*",
                                        "mw.notification",
                                        "mw.Notification_",
index 3f0a9ba..fddfc02 100644 (file)
@@ -47,9 +47,9 @@ class JSParseHelper extends Maintenance {
 
                $parser = new JSParser();
                foreach ( $files as $filename ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $js = file_get_contents( $filename );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $js === false ) {
                                $this->output( "$filename ERROR: could not read file\n" );
                                $this->errs++;
index 257fe14..534a8b4 100644 (file)
@@ -26,9 +26,9 @@
 /** A general output object. Need to be overridden */
 class StatsOutput {
        function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $return = sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                return $return;
        }
@@ -92,9 +92,9 @@ class WikiStatsOutput extends StatsOutput {
        }
 
        function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $v = round( 255 * $subset / $total );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $revert ) {
                        # Weigh reverse with factor 20 so coloring takes effect more quickly as
index ac50d29..d029bf7 100644 (file)
@@ -25,7 +25,7 @@ require_once __DIR__ . '/../Maintenance.php';
 
 /**
  * Generates the normalizer data file for Arabic.
- * For NFC see includes/libs/normal.
+ * For NFC see includes/compat/normal.
  *
  * @ingroup MaintenanceLanguage
  */
index 8580187..770a98c 100644 (file)
@@ -25,7 +25,7 @@ require_once __DIR__ . '/../Maintenance.php';
 
 /**
  * Generates the normalizer data file for Malayalam.
- * For NFC see includes/libs/normal.
+ * For NFC see includes/compat/normal.
  *
  * @ingroup MaintenanceLanguage
  */
index 5307cb4..3477c0a 100644 (file)
@@ -38,7 +38,6 @@
 乾岗
 乾巛
 乾州
-乾式
 乾录
 乾律
 乾德
 乾贵士
 承乾
 乾生元
+蔡孝乾
 於乎
 於戏
 魏徵
index 6ca3017..a3ea91c 100644 (file)
@@ -58,7 +58,9 @@
 堂姊 堂姐
 學姊 学姐
 乾姊 干姐
+清澈 清澈 #分詞用
 澈底 彻底
+仲介 中介
 卯足 铆足
 逕庭 径庭
 逕到 径到
 象徵著名   象征著名
 固著 固着
 班固著      班固著
+分布著      分布着
+分佈著      分布着
+散布著      散布着
+散佈著      散布着
 三十六著   三十六着
 走為上著   走为上着
 記憶體      内存
 優先順序   优先级
 攜帶型      便携式
 資訊理論   信息论
+資訊時代   信息时代
 迴圈 循环
 解析度      分辨率
 伺服器      服务器
@@ -2657,6 +2664,8 @@ A型肝炎        甲型肝炎
 電腦程式   计算机程序
 應用程式   应用程序
 雷射 激光
+鱼雷 鱼雷 #分詞用
+魚雷 鱼雷
 尖峰時間   高峰时间
 尖峰時段   高峰时段
 咖哩 咖喱
@@ -2716,10 +2725,14 @@ A型肝炎      甲型肝炎
 私隱 隐私
 格林美獎   格莱美奖
 葛萊美獎   格莱美奖
-史丹福      斯坦福
+史丹福大學        斯坦福大学
 賈伯斯      乔布斯
 波里活      宝莱坞
 庫德族      库尔德族
 庫德人      库尔德人
 希拉蕊      希拉里
 希拉莉      希拉里
+麻薩諸塞   马萨诸塞
+東南亞國家協會  东南亚国家联盟
+獨立國協   独联体
+獨立國家國協     独立国家联合体
index 9ce4ab0..f6a277b 100644 (file)
 鸡蛋里挑骨头     雞蛋裏挑骨頭
 雪里 雪裏
 雾里 霧裏
+云里雾里   雲裏霧裏
 鞋里 鞋裏
 鞭辟入里   鞭辟入裏
 头里 頭裏
 固著 固着
 班固著      班固著
 面包著      面包着
+分布著      分佈着
+分佈著      分佈着
+散布著      散佈着
+散佈著      散佈着
 三十六著   三十六着
 走為上著   走為上着
 鬧著 鬧着
@@ -2953,6 +2958,7 @@ IP地址  IP位址
 屏幕 螢幕
 荧屏 螢屏
 版权信息   版權資訊
+信息时代   資訊時代
 蹦床 彈床
 擊劍 劍擊
 击剑 劍擊
@@ -3000,6 +3006,7 @@ IP地址  IP位址
 正體中文   繁體中文
 板球 木球
 籃板球      籃板球
+篮板球      籃板球
 智慧財產權        知識產權
 智財權      知識產權
 首席执行官        行政總裁
@@ -3061,9 +3068,12 @@ IP地址 IP位址
 硅藻 硅藻
 格莱美奖   格林美獎
 葛萊美獎   格林美獎
-斯坦福      史丹福
+斯坦福大学        史丹福大學
 賈伯斯      喬布斯
 宝莱坞      波里活
 寶萊塢      波里活
 庫德族      库爾德族
 庫德人      库爾德人
+東南亞國家協會  東南亞國家聯盟
+獨立國協   獨聯體
+獨立國家國協     獨立國家聯合體
index 3c537de..61ffc4d 100644 (file)
 冲着 衝著
 干着 幹著
 干着急      干著急
+对着干      對著幹
 斗着 鬥著
 面包着      面包著
 徵狀 症狀
 鼠标 滑鼠
 进制 進位
 信息论      資訊理論
+信息时代   資訊時代
 写保护      防寫
 分辨率      解析度
 服务器      伺服器
 斯皮尔伯格        史匹柏
 斯特劳斯   史特勞斯
 斯大林      史達林
-斯坦福      史丹福
+斯坦福大学        史丹福大學
 撒切尔      柴契爾
 戴卓爾      柴契爾
 摩根士丹利        摩根史坦利
@@ -622,8 +624,11 @@ IP地址   IP位址
 宇航员      太空人
 太空飛行員        太空人
 独联体      獨立國協
+獨聯體      獨立國協
 独立国家联合体  獨立國家國協
-东南亚国家联盟  東南亞國協
+獨立國家聯合體  獨立國家國協
+东南亚国家联盟  東南亞國家協會
+東南亞國家聯盟  東南亞國家協會
 发达国家   已開發國家
 哥特式      哥德式
 落車 下車
index 5a0c6c3..c479f35 100644 (file)
@@ -650,6 +650,7 @@ U+091E6釦|U+06263扣|
 U+091EC釬|U+0710A焊|
 U+09205鈅|U+094A5钥|
 U+0920E鈎|U+094A9钩|
+U+09244鉄|U+094C1铁|
 U+09246鉆|U+094BB钻|
 U+09262鉢|U+094B5钵|
 U+092B2銲|U+0710A焊|
index e654b42..bc4bff8 100644 (file)
 乾村沙
 乾暖
 乾料
-乾敲梆子不賣油
 乾支支
 乾支剌
 乾擦
 幹人
 乾產
 乾喬
-夯幹
 大目乾連
 國之楨榦
 唇乾
 顛乾倒坤
 強幹
 乾眼
-幹的停當
 井幹
 乾巴
 偎乾
 吾爲之範我馳驅
 天地為範
 範數
+範亭
 丰采
 丰標不凡
 丰神
 臧穀亡羊
 種穀
 颳雪
-刮風下雪倒便宜
 广部
-亂鬨不過來
+亂鬨
 斗鬨
-亂鬨
 開鬨
 花鬨
 鬨動
 印纍綬若
 灕湘
 灕然
¾¤æ»²ç\81\95è\80\8cä¸\8bé\99\8d
»²ç\81\95
 裏勾外連
 水里溪
 二里頭
 擀麵
 過水麵
 蕎麥麵
-巧婦做不得無麵餺飥
 削麵
 小米麵
 壯麵
 一碗麵
 吃碗麵
 吃麵
+麵點師
+麵點、
+、麵點
+麵製品
 冷面相
 糞穢衊面
 僕僕
 鬆元音
 鬆喉
 鬆化
+很鬆
 囉囉囌囌
 囉囌
 骨罈
 幹事
 幹什麼
 幹細胞
-配水幹管
 口燥唇乾
 舌乾唇焦
 不食乾腊
 乾物
 乾食
 乾鍋
+自乾五
+不乾膠
 楨幹
 新幹縣
 誰幹的
+他幹的
+們幹的
+人幹的
+幹的事
+幹的好事
 得力幹將
 黑幹將
 的幹將
+幹大事
+對着幹
 李連杰
 周杰
 杰倫
 於九
 於十
 於半
+於1天 #分詞用
+於2天
+於3天
+於4天
+於5天
+於6天
+於7天
+於8天
+於9天
+於一天
+於二天
+於三天
+於四天
+於五天
+於六天
+於七天
+於八天
+於九天
+於十天
 於夫羅
 於梨華
 置於
 鬥獸
 鬥龍
 鬥勇
+鬥狗
+鬥蛐
+鬥垮
+鬥敗
 石樑
 木樑
 藏歷史
 母醜
 一齣子
 齣兒
-獃串了皮
-占便宜的是獃
 丰標
 丰姿
 丰韻
 電梯裡
 網站裡
 行家裡手
+雲裡霧裡
 首發
 夸脫
 風采
 歌后
 影后
 封后
+查封後
+解封後
 太后
 天后
 呂后
 趙威后
 聖后
 陳有后
-許虬
 于冠華
 于雲鶴
 于忠肅集
 仲裁制
 獨裁制
 恒生
+恒基
+恒隆
 嚴云農
 伊東怜
 衛後莊公
 留長髮
 髮披肩
 髮及腰
+飄髮自由女神
 後天
 學家
 游離
 紅后假說
 書面
 不只
+湧水
 高涌泉
+涌水塘
 后姓
 計劃
 抑制劑
 誇稱
 誇讚
 讚嘆
-繼承制
 布穀鳥
 黎克特制
 筆桿
 麻將蓆
 被廢後
 蒸製
+烹製
 體徵
 綜合徵
 价川
 沙瑯
 琺瑯
 菜餚
+梁啓超
+改制成
+王添灯
diff --git a/maintenance/populateContentModel.php b/maintenance/populateContentModel.php
new file mode 100644 (file)
index 0000000..3f5d6b6
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Populate the page_content_model and {rev,ar}_content_{model,format} fields.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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';
+
+/**
+ * Usage:
+ *  populateContentModel.php --ns=1 --table=page
+ */
+class PopulateContentModel extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Populate the various content_* fields';
+               $this->addOption( 'ns', 'Namespace to run in, or "all" for all namespaces', true, true );
+               $this->addOption( 'table', 'Table to run in', true, true );
+               $this->setBatchSize( 100 );
+       }
+
+       public function execute() {
+               $dbw = wfGetDB( DB_MASTER );
+               $ns = $this->getOption( 'ns' );
+               if ( !ctype_digit( $ns ) && $ns !== 'all' ) {
+                       $this->error( 'Invalid namespace', 1 );
+               }
+               $ns = $ns === 'all' ? 'all' : (int)$ns;
+               $table = $this->getOption( 'table' );
+               switch ( $table ) {
+                       case 'revision':
+                       case 'archive':
+                               $this->populateRevisionOrArchive( $dbw, $table, $ns );
+                               break;
+                       case 'page':
+                               $this->populatePage( $dbw, $ns );
+                               break;
+                       default:
+                               $this->error( "Invalid table name: $table", 1 );
+               }
+       }
+
+       private function updatePageRows( DatabaseBase $dbw, $pageIds, $model ) {
+               $count = count( $pageIds );
+               $this->output( "Setting $count rows to $model..." );
+               $dbw->update(
+                       'page',
+                       array( 'page_content_model' => $model ),
+                       array( 'page_id' => $pageIds ),
+                       __METHOD__
+               );
+               wfWaitForSlaves();
+               $this->output( "done.\n" );
+       }
+
+       protected function populatePage( DatabaseBase $dbw, $ns ) {
+               $toSave = array();
+               $lastId = 0;
+               $nsCondition = $ns === 'all' ? array() : array( 'page_namespace' => $ns );
+               do {
+                       $rows = $dbw->select(
+                               'page',
+                               array( 'page_namespace', 'page_title', 'page_id' ),
+                               array(
+                                       'page_content_model' => null,
+                                       'page_id > ' . $dbw->addQuotes( $lastId ),
+                               ) + $nsCondition,
+                               __METHOD__,
+                               array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'page_id ASC' )
+                       );
+                       $this->output( "Fetched {$rows->numRows()} rows.\n" );
+                       foreach ( $rows as $row ) {
+                               $title = Title::newFromRow( $row );
+                               $model = ContentHandler::getDefaultModelFor( $title );
+                               $toSave[$model][] = $row->page_id;
+                               if ( count( $toSave[$model] ) >= $this->mBatchSize ) {
+                                       $this->updatePageRows( $dbw, $toSave[$model], $model );
+                                       unset( $toSave[$model] );
+                               }
+                               $lastId = $row->page_id;
+                       }
+               } while ( $rows->numRows() >= $this->mBatchSize );
+               foreach ( $toSave as $model => $pages ) {
+                       $this->updatePageRows( $dbw, $pages, $model );
+               }
+       }
+
+       private function updateRevisionOrArchiveRows( DatabaseBase $dbw, $ids, $model, $table ) {
+               $prefix = $table === 'archive' ? 'ar' : 'rev';
+               $model_column = "{$prefix}_content_model";
+               $format_column = "{$prefix}_content_format";
+               $key = "{$prefix}_id";
+
+               $count = count( $ids );
+               $format = ContentHandler::getForModelID( $model )->getDefaultFormat();
+               $this->output( "Setting $count rows to $model / $format..." );
+               $dbw->update(
+                       $table,
+                       array( $model_column => $model, $format_column => $format ),
+                       array( $key => $ids ),
+                       __METHOD__
+               );
+               $this->output( "done.\n" );
+       }
+
+       protected function populateRevisionOrArchive( DatabaseBase $dbw, $table, $ns ) {
+               $prefix = $table === 'archive' ? 'ar' : 'rev';
+               $model_column = "{$prefix}_content_model";
+               $format_column = "{$prefix}_content_format";
+               $key = "{$prefix}_id";
+               if ( $table === 'archive' ) {
+                       $selectTables = 'archive';
+                       $fields = array( 'ar_namespace', 'ar_title' );
+                       $join_conds = array();
+                       $where = $ns === 'all' ? array() : array( 'ar_namespace' => $ns );
+               } else { // revision
+                       $selectTables = array( 'revision', 'page' );
+                       $fields = array( 'page_title', 'page_namespace' );
+                       $join_conds = array( 'page' => array( 'INNER JOIN', 'rev_page=page_id' ) );
+                       $where = $ns === 'all' ? array() : array( 'page_namespace' => $ns );
+               }
+
+               $toSave = array();
+               $lastId = 0;
+               do {
+                       $rows = $dbw->select(
+                               $selectTables,
+                               array_merge( $fields, array( $model_column, $format_column, $key ) ),
+                               // @todo support populating format if model is already set
+                               array(
+                                       $model_column => null,
+                                       "$key > " . $dbw->addQuotes( $lastId ),
+                               ) + $where,
+                               __METHOD__,
+                               array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => "$key ASC" ),
+                               $join_conds
+                       );
+                       $this->output( "Fetched {$rows->numRows()} rows.\n" );
+                       foreach ( $rows as $row ) {
+                               if ( $table === 'archive' ) {
+                                       $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+                               } else {
+                                       $title = Title::newFromRow( $row );
+                               }
+                               $lastId = $row->{$key};
+                               try {
+                                       $handler = ContentHandler::getForTitle( $title );
+                               } catch ( MWException $e ) {
+                                       $this->error( "Invalid content model for $title" );
+                                       continue;
+                               }
+                               $defaultModel = $handler->getModelID();
+                               $defaultFormat = $handler->getDefaultFormat();
+                               $dbModel = $row->{$model_column};
+                               $dbFormat = $row->{$format_column};
+                               $id = $row->{$key};
+                               if ( $dbModel === null && $dbFormat === null ) {
+                                       // Set the defaults
+                                       $toSave[$defaultModel][] = $row->{$key};
+                               } else { // $dbModel === null, $dbFormat set.
+                                       if ( $dbFormat === $defaultFormat ) {
+                                               $toSave[$defaultModel][] = $row->{$key};
+                                       } else { // non-default format, just update now
+                                               $this->output( "Updating model to match format for $table $id of $title... ");
+                                               $dbw->update(
+                                                       $table,
+                                                       array( $model_column => $defaultModel ),
+                                                       array( $key => $id ),
+                                                       __METHOD__
+                                               );
+                                               wfWaitForSlaves();
+                                               $this->output( "done.\n" );
+                                               continue;
+                                       }
+                               }
+
+                               if ( count( $toSave[$defaultModel] ) >= $this->mBatchSize ) {
+                                       $this->updateRevisionOrArchiveRows( $dbw, $toSave[$defaultModel], $defaultModel, $table );
+                                       unset( $toSave[$defaultModel] );
+                               }
+                       }
+               } while ( $rows->numRows() >= $this->mBatchSize );
+               foreach ( $toSave as $model => $ids ) {
+                       $this->updateRevisionOrArchiveRows( $dbw, $ids, $model, $table );
+               }
+       }
+}
+
+$maintClass = 'PopulateContentModel';
+require_once RUN_MAINTENANCE_IF_MAIN;
index 6ce54b9..924457a 100644 (file)
@@ -131,9 +131,9 @@ class RebuildFileCache extends Maintenance {
                                        ob_start( array( &$cache, 'saveToFileCache' ) ); // save on ob_end_clean()
                                        $wgUseFileCache = false; // hack, we don't want $article fiddling with filecache
                                        $article->view();
-                                       wfSuppressWarnings(); // header notices
+                                       MediaWiki\suppressWarnings(); // header notices
                                        $wgOut->output();
-                                       wfRestoreWarnings();
+                                       MediaWiki\restoreWarnings();
                                        $wgUseFileCache = true;
                                        ob_end_clean(); // clear buffer
                                        if ( $rebuilt ) {
index 7e02a4b..b11f1c8 100644 (file)
@@ -117,12 +117,12 @@ class SqliteMaintenance extends Maintenance {
                $this->db->query( 'BEGIN IMMEDIATE TRANSACTION', __METHOD__ );
                $ourFile = $this->db->getDbFilePath();
                $this->output( "   Copying database file $ourFile to $fileName... " );
-               wfSuppressWarnings( false );
+               MediaWiki\suppressWarnings( false );
                if ( !copy( $ourFile, $fileName ) ) {
                        $err = error_get_last();
                        $this->error( "      {$err['message']}" );
                }
-               wfSuppressWarnings( true );
+               MediaWiki\suppressWarnings( true );
                $this->output( "   Releasing lock...\n" );
                $this->db->query( 'COMMIT TRANSACTION', __METHOD__ );
        }
index d2fe3b4..dd4cd54 100644 (file)
@@ -312,9 +312,9 @@ class FixBug20757 extends Maintenance {
                $text = $secondaryRow->old_text;
                if ( in_array( 'external', $flags ) ) {
                        $url = $text;
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        list( /* $proto */, $path ) = explode( '://', $url, 2 );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        if ( $path == "" ) {
                                return false;
index 3562df6..b213929 100644 (file)
@@ -234,9 +234,9 @@ class RecompressTracked {
                                array( 'file', 'php://stdout', 'w' ),
                                array( 'file', 'php://stderr', 'w' )
                        );
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $proc = proc_open( "$cmd --slave-id $i", $spec, $pipes );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( !$proc ) {
                                $this->critical( "Error opening slave process: $cmd" );
                                exit( 1 );
index 3bb722e..452b53c 100755 (executable)
@@ -4,7 +4,6 @@
  * Run all updaters.
  *
  * This is used when the database schema is modified and we need to apply patches.
- * It is kept compatible with php 4 parsing so that it can give out a meaningful error.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -62,8 +61,7 @@ class UpdateMediaWiki extends Maintenance {
        }
 
        function compatChecks() {
-               // Avoid syntax error in PHP4
-               $minimumPcreVersion = constant( 'Installer::MINIMUM_PCRE_VERSION' );
+               $minimumPcreVersion = Installer::MINIMUM_PCRE_VERSION;
 
                list( $pcreVersion ) = explode( ' ', PCRE_VERSION, 2 );
                if ( version_compare( $pcreVersion, $minimumPcreVersion, '<' ) ) {
@@ -174,7 +172,7 @@ class UpdateMediaWiki extends Maintenance {
                        $child = $this->runChild( $maint );
 
                        // LoggedUpdateMaintenance is checking the updatelog itself
-                       $isLoggedUpdate = is_a( $child, 'LoggedUpdateMaintenance' );
+                       $isLoggedUpdate = $child instanceof LoggedUpdateMaintenance;
 
                        if ( !$isLoggedUpdate && $updater->updateRowExists( $maint ) ) {
                                continue;
index 08af11a..9cf7b2b 100644 (file)
@@ -18,7 +18,7 @@ class ValidateRegistrationFile extends Maintenance {
                        $this->error( "$path is not a valid JSON file.", 1 );
                }
                if ( !isset( $data->manifest_version ) ) {
-                       $this->output("Warning: No manifest_version set, assuming 1.\n" );
+                       $this->output( "Warning: No manifest_version set, assuming 1.\n" );
                        // For backwards-compatability assume 1
                        $data->manifest_version = 1;
                }
@@ -39,7 +39,7 @@ class ValidateRegistrationFile extends Maintenance {
                                . ExtensionRegistry::MANIFEST_VERSION . "\n" );
                }
                $retriever = new JsonSchema\Uri\UriRetriever();
-               $schema = $retriever->retrieve('file://' . $schemaPath );
+               $schema = $retriever->retrieve( 'file://' . $schemaPath );
 
                $validator = new JsonSchema\Validator();
                $validator->check( $data, $schema );
diff --git a/mw-config/index.php5 b/mw-config/index.php5
deleted file mode 100644 (file)
index 8898653..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Version of mw-config/index.php to be used in web servers that require the .php5
- * extension to execute scripts with the PHP5 engine.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-define( 'MW_INSTALL_PHP5_EXT', 1 );
-
-require './index.php';
index 42270f7..e28aef4 100644 (file)
@@ -9,16 +9,16 @@
   "devDependencies": {
     "grunt": "0.4.5",
     "grunt-cli": "0.1.13",
-    "grunt-banana-checker": "0.2.1",
+    "grunt-banana-checker": "0.2.2",
     "grunt-contrib-copy": "0.8.0",
     "grunt-contrib-jshint": "0.11.2",
     "grunt-contrib-watch": "0.6.1",
     "grunt-jscs": "1.8.0",
     "grunt-jsonlint": "1.0.4",
-    "grunt-karma": "0.10.1",
-    "karma": "0.12.31",
-    "karma-chrome-launcher": "0.1.8",
-    "karma-firefox-launcher": "0.1.4",
+    "grunt-karma": "0.11.0",
+    "karma": "0.12.36",
+    "karma-chrome-launcher": "0.1.12",
+    "karma-firefox-launcher": "0.1.6",
     "karma-qunit": "0.1.4",
     "qunitjs": "1.18.0"
   }
index 644ff9c..1ec4c1e 100644 (file)
@@ -59,9 +59,6 @@ return array(
        // Scripts for the dynamic language specific data, like grammar forms.
        'mediawiki.language.data' => array( 'class' => 'ResourceLoaderLanguageDataModule' ),
 
-       // Dynamic data for mediawiki.jqueryMsg, such as allowed tags
-       'mediawiki.jqueryMsg.data' => array( 'class' => 'ResourceLoaderJqueryMsgDataModule' ),
-
        /* MediaWiki base skinning modules */
 
        /**
@@ -151,7 +148,7 @@ return array(
                'scripts' => 'resources/src/jquery/jquery.accessKeyLabel.js',
                'dependencies' => array(
                        'jquery.client',
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                ),
                'messages' => array( 'brackets', 'word-separator' ),
                'targets' => array( 'mobile', 'desktop' ),
@@ -218,7 +215,6 @@ return array(
                'styles' => 'resources/src/jquery/jquery.confirmable.css',
                'dependencies' => 'mediawiki.jqueryMsg',
        ),
-       // Use mediawiki.cookie in new code, rather than jquery.cookie.
        'jquery.cookie' => array(
                'scripts' => 'resources/lib/jquery/jquery.cookie.js',
                'targets' => array( 'desktop', 'mobile' ),
@@ -251,7 +247,7 @@ return array(
        ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/src/jquery/jquery.highlightText.js',
-               'dependencies' => 'jquery.mwExtension',
+               'dependencies' => 'mediawiki.RegExp',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.hoverIntent' => array(
@@ -313,7 +309,7 @@ return array(
                'styles' => 'resources/src/jquery/jquery.tablesorter.css',
                'messages' => array( 'sort-descending', 'sort-ascending' ),
                'dependencies' => array(
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                        'mediawiki.language.months',
                ),
        ),
@@ -824,7 +820,10 @@ return array(
        ),
        'mediawiki.api' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js',
-               'dependencies' => 'mediawiki.util',
+               'dependencies' => array(
+                       'mediawiki.util',
+                       'user.tokens',
+               ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.category' => array(
@@ -839,7 +838,6 @@ return array(
                'dependencies' => array(
                        'mediawiki.api',
                        'mediawiki.Title',
-                       'user.tokens',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -855,12 +853,12 @@ return array(
        'mediawiki.api.parse' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.parse.js',
                'dependencies' => 'mediawiki.api',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.watch' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.watch.js',
                'dependencies' => array(
                        'mediawiki.api',
-                       'user.tokens',
                ),
        ),
        'mediawiki.content.json' => array(
@@ -957,7 +955,7 @@ return array(
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.js',
                'dependencies' => array(
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                        'jquery.byteLimit',
                ),
                'messages' => array(
@@ -966,10 +964,6 @@ return array(
                        'colon-separator',
                ),
        ),
-       'mediawiki.htmlform.ooui' => array(
-               'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.ooui.js',
-               'dependencies' => 'oojs-ui',
-       ),
        'mediawiki.htmlform.ooui.styles' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.htmlform.ooui.css',
                'position' => 'top',
@@ -981,6 +975,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.inspect.js',
                'dependencies' => array(
                        'jquery.byteLength',
+                       'mediawiki.RegExp',
                        'json',
                ),
                'targets' => array( 'desktop', 'mobile' ),
@@ -1023,6 +1018,10 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.notify.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.RegExp' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.RegExp.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.pager.tablePager' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
                'position' => 'top',
@@ -1058,7 +1057,7 @@ return array(
        ),
        'mediawiki.toc' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.toc.js',
-               'dependencies' => 'jquery.cookie',
+               'dependencies' => 'mediawiki.cookie',
                'messages' => array( 'showtoc', 'hidetoc' ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1070,7 +1069,7 @@ return array(
        'mediawiki.user' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.user.js',
                'dependencies' => array(
-                       'jquery.cookie',
+                       'mediawiki.cookie',
                        'mediawiki.api',
                        'user.options',
                        'user.tokens',
@@ -1088,7 +1087,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.util.js',
                'dependencies' => array(
                        'jquery.accessKeyLabel',
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                        'mediawiki.notify',
                ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
@@ -1127,7 +1126,7 @@ return array(
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css',
                'dependencies' => array(
                        'jquery.makeCollapsible',
-                       'jquery.cookie',
+                       'mediawiki.cookie',
                        'mediawiki.icon',
                ),
        ),
@@ -1235,6 +1234,7 @@ return array(
                        'jquery.textSelection',
                        'mediawiki.jqueryMsg',
                        'mediawiki.confirmCloseWindow',
+                       'user.options',
                ),
                'messages' => array(
                        'editwarning-warning',
@@ -1297,11 +1297,13 @@ return array(
        ),
 
        'mediawiki.jqueryMsg' => array(
+               // Add data for mediawiki.jqueryMsg, such as allowed tags
+               'class' => 'ResourceLoaderJqueryMsgModule',
                'scripts' => 'resources/src/mediawiki/mediawiki.jqueryMsg.js',
                'dependencies' => array(
-                       'mediawiki.jqueryMsg.data',
                        'mediawiki.util',
                        'mediawiki.language',
+                       'user.options',
                        'dom-level2-shim',
                ),
                'targets' => array( 'desktop', 'mobile' ),
@@ -1379,7 +1381,7 @@ return array(
                        'mediawiki.page.startup',
                        'mediawiki.util',
                        'jquery.accessKeyLabel',
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                ),
                'messages' => array(
                        'watch',
@@ -1433,7 +1435,7 @@ return array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js',
                'dependencies' => array(
                        'jquery.makeCollapsible',
-                       'jquery.cookie',
+                       'mediawiki.cookie',
                ),
        ),
        'mediawiki.special.changeslist.enhanced' => array(
@@ -1524,6 +1526,7 @@ return array(
                        'mediawiki.Title',
                        'mediawiki.util',
                        'mediawiki.confirmCloseWindow',
+                       'user.options',
                ),
        ),
        'mediawiki.special.userlogin.common.styles' => array(
@@ -1732,15 +1735,21 @@ return array(
                'scripts' => array(
                        'resources/src/mediawiki.widgets/mw.widgets.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.infuse.js',
                ),
                'skinStyles' => array(
                        'default' => 'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.css',
                ),
                'dependencies' => array(
+                       'jquery.autoEllipsis',
+                       'mediawiki.Title',
+                       'mediawiki.api',
                        'oojs-ui',
                ),
                'messages' => array(
-                       // …
+                       'mw-widgets-titleinput-description-new-page',
+                       'mw-widgets-titleinput-description-redirect',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
index 37203fb..8320b37 100644 (file)
@@ -112,10 +112,13 @@ 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}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
+                       $module['selectorWithVariant'] = '.oo-ui-image-{variant} .oo-ui-icon-{name}, 
+                               .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before,
+                               .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before,
+                               .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
                }
 
-               $modules[ "oojs-ui.styles.$name" ] = $module;
+               $modules["oojs-ui.styles.$name"] = $module;
        }
 
        return $modules;
index 4595994..85f51e2 100644 (file)
@@ -1,17 +1,20 @@
 /*!
  * https://github.com/es-shims/es5-shim
- * @license es5-shim Copyright 2009-2014 by contributors, MIT License
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
  * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
  */
 
 // vim: ts=4 sts=4 sw=4 expandtab
 
-//Add semicolon to prevent IIFE from being passed as argument to concated code.
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
 ;
 
 // UMD (Universal Module Definition)
 // see https://github.com/umdjs/umd/blob/master/returnExports.js
 (function (root, factory) {
+    'use strict';
+
+    /*global define, exports, module */
     if (typeof define === 'function' && define.amd) {
         // AMD. Register as an anonymous module.
         define(factory);
@@ -42,140 +45,144 @@ var ObjectPrototype = Object.prototype;
 var FunctionPrototype = Function.prototype;
 var StringPrototype = String.prototype;
 var NumberPrototype = Number.prototype;
-var _Array_slice_ = ArrayPrototype.slice;
+var array_slice = ArrayPrototype.slice;
 var array_splice = ArrayPrototype.splice;
 var array_push = ArrayPrototype.push;
 var array_unshift = ArrayPrototype.unshift;
+var array_concat = ArrayPrototype.concat;
 var call = FunctionPrototype.call;
 
-// Having a toString local variable name breaks in Opera so use _toString.
-var _toString = ObjectPrototype.toString;
+// Having a toString local variable name breaks in Opera so use to_string.
+var to_string = ObjectPrototype.toString;
 
-var isFunction = function (val) {
-    return ObjectPrototype.toString.call(val) === '[object Function]';
-};
-var isRegex = function (val) {
-    return ObjectPrototype.toString.call(val) === '[object RegExp]';
-};
-var isArray = function isArray(obj) {
-    return _toString.call(obj) === "[object Array]";
-};
-var isString = function isString(obj) {
-    return _toString.call(obj) === "[object String]";
+var isArray = Array.isArray || function isArray(obj) {
+    return to_string.call(obj) === '[object Array]';
 };
+
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, tryFunctionObject = function tryFunctionObject(value) { try { fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]'; isCallable = function isCallable(value) { if (typeof value !== 'function') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };
+var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+
 var isArguments = function isArguments(value) {
-    var str = _toString.call(value);
+    var str = to_string.call(value);
     var isArgs = str === '[object Arguments]';
     if (!isArgs) {
-        isArgs = !isArray(str)
-            && value !== null
-            && typeof value === 'object'
-            && typeof value.length === 'number'
-            && value.length >= 0
-            && isFunction(value.callee);
+        isArgs = !isArray(value) &&
+          value !== null &&
+          typeof value === 'object' &&
+          typeof value.length === 'number' &&
+          value.length >= 0 &&
+          isCallable(value.callee);
     }
     return isArgs;
 };
 
-var supportsDescriptors = Object.defineProperty && (function () {
-    try {
-        Object.defineProperty({}, 'x', {});
-        return true;
-    } catch (e) { /* this is ES3 */
-        return false;
-    }
-}());
-
-// Define configurable, writable and non-enumerable props
-// if they don't exist.
-var defineProperty;
-if (supportsDescriptors) {
-    defineProperty = function (object, name, method, forceAssign) {
-        if (!forceAssign && (name in object)) { return; }
-        Object.defineProperty(object, name, {
-            configurable: true,
-            enumerable: false,
-            writable: true,
-            value: method
-        });
-    };
-} else {
-    defineProperty = function (object, name, method, forceAssign) {
-        if (!forceAssign && (name in object)) { return; }
-        object[name] = method;
-    };
-}
-var defineProperties = function (object, map, forceAssign) {
-    for (var name in map) {
-        if (ObjectPrototype.hasOwnProperty.call(map, name)) {
-          defineProperty(object, name, map[name], forceAssign);
-        }
-    }
-};
+/* inlined from http://npmjs.com/define-properties */
+var defineProperties = (function (has) {
+  var supportsDescriptors = Object.defineProperty && (function () {
+      try {
+          var obj = {};
+          Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+          for (var _ in obj) { return false; }
+          return obj.x === obj;
+      } catch (e) { /* this is ES3 */
+          return false;
+      }
+  }());
+
+  // Define configurable, writable and non-enumerable props
+  // if they don't exist.
+  var defineProperty;
+  if (supportsDescriptors) {
+      defineProperty = function (object, name, method, forceAssign) {
+          if (!forceAssign && (name in object)) { return; }
+          Object.defineProperty(object, name, {
+              configurable: true,
+              enumerable: false,
+              writable: true,
+              value: method
+          });
+      };
+  } else {
+      defineProperty = function (object, name, method, forceAssign) {
+          if (!forceAssign && (name in object)) { return; }
+          object[name] = method;
+      };
+  }
+  return function defineProperties(object, map, forceAssign) {
+      for (var name in map) {
+          if (has.call(map, name)) {
+            defineProperty(object, name, map[name], forceAssign);
+          }
+      }
+  };
+}(ObjectPrototype.hasOwnProperty));
 
 //
 // Util
 // ======
 //
 
-// ES5 9.4
-// http://es5.github.com/#x9.4
-// http://jsperf.com/to-integer
-
-function toInteger(n) {
-    n = +n;
-    if (n !== n) { // isNaN
-        n = 0;
-    } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-    }
-    return n;
-}
-
-function isPrimitive(input) {
+/* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+var isPrimitive = function isPrimitive(input) {
     var type = typeof input;
-    return (
-        input === null ||
-        type === "undefined" ||
-        type === "boolean" ||
-        type === "number" ||
-        type === "string"
-    );
-}
+    return input === null || (type !== 'object' && type !== 'function');
+};
 
-function toPrimitive(input) {
-    var val, valueOf, toStr;
-    if (isPrimitive(input)) {
-        return input;
-    }
-    valueOf = input.valueOf;
-    if (isFunction(valueOf)) {
-        val = valueOf.call(input);
-        if (isPrimitive(val)) {
-            return val;
+var ES = {
+    // ES5 9.4
+    // http://es5.github.com/#x9.4
+    // http://jsperf.com/to-integer
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+    ToInteger: function ToInteger(num) {
+        var n = +num;
+        if (n !== n) { // isNaN
+            n = 0;
+        } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+            n = (n > 0 || -1) * Math.floor(Math.abs(n));
         }
-    }
-    toStr = input.toString;
-    if (isFunction(toStr)) {
-        val = toStr.call(input);
-        if (isPrimitive(val)) {
-            return val;
+        return n;
+    },
+
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+    ToPrimitive: function ToPrimitive(input) {
+        var val, valueOf, toStr;
+        if (isPrimitive(input)) {
+            return input;
         }
-    }
-    throw new TypeError();
-}
+        valueOf = input.valueOf;
+        if (isCallable(valueOf)) {
+            val = valueOf.call(input);
+            if (isPrimitive(val)) {
+                return val;
+            }
+        }
+        toStr = input.toString;
+        if (isCallable(toStr)) {
+            val = toStr.call(input);
+            if (isPrimitive(val)) {
+                return val;
+            }
+        }
+        throw new TypeError();
+    },
+
+    // ES5 9.9
+    // http://es5.github.com/#x9.9
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+    ToObject: function (o) {
+        /*jshint eqnull: true */
+        if (o == null) { // this matches both null and undefined
+            throw new TypeError("can't convert " + o + ' to object');
+        }
+        return Object(o);
+    },
 
-// ES5 9.9
-// http://es5.github.com/#x9.9
-var toObject = function (o) {
-    if (o == null) { // this matches both null and undefined
-        throw new TypeError("can't convert " + o + " to object");
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+    ToUint32: function ToUint32(x) {
+        return x >>> 0;
     }
-    return Object(o);
-};
-
-var ToUint32 = function ToUint32(x) {
-    return x >>> 0;
 };
 
 //
@@ -186,20 +193,20 @@ var ToUint32 = function ToUint32(x) {
 // ES-5 15.3.4.5
 // http://es5.github.com/#x15.3.4.5
 
-function Empty() {}
+var Empty = function Empty() {};
 
 defineProperties(FunctionPrototype, {
     bind: function bind(that) { // .length is 1
         // 1. Let Target be the this value.
         var target = this;
         // 2. If IsCallable(Target) is false, throw a TypeError exception.
-        if (!isFunction(target)) {
-            throw new TypeError("Function.prototype.bind called on incompatible " + target);
+        if (!isCallable(target)) {
+            throw new TypeError('Function.prototype.bind called on incompatible ' + target);
         }
         // 3. Let A be a new (possibly empty) internal list of all of the
         //   argument values provided after thisArg (arg1, arg2 etc), in order.
         // XXX slicedArgs will stand in for "A" if used
-        var args = _Array_slice_.call(arguments, 1); // for normal call
+        var args = array_slice.call(arguments, 1); // for normal call
         // 4. Let F be a new native ECMAScript object.
         // 11. Set the [[Prototype]] internal property of F to the standard
         //   built-in Function prototype object as specified in 15.3.3.1.
@@ -209,6 +216,7 @@ defineProperties(FunctionPrototype, {
         //   15.3.4.5.2.
         // 14. Set the [[HasInstance]] internal property of F as described in
         //   15.3.4.5.3.
+        var bound;
         var binder = function () {
 
             if (this instanceof bound) {
@@ -230,7 +238,7 @@ defineProperties(FunctionPrototype, {
 
                 var result = target.apply(
                     this,
-                    args.concat(_Array_slice_.call(arguments))
+                    array_concat.call(args, array_slice.call(arguments))
                 );
                 if (Object(result) === result) {
                     return result;
@@ -259,7 +267,7 @@ defineProperties(FunctionPrototype, {
                 // equiv: target.call(this, ...boundArgs, ...args)
                 return target.apply(
                     that,
-                    args.concat(_Array_slice_.call(arguments))
+                    array_concat.call(args, array_slice.call(arguments))
                 );
 
             }
@@ -278,7 +286,7 @@ defineProperties(FunctionPrototype, {
         //   specified in 15.3.5.1.
         var boundArgs = [];
         for (var i = 0; i < boundLength; i++) {
-            boundArgs.push("$" + i);
+            boundArgs.push('$' + i);
         }
 
         // XXX Build a dynamic function with desired amount of arguments is the only
@@ -287,7 +295,7 @@ defineProperties(FunctionPrototype, {
         // for ex.) all use of eval or Function costructor throws an exception.
         // However in all of these environments Function.prototype.bind exists
         // and so this code will never be executed.
-        var bound = Function("binder", "return function (" + boundArgs.join(",") + "){return binder.apply(this,arguments)}")(binder);
+        bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
 
         if (target.prototype) {
             Empty.prototype = target.prototype;
@@ -325,19 +333,6 @@ defineProperties(FunctionPrototype, {
 // us it in defining shortcuts.
 var owns = call.bind(ObjectPrototype.hasOwnProperty);
 
-// If JS engine supports accessors creating shortcuts.
-var defineGetter;
-var defineSetter;
-var lookupGetter;
-var lookupSetter;
-var supportsAccessors;
-if ((supportsAccessors = owns(ObjectPrototype, "__defineGetter__"))) {
-    defineGetter = call.bind(ObjectPrototype.__defineGetter__);
-    defineSetter = call.bind(ObjectPrototype.__defineSetter__);
-    lookupGetter = call.bind(ObjectPrototype.__lookupGetter__);
-    lookupSetter = call.bind(ObjectPrototype.__lookupSetter__);
-}
-
 //
 // Array
 // =====
@@ -359,7 +354,7 @@ defineProperties(ArrayPrototype, {
             return array_splice.apply(this, arguments);
         }
     }
-}, spliceNoopReturnsEmptyArray);
+}, !spliceNoopReturnsEmptyArray);
 
 var spliceWorksWithEmptyObject = (function () {
     var obj = {};
@@ -370,13 +365,13 @@ defineProperties(ArrayPrototype, {
     splice: function splice(start, deleteCount) {
         if (arguments.length === 0) { return []; }
         var args = arguments;
-        this.length = Math.max(toInteger(this.length), 0);
+        this.length = Math.max(ES.ToInteger(this.length), 0);
         if (arguments.length > 0 && typeof deleteCount !== 'number') {
-            args = _Array_slice_.call(arguments);
+            args = array_slice.call(arguments);
             if (args.length < 2) {
                 args.push(this.length - start);
             } else {
-                args[1] = toInteger(deleteCount);
+                args[1] = ES.ToInteger(deleteCount);
             }
         }
         return array_splice.apply(this, args);
@@ -419,8 +414,8 @@ defineProperties(Array, { isArray: isArray });
 
 // Check failure of by-index access of string characters (IE < 9)
 // and failure of `0 in boxedString` (Rhino)
-var boxedString = Object("a");
-var splitString = boxedString[0] !== "a" || !(0 in boxedString);
+var boxedString = Object('a');
+var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
 
 var properlyBoxesContext = function properlyBoxed(method) {
     // Check node 0.6.21 bug where third parameter is not boxed
@@ -433,6 +428,7 @@ var properlyBoxesContext = function properlyBoxed(method) {
 
         method.call([1], function () {
             'use strict';
+
             properlyBoxesStrict = typeof this === 'string';
         }, 'x');
     }
@@ -440,24 +436,30 @@ var properlyBoxesContext = function properlyBoxed(method) {
 };
 
 defineProperties(ArrayPrototype, {
-    forEach: function forEach(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            thisp = arguments[1],
-            i = -1,
-            length = self.length >>> 0;
+    forEach: function forEach(callbackfn /*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var i = -1;
+        var length = self.length >>> 0;
+        var T;
+        if (arguments.length > 1) {
+          T = arguments[1];
+        }
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(); // TODO message
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.forEach callback must be a function');
         }
 
         while (++i < length) {
             if (i in self) {
                 // Invoke the callback function with call, passing arguments:
                 // context, property value, property key, thisArg object
-                // context
-                fun.call(thisp, self[i], i, object);
+                if (typeof T !== 'undefined') {
+                    callbackfn.call(T, self[i], i, object);
+                } else {
+                    callbackfn(self[i], i, object);
+                }
             }
         }
     }
@@ -467,21 +469,28 @@ defineProperties(ArrayPrototype, {
 // http://es5.github.com/#x15.4.4.19
 // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
 defineProperties(ArrayPrototype, {
-    map: function map(fun /*, thisp*/) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            length = self.length >>> 0,
-            result = Array(length),
-            thisp = arguments[1];
+    map: function map(callbackfn/*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var length = self.length >>> 0;
+        var result = Array(length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(fun + " is not a function");
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.map callback must be a function');
         }
 
         for (var i = 0; i < length; i++) {
             if (i in self) {
-                result[i] = fun.call(thisp, self[i], i, object);
+                if (typeof T !== 'undefined') {
+                    result[i] = callbackfn.call(T, self[i], i, object);
+                } else {
+                    result[i] = callbackfn(self[i], i, object);
+                }
             }
         }
         return result;
@@ -492,23 +501,26 @@ defineProperties(ArrayPrototype, {
 // http://es5.github.com/#x15.4.4.20
 // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
 defineProperties(ArrayPrototype, {
-    filter: function filter(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            length = self.length >>> 0,
-            result = [],
-            value,
-            thisp = arguments[1];
+    filter: function filter(callbackfn /*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var length = self.length >>> 0;
+        var result = [];
+        var value;
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(fun + " is not a function");
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.filter callback must be a function');
         }
 
         for (var i = 0; i < length; i++) {
             if (i in self) {
                 value = self[i];
-                if (fun.call(thisp, value, i, object)) {
+                if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
                     result.push(value);
                 }
             }
@@ -521,19 +533,22 @@ defineProperties(ArrayPrototype, {
 // http://es5.github.com/#x15.4.4.16
 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
 defineProperties(ArrayPrototype, {
-    every: function every(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
+    every: function every(callbackfn /*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var length = self.length >>> 0;
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(fun + " is not a function");
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.every callback must be a function');
         }
 
         for (var i = 0; i < length; i++) {
-            if (i in self && !fun.call(thisp, self[i], i, object)) {
+            if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
                 return false;
             }
         }
@@ -545,19 +560,22 @@ defineProperties(ArrayPrototype, {
 // http://es5.github.com/#x15.4.4.17
 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
 defineProperties(ArrayPrototype, {
-    some: function some(fun /*, thisp */) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            length = self.length >>> 0,
-            thisp = arguments[1];
+    some: function some(callbackfn/*, thisArg */) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var length = self.length >>> 0;
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(fun + " is not a function");
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.some callback must be a function');
         }
 
         for (var i = 0; i < length; i++) {
-            if (i in self && fun.call(thisp, self[i], i, object)) {
+            if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
                 return true;
             }
         }
@@ -573,19 +591,19 @@ if (ArrayPrototype.reduce) {
     reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object';
 }
 defineProperties(ArrayPrototype, {
-    reduce: function reduce(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            length = self.length >>> 0;
+    reduce: function reduce(callbackfn /*, initialValue*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var length = self.length >>> 0;
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(fun + " is not a function");
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.reduce callback must be a function');
         }
 
         // no value to return if no initial value and an empty array
-        if (!length && arguments.length === 1) {
-            throw new TypeError("reduce of empty array with no initial value");
+        if (length === 0 && arguments.length === 1) {
+            throw new TypeError('reduce of empty array with no initial value');
         }
 
         var i = 0;
@@ -601,14 +619,14 @@ defineProperties(ArrayPrototype, {
 
                 // if array contains no values, no initial value to return
                 if (++i >= length) {
-                    throw new TypeError("reduce of empty array with no initial value");
+                    throw new TypeError('reduce of empty array with no initial value');
                 }
             } while (true);
         }
 
         for (; i < length; i++) {
             if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
+                result = callbackfn(result, self[i], i, object);
             }
         }
 
@@ -624,22 +642,23 @@ if (ArrayPrototype.reduceRight) {
     reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object';
 }
 defineProperties(ArrayPrototype, {
-    reduceRight: function reduceRight(fun /*, initial*/) {
-        var object = toObject(this),
-            self = splitString && isString(this) ? this.split('') : object,
-            length = self.length >>> 0;
+    reduceRight: function reduceRight(callbackfn/*, initial*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? this.split('') : object;
+        var length = self.length >>> 0;
 
         // If no callback function or if callback is not a callable function
-        if (!isFunction(fun)) {
-            throw new TypeError(fun + " is not a function");
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.reduceRight callback must be a function');
         }
 
         // no value to return if no initial value, empty array
-        if (!length && arguments.length === 1) {
-            throw new TypeError("reduceRight of empty array with no initial value");
+        if (length === 0 && arguments.length === 1) {
+            throw new TypeError('reduceRight of empty array with no initial value');
         }
 
-        var result, i = length - 1;
+        var result;
+        var i = length - 1;
         if (arguments.length >= 2) {
             result = arguments[1];
         } else {
@@ -651,7 +670,7 @@ defineProperties(ArrayPrototype, {
 
                 // if array contains no values, no initial value to return
                 if (--i < 0) {
-                    throw new TypeError("reduceRight of empty array with no initial value");
+                    throw new TypeError('reduceRight of empty array with no initial value');
                 }
             } while (true);
         }
@@ -662,7 +681,7 @@ defineProperties(ArrayPrototype, {
 
         do {
             if (i in self) {
-                result = fun.call(void 0, result, self[i], i, object);
+                result = callbackfn(result, self[i], i, object);
             }
         } while (i--);
 
@@ -675,23 +694,23 @@ defineProperties(ArrayPrototype, {
 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
 var hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
 defineProperties(ArrayPrototype, {
-    indexOf: function indexOf(sought /*, fromIndex */ ) {
-        var self = splitString && isString(this) ? this.split('') : toObject(this),
-            length = self.length >>> 0;
+    indexOf: function indexOf(searchElement /*, fromIndex */) {
+        var self = splitString && isString(this) ? this.split('') : ES.ToObject(this);
+        var length = self.length >>> 0;
 
-        if (!length) {
+        if (length === 0) {
             return -1;
         }
 
         var i = 0;
         if (arguments.length > 1) {
-            i = toInteger(arguments[1]);
+            i = ES.ToInteger(arguments[1]);
         }
 
         // handle negative indices
         i = i >= 0 ? i : Math.max(0, length + i);
         for (; i < length; i++) {
-            if (i in self && self[i] === sought) {
+            if (i in self && self[i] === searchElement) {
                 return i;
             }
         }
@@ -704,21 +723,21 @@ defineProperties(ArrayPrototype, {
 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
 var hasFirefox2LastIndexOfBug = Array.prototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
 defineProperties(ArrayPrototype, {
-    lastIndexOf: function lastIndexOf(sought /*, fromIndex */) {
-        var self = splitString && isString(this) ? this.split('') : toObject(this),
-            length = self.length >>> 0;
+    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */) {
+        var self = splitString && isString(this) ? this.split('') : ES.ToObject(this);
+        var length = self.length >>> 0;
 
-        if (!length) {
+        if (length === 0) {
             return -1;
         }
         var i = length - 1;
         if (arguments.length > 1) {
-            i = Math.min(i, toInteger(arguments[1]));
+            i = Math.min(i, ES.ToInteger(arguments[1]));
         }
         // handle negative indices
         i = i >= 0 ? i : length - Math.abs(i);
         for (; i >= 0; i--) {
-            if (i in self && sought === self[i]) {
+            if (i in self && searchElement === self[i]) {
                 return i;
             }
         }
@@ -735,37 +754,40 @@ defineProperties(ArrayPrototype, {
 // http://es5.github.com/#x15.2.3.14
 
 // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
-var hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'),
-    hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
+var hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString'),
+    hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype'),
+    hasStringEnumBug = !owns('x', '0'),
     dontEnums = [
-        "toString",
-        "toLocaleString",
-        "valueOf",
-        "hasOwnProperty",
-        "isPrototypeOf",
-        "propertyIsEnumerable",
-        "constructor"
+        'toString',
+        'toLocaleString',
+        'valueOf',
+        'hasOwnProperty',
+        'isPrototypeOf',
+        'propertyIsEnumerable',
+        'constructor'
     ],
     dontEnumsLength = dontEnums.length;
 
 defineProperties(Object, {
     keys: function keys(object) {
-        var isFn = isFunction(object),
+        var isFn = isCallable(object),
             isArgs = isArguments(object),
             isObject = object !== null && typeof object === 'object',
             isStr = isObject && isString(object);
 
         if (!isObject && !isFn && !isArgs) {
-            throw new TypeError("Object.keys called on a non-object");
+            throw new TypeError('Object.keys called on a non-object');
         }
 
         var theKeys = [];
         var skipProto = hasProtoEnumBug && isFn;
-        if (isStr || isArgs) {
+        if ((isStr && hasStringEnumBug) || isArgs) {
             for (var i = 0; i < object.length; ++i) {
                 theKeys.push(String(i));
             }
-        } else {
+        }
+
+        if (!isArgs) {
             for (var name in object) {
                 if (!(skipProto && name === 'prototype') && owns(object, name)) {
                     theKeys.push(String(name));
@@ -815,14 +837,14 @@ defineProperties(Object, {
 // The time zone is always UTC, denoted by the suffix Z. If the time value of
 // this object is not a finite Number a RangeError exception is thrown.
 var negativeDate = -62198755200000;
-var negativeYearString = "-000001";
+var negativeYearString = '-000001';
 var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
 
 defineProperties(Date.prototype, {
     toISOString: function toISOString() {
         var result, length, value, year, month;
         if (!isFinite(this)) {
-            throw new RangeError("Date.prototype.toISOString called on non-finite value.");
+            throw new RangeError('Date.prototype.toISOString called on non-finite value.');
         }
 
         year = this.getUTCFullYear();
@@ -835,8 +857,8 @@ defineProperties(Date.prototype, {
         // the date time string format is specified in 15.9.1.15.
         result = [month + 1, this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
         year = (
-            (year < 0 ? "-" : (year > 9999 ? "+" : "")) +
-            ("00000" + Math.abs(year)).slice(0 <= year && year <= 9999 ? -4 : -6)
+            (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
+            ('00000' + Math.abs(year)).slice((0 <= year && year <= 9999) ? -4 : -6)
         );
 
         length = result.length;
@@ -845,37 +867,34 @@ defineProperties(Date.prototype, {
             // pad months, days, hours, minutes, and seconds to have two
             // digits.
             if (value < 10) {
-                result[length] = "0" + value;
+                result[length] = '0' + value;
             }
         }
         // pad milliseconds to have three digits.
         return (
-            year + "-" + result.slice(0, 2).join("-") +
-            "T" + result.slice(2).join(":") + "." +
-            ("000" + this.getUTCMilliseconds()).slice(-3) + "Z"
+            year + '-' + result.slice(0, 2).join('-') +
+            'T' + result.slice(2).join(':') + '.' +
+            ('000' + this.getUTCMilliseconds()).slice(-3) + 'Z'
         );
     }
 }, hasNegativeDateBug);
 
-
 // ES5 15.9.5.44
 // http://es5.github.com/#x15.9.5.44
 // This function provides a String representation of a Date object for use by
 // JSON.stringify (15.12.3).
-var dateToJSONIsSupported = false;
-try {
-    dateToJSONIsSupported = (
-        Date.prototype.toJSON &&
-        new Date(NaN).toJSON() === null &&
-        new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
-        Date.prototype.toJSON.call({ // generic
-            toISOString: function () {
-                return true;
-            }
-        })
-    );
-} catch (e) {
-}
+var dateToJSONIsSupported = (function () {
+    try {
+        return Date.prototype.toJSON &&
+            new Date(NaN).toJSON() === null &&
+            new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+            Date.prototype.toJSON.call({ // generic
+                toISOString: function () { return true; }
+            });
+    } catch (e) {
+        return false;
+    }
+}());
 if (!dateToJSONIsSupported) {
     Date.prototype.toJSON = function toJSON(key) {
         // When the toJSON method is called with argument key, the following
@@ -883,24 +902,23 @@ if (!dateToJSONIsSupported) {
 
         // 1.  Let O be the result of calling ToObject, giving it the this
         // value as its argument.
-        // 2. Let tv be toPrimitive(O, hint Number).
-        var o = Object(this),
-            tv = toPrimitive(o),
-            toISO;
+        // 2. Let tv be ES.ToPrimitive(O, hint Number).
+        var O = Object(this);
+        var tv = ES.ToPrimitive(O);
         // 3. If tv is a Number and is not finite, return null.
-        if (typeof tv === "number" && !isFinite(tv)) {
+        if (typeof tv === 'number' && !isFinite(tv)) {
             return null;
         }
         // 4. Let toISO be the result of calling the [[Get]] internal method of
         // O with argument "toISOString".
-        toISO = o.toISOString;
+        var toISO = O.toISOString;
         // 5. If IsCallable(toISO) is false, throw a TypeError exception.
-        if (typeof toISO !== "function") {
-            throw new TypeError("toISOString property is not callable");
+        if (!isCallable(toISO)) {
+            throw new TypeError('toISOString property is not callable');
         }
         // 6. Return the result of calling the [[Call]] internal method of
         //  toISO with O as the this value and an empty argument list.
-        return toISO.call(o);
+        return toISO.call(O);
 
         // NOTE 1 The argument is ignored.
 
@@ -918,20 +936,23 @@ if (!dateToJSONIsSupported) {
 // based on work shared by Daniel Friesen (dantman)
 // http://gist.github.com/303249
 var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
-var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z'));
-var doesNotParseY2KNewYear = isNaN(Date.parse("2000-01-01T00:00:00.000Z"));
+var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
 if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
     // XXX global assignment won't work in embeddings that use
     // an alternate object for the context.
+    /*global Date: true */
+    /*eslint-disable no-undef*/
     Date = (function (NativeDate) {
-
+    /*eslint-enable no-undef*/
         // Date.length === 7
-        function Date(Y, M, D, h, m, s, ms) {
+        var DateShim = function Date(Y, M, D, h, m, s, ms) {
             var length = arguments.length;
+            var date;
             if (this instanceof NativeDate) {
-                var date = length === 1 && String(Y) === Y ? // isString(Y)
+                date = length === 1 && String(Y) === Y ? // isString(Y)
                     // We explicitly pass it through parse:
-                    new NativeDate(Date.parse(Y)) :
+                    new NativeDate(DateShim.parse(Y)) :
                     // We have to manually make calls depending on argument
                     // length here
                     length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
@@ -942,41 +963,40 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt
                     length >= 2 ? new NativeDate(Y, M) :
                     length >= 1 ? new NativeDate(Y) :
                                   new NativeDate();
-                // Prevent mixups with unfixed Date object
-                date.constructor = Date;
-                return date;
+            } else {
+                date = NativeDate.apply(this, arguments);
             }
-            return NativeDate.apply(this, arguments);
-        }
+            // Prevent mixups with unfixed Date object
+            defineProperties(date, { constructor: DateShim }, true);
+            return date;
+        };
 
         // 15.9.1.15 Date Time String Format.
-        var isoDateExpression = new RegExp("^" +
-            "(\\d{4}|[\+\-]\\d{6})" + // four-digit year capture or sign +
+        var isoDateExpression = new RegExp('^' +
+            '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
                                       // 6-digit extended year
-            "(?:-(\\d{2})" + // optional month capture
-            "(?:-(\\d{2})" + // optional day capture
-            "(?:" + // capture hours:minutes:seconds.milliseconds
-                "T(\\d{2})" + // hours capture
-                ":(\\d{2})" + // minutes capture
-                "(?:" + // optional :seconds.milliseconds
-                    ":(\\d{2})" + // seconds capture
-                    "(?:(\\.\\d{1,}))?" + // milliseconds capture
-                ")?" +
-            "(" + // capture UTC offset component
-                "Z|" + // UTC capture
-                "(?:" + // offset specifier +/-hours:minutes
-                    "([-+])" + // sign capture
-                    "(\\d{2})" + // hours offset capture
-                    ":(\\d{2})" + // minutes offset capture
-                ")" +
-            ")?)?)?)?" +
-        "$");
-
-        var months = [
-            0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
-        ];
-
-        function dayFromMonth(year, month) {
+            '(?:-(\\d{2})' + // optional month capture
+            '(?:-(\\d{2})' + // optional day capture
+            '(?:' + // capture hours:minutes:seconds.milliseconds
+                'T(\\d{2})' + // hours capture
+                ':(\\d{2})' + // minutes capture
+                '(?:' + // optional :seconds.milliseconds
+                    ':(\\d{2})' + // seconds capture
+                    '(?:(\\.\\d{1,}))?' + // milliseconds capture
+                ')?' +
+            '(' + // capture UTC offset component
+                'Z|' + // UTC capture
+                '(?:' + // offset specifier +/-hours:minutes
+                    '([-+])' + // sign capture
+                    '(\\d{2})' + // hours offset capture
+                    ':(\\d{2})' + // minutes offset capture
+                ')' +
+            ')?)?)?)?' +
+        '$');
+
+        var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+        var dayFromMonth = function dayFromMonth(year, month) {
             var t = month > 1 ? 1 : 0;
             return (
                 months[month] +
@@ -985,25 +1005,31 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt
                 Math.floor((year - 1601 + t) / 400) +
                 365 * (year - 1970)
             );
-        }
+        };
 
-        function toUTC(t) {
+        var toUTC = function toUTC(t) {
             return Number(new NativeDate(1970, 0, 1, 0, 0, 0, t));
-        }
+        };
 
         // Copy any custom methods a 3rd party library may have added
         for (var key in NativeDate) {
-            Date[key] = NativeDate[key];
+            if (owns(NativeDate, key)) {
+                DateShim[key] = NativeDate[key];
+            }
         }
 
         // Copy "native" methods explicitly; they may be non-enumerable
-        Date.now = NativeDate.now;
-        Date.UTC = NativeDate.UTC;
-        Date.prototype = NativeDate.prototype;
-        Date.prototype.constructor = Date;
+        defineProperties(DateShim, {
+            now: NativeDate.now,
+            UTC: NativeDate.UTC
+        }, true);
+        DateShim.prototype = NativeDate.prototype;
+        defineProperties(DateShim.prototype, {
+            constructor: DateShim
+        }, true);
 
         // Upgrade Date.parse to handle simplified ISO 8601 strings
-        Date.parse = function parse(string) {
+        DateShim.parse = function parse(string) {
             var match = isoDateExpression.exec(string);
             if (match) {
                 // parse months, days, hours, minutes, seconds, and milliseconds
@@ -1020,7 +1046,7 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt
                     // (ES 5.1 bug)
                     // see https://bugs.ecmascript.org/show_bug.cgi?id=112
                     isLocalTime = Boolean(match[4] && !match[8]),
-                    signOffset = match[9] === "-" ? 1 : -1,
+                    signOffset = match[9] === '-' ? 1 : -1,
                     hourOffset = Number(match[10] || 0),
                     minuteOffset = Number(match[11] || 0),
                     result;
@@ -1059,8 +1085,9 @@ if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExt
             return NativeDate.parse.apply(this, arguments);
         };
 
-        return Date;
-    })(Date);
+        return DateShim;
+    }(Date));
+    /*global Date: false */
 }
 
 // ES5 15.9.4.4
@@ -1071,7 +1098,6 @@ if (!Date.now) {
     };
 }
 
-
 //
 // Number
 // ======
@@ -1080,10 +1106,10 @@ if (!Date.now) {
 // ES5.1 15.7.4.5
 // http://es5.github.com/#x15.7.4.5
 var hasToFixedBugs = NumberPrototype.toFixed && (
-  (0.00008).toFixed(3) !== '0.000'
-  || (0.9).toFixed(0) !== '1'
-  || (1.255).toFixed(2) !== '1.25'
-  || (1000000000000000128).toFixed(0) !== "1000000000000000128"
+  (0.00008).toFixed(3) !== '0.000' ||
+  (0.9).toFixed(0) !== '1' ||
+  (1.255).toFixed(2) !== '1.25' ||
+  (1000000000000000128).toFixed(0) !== '1000000000000000128'
 );
 
 var toFixedHelpers = {
@@ -1092,10 +1118,11 @@ var toFixedHelpers = {
   data: [0, 0, 0, 0, 0, 0],
   multiply: function multiply(n, c) {
       var i = -1;
+      var c2 = c;
       while (++i < toFixedHelpers.size) {
-          c += n * toFixedHelpers.data[i];
-          toFixedHelpers.data[i] = c % toFixedHelpers.base;
-          c = Math.floor(c / toFixedHelpers.base);
+          c2 += n * toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+          c2 = Math.floor(c2 / toFixedHelpers.base);
       }
   },
   divide: function divide(n) {
@@ -1126,13 +1153,14 @@ var toFixedHelpers = {
   },
   log: function log(x) {
       var n = 0;
-      while (x >= 4096) {
+      var x2 = x;
+      while (x2 >= 4096) {
           n += 12;
-          x /= 4096;
+          x2 /= 4096;
       }
-      while (x >= 2) {
+      while (x2 >= 2) {
           n += 1;
-          x /= 2;
+          x2 /= 2;
       }
       return n;
   }
@@ -1147,14 +1175,14 @@ defineProperties(NumberPrototype, {
         f = f !== f ? 0 : Math.floor(f);
 
         if (f < 0 || f > 20) {
-            throw new RangeError("Number.toFixed called with invalid number of decimals");
+            throw new RangeError('Number.toFixed called with invalid number of decimals');
         }
 
         x = Number(this);
 
         // Test for NaN
         if (x !== x) {
-            return "NaN";
+            return 'NaN';
         }
 
         // If it is too big or small, return the string value of the number
@@ -1162,14 +1190,14 @@ defineProperties(NumberPrototype, {
             return String(x);
         }
 
-        s = "";
+        s = '';
 
         if (x < 0) {
-            s = "-";
+            s = '-';
             x = -x;
         }
 
-        m = "0";
+        m = '0';
 
         if (x > 1e-21) {
             // 1e-21 < x < 1e21
@@ -1225,7 +1253,6 @@ defineProperties(NumberPrototype, {
     }
 }, hasToFixedBugs);
 
-
 //
 // String
 // ======
@@ -1250,38 +1277,38 @@ var string_split = StringPrototype.split;
 if (
     'ab'.split(/(?:ab)*/).length !== 2 ||
     '.'.split(/(.?)(.?)/).length !== 4 ||
-    'tesst'.split(/(s)*/)[1] === "t" ||
+    'tesst'.split(/(s)*/)[1] === 't' ||
     'test'.split(/(?:)/, -1).length !== 4 ||
     ''.split(/.?/).length ||
     '.'.split(/()()/).length > 1
 ) {
     (function () {
-        var compliantExecNpcg = /()??/.exec("")[1] === void 0; // NPCG: nonparticipating capturing group
+        var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
 
         StringPrototype.split = function (separator, limit) {
             var string = this;
-            if (separator === void 0 && limit === 0) {
+            if (typeof separator === 'undefined' && limit === 0) {
                 return [];
             }
 
             // If `separator` is not a regex, use native split
-            if (_toString.call(separator) !== "[object RegExp]") {
+            if (!isRegex(separator)) {
                 return string_split.call(this, separator, limit);
             }
 
-            var output = [],
-                flags = (separator.ignoreCase ? "i" : "") +
-                        (separator.multiline  ? "m" : "") +
-                        (separator.extended   ? "x" : "") + // Proposed for ES6
-                        (separator.sticky     ? "y" : ""), // Firefox 3+
+            var output = [];
+            var flags = (separator.ignoreCase ? 'i' : '') +
+                        (separator.multiline ? 'm' : '') +
+                        (separator.extended ? 'x' : '') + // Proposed for ES6
+                        (separator.sticky ? 'y' : ''), // Firefox 3+
                 lastLastIndex = 0,
                 // Make `global` and avoid `lastIndex` issues by working with a copy
                 separator2, match, lastIndex, lastLength;
-            separator = new RegExp(separator.source, flags + "g");
-            string += ""; // Type-convert
+            var separatorCopy = new RegExp(separator.source, flags + 'g');
+            string += ''; // Type-convert
             if (!compliantExecNpcg) {
                 // Doesn't need flags gy, but they don't hurt
-                separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
+                separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
             }
             /* Values for `limit`, per the spec:
              * If undefined: 4294967295 // Math.pow(2, 32) - 1
@@ -1290,46 +1317,50 @@ if (
              * If negative number: 4294967296 - Math.floor(Math.abs(limit))
              * If other: Type-convert, then use the above rules
              */
-            limit = limit === void 0 ?
+            var splitLimit = typeof limit === 'undefined' ?
                 -1 >>> 0 : // Math.pow(2, 32) - 1
-                ToUint32(limit);
-            while (match = separator.exec(string)) {
-                // `separator.lastIndex` is not reliable cross-browser
+                ES.ToUint32(limit);
+            match = separatorCopy.exec(string);
+            while (match) {
+                // `separatorCopy.lastIndex` is not reliable cross-browser
                 lastIndex = match.index + match[0].length;
                 if (lastIndex > lastLastIndex) {
                     output.push(string.slice(lastLastIndex, match.index));
                     // Fix browsers whose `exec` methods don't consistently return `undefined` for
                     // nonparticipating capturing groups
                     if (!compliantExecNpcg && match.length > 1) {
+                        /*eslint-disable no-loop-func */
                         match[0].replace(separator2, function () {
                             for (var i = 1; i < arguments.length - 2; i++) {
-                                if (arguments[i] === void 0) {
+                                if (typeof arguments[i] === 'undefined') {
                                     match[i] = void 0;
                                 }
                             }
                         });
+                        /*eslint-enable no-loop-func */
                     }
                     if (match.length > 1 && match.index < string.length) {
-                        ArrayPrototype.push.apply(output, match.slice(1));
+                        array_push.apply(output, match.slice(1));
                     }
                     lastLength = match[0].length;
                     lastLastIndex = lastIndex;
-                    if (output.length >= limit) {
+                    if (output.length >= splitLimit) {
                         break;
                     }
                 }
-                if (separator.lastIndex === match.index) {
-                    separator.lastIndex++; // Avoid an infinite loop
+                if (separatorCopy.lastIndex === match.index) {
+                    separatorCopy.lastIndex++; // Avoid an infinite loop
                 }
+                match = separatorCopy.exec(string);
             }
             if (lastLastIndex === string.length) {
-                if (lastLength || !separator.test("")) {
-                    output.push("");
+                if (lastLength || !separatorCopy.test('')) {
+                    output.push('');
                 }
             } else {
                 output.push(string.slice(lastLastIndex));
             }
-            return output.length > limit ? output.slice(0, limit) : output;
+            return output.length > splitLimit ? output.slice(0, splitLimit) : output;
         };
     }());
 
@@ -1339,9 +1370,9 @@ if (
 // then the output array is truncated so that it contains no more than limit
 // elements.
 // "0".split(undefined, 0) -> []
-} else if ("0".split(void 0, 0).length) {
+} else if ('0'.split(void 0, 0).length) {
     StringPrototype.split = function split(separator, limit) {
-        if (separator === void 0 && limit === 0) { return []; }
+        if (typeof separator === 'undefined' && limit === 0) { return []; }
         return string_split.call(this, separator, limit);
     };
 }
@@ -1357,7 +1388,7 @@ var replaceReportsGroupsCorrectly = (function () {
 
 if (!replaceReportsGroupsCorrectly) {
     StringPrototype.replace = function replace(searchValue, replaceValue) {
-        var isFn = isFunction(replaceValue);
+        var isFn = isCallable(replaceValue);
         var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
         if (!isFn || !hasCapturingGroups) {
             return str_replace.call(this, searchValue, replaceValue);
@@ -1366,7 +1397,7 @@ if (!replaceReportsGroupsCorrectly) {
                 var length = arguments.length;
                 var originalLastIndex = searchValue.lastIndex;
                 searchValue.lastIndex = 0;
-                var args = searchValue.exec(match);
+                var args = searchValue.exec(match) || [];
                 searchValue.lastIndex = originalLastIndex;
                 args.push(arguments[length - 2], arguments[length - 1]);
                 return replaceValue.apply(this, args);
@@ -1382,48 +1413,47 @@ if (!replaceReportsGroupsCorrectly) {
 // normalized across all browsers
 // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
 var string_substr = StringPrototype.substr;
-var hasNegativeSubstrBug = "".substr && "0b".substr(-1) !== "b";
+var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
 defineProperties(StringPrototype, {
     substr: function substr(start, length) {
-        return string_substr.call(
-            this,
-            start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,
-            length
-        );
+        var normalizedStart = start;
+        if (start < 0) {
+            normalizedStart = Math.max(this.length + start, 0);
+        }
+        return string_substr.call(this, normalizedStart, length);
     }
 }, hasNegativeSubstrBug);
 
 // ES5 15.5.4.20
 // whitespace from: http://es5.github.io/#x15.5.4.20
-var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
-    "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
-    "\u2029\uFEFF";
+var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+    '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
+    '\u2029\uFEFF';
 var zeroWidth = '\u200b';
-var wsRegexChars = "[" + ws + "]";
-var trimBeginRegexp = new RegExp("^" + wsRegexChars + wsRegexChars + "*");
-var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + "*$");
+var wsRegexChars = '[' + ws + ']';
+var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
 var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
 defineProperties(StringPrototype, {
     // http://blog.stevenlevithan.com/archives/faster-trim-javascript
     // http://perfectionkills.com/whitespace-deviations/
     trim: function trim() {
-        if (this === void 0 || this === null) {
-            throw new TypeError("can't convert " + this + " to object");
+        if (typeof this === 'undefined' || this === null) {
+            throw new TypeError("can't convert " + this + ' to object');
         }
-        return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
+        return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
     }
 }, hasTrimWhitespaceBug);
 
 // ES-5 15.1.2.2
 if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+    /*global parseInt: true */
     parseInt = (function (origParseInt) {
         var hexRegex = /^0[xX]/;
-        return function parseIntES5(str, radix) {
-            str = String(str).trim();
-            if (!Number(radix)) {
-                radix = hexRegex.test(str) ? 16 : 10;
-            }
-            return origParseInt(str, radix);
+        return function parseInt(str, radix) {
+            var string = String(str).trim();
+            var defaultedRadix = Number(radix) || (hexRegex.test(string) ? 16 : 10);
+            return origParseInt(string, defaultedRadix);
         };
     }(parseInt));
 }
index 1560c7d..8257d85 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery Client v1.0.0
+ * jQuery Client v2.0.0
  * https://www.mediawiki.org/wiki/JQuery_Client
  *
  * Copyright 2010-2015 jquery-client maintainers and other contributors.
                                        version = match[1];
                                }
                        }
-                       // And IE 12's different lies about not being IE
+                       // And MS Edge's lies about being Chrome
+                       //
+                       // It's different enough from classic IE Trident engine that they do this
+                       // to avoid getting caught by MSIE-specific browser sniffing.
                        if ( name === 'chrome' && ( match = ua.match( /\bedge\/([0-9\.]*)/ ) ) ) {
-                               name = 'msie';
+                               name = 'edge';
                                version = match[1];
                                layout = 'edge';
                                layoutversion = parseInt( match[1], 10 );
index deb88ec..5838457 100644 (file)
@@ -1,6 +1,6 @@
 /*
     json2.js
-    2014-02-04
+    2015-05-03
 
     Public Domain.
 
@@ -17,7 +17,9 @@
 
 
     This file creates a global JSON object containing two methods: stringify
-    and parse.
+    and parse. This file is provides the ES5 JSON capability to ES3 systems.
+    If a project might run on IE8 or earlier, then this file should be included.
+    This file does nothing on ES5 systems.
 
         JSON.stringify(value, replacer, space)
             value       any JavaScript value, usually an object or array.
@@ -48,7 +50,9 @@
                 Date.prototype.toJSON = function (key) {
                     function f(n) {
                         // Format integers to have at least two digits.
-                        return n < 10 ? '0' + n : n;
+                        return n < 10 
+                            ? '0' + n 
+                            : n;
                     }
 
                     return this.getUTCFullYear()   + '-' +
@@ -94,8 +98,9 @@
             // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
 
             text = JSON.stringify([new Date()], function (key, value) {
-                return this[key] instanceof Date ?
-                    'Date(' + this[key] + ')' : value;
+                return this[key] instanceof Date 
+                    ? 'Date(' + this[key] + ')' 
+                    : value;
             });
             // text is '["Date(---current time---)"]'
 
     redistribute.
 */
 
-/*jslint evil: true, regexp: true */
+/*jslint 
+    eval, for, this 
+*/
 
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
-    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+/*property
+    JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
     getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
     lastIndex, length, parse, prototype, push, replace, slice, stringify,
     test, toJSON, toString, valueOf
@@ -165,10 +172,23 @@ if (typeof JSON !== 'object') {
 
 (function () {
     'use strict';
+    
+    var rx_one = /^[\],:{}\s]*$/,
+        rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+        rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+        rx_four = /(?:^|:|,)(?:\s*\[)+/g,
+        rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
 
     function f(n) {
         // Format integers to have at least two digits.
-        return n < 10 ? '0' + n : n;
+        return n < 10 
+            ? '0' + n 
+            : n;
+    }
+    
+    function this_value() {
+        return this.valueOf();
     }
 
     if (typeof Date.prototype.toJSON !== 'function') {
@@ -176,25 +196,21 @@ if (typeof JSON !== 'object') {
         Date.prototype.toJSON = function () {
 
             return isFinite(this.valueOf())
-                ? this.getUTCFullYear()     + '-' +
-                    f(this.getUTCMonth() + 1) + '-' +
-                    f(this.getUTCDate())      + 'T' +
-                    f(this.getUTCHours())     + ':' +
-                    f(this.getUTCMinutes())   + ':' +
-                    f(this.getUTCSeconds())   + 'Z'
+                ? this.getUTCFullYear() + '-' +
+                        f(this.getUTCMonth() + 1) + '-' +
+                        f(this.getUTCDate()) + 'T' +
+                        f(this.getUTCHours()) + ':' +
+                        f(this.getUTCMinutes()) + ':' +
+                        f(this.getUTCSeconds()) + 'Z'
                 : null;
         };
 
-        String.prototype.toJSON      =
-            Number.prototype.toJSON  =
-            Boolean.prototype.toJSON = function () {
-                return this.valueOf();
-            };
+        Boolean.prototype.toJSON = this_value;
+        Number.prototype.toJSON = this_value;
+        String.prototype.toJSON = this_value;
     }
 
-    var cx,
-        escapable,
-        gap,
+    var gap,
         indent,
         meta,
         rep;
@@ -207,13 +223,15 @@ if (typeof JSON !== 'object') {
 // Otherwise we must also replace the offending characters with safe escape
 // sequences.
 
-        escapable.lastIndex = 0;
-        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
-            var c = meta[a];
-            return typeof c === 'string'
-                ? c
-                : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-        }) + '"' : '"' + string + '"';
+        rx_escapable.lastIndex = 0;
+        return rx_escapable.test(string) 
+            ? '"' + string.replace(rx_escapable, function (a) {
+                var c = meta[a];
+                return typeof c === 'string'
+                    ? c
+                    : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+            }) + '"' 
+            : '"' + string + '"';
     }
 
 
@@ -253,7 +271,9 @@ if (typeof JSON !== 'object') {
 
 // JSON numbers must be finite. Encode non-finite numbers as null.
 
-            return isFinite(value) ? String(value) : 'null';
+            return isFinite(value) 
+                ? String(value) 
+                : 'null';
 
         case 'boolean':
         case 'null':
@@ -299,8 +319,8 @@ if (typeof JSON !== 'object') {
                 v = partial.length === 0
                     ? '[]'
                     : gap
-                    ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
-                    : '[' + partial.join(',') + ']';
+                        ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
+                        : '[' + partial.join(',') + ']';
                 gap = mind;
                 return v;
             }
@@ -314,7 +334,11 @@ if (typeof JSON !== 'object') {
                         k = rep[i];
                         v = str(k, value);
                         if (v) {
-                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                            partial.push(quote(k) + (
+                                gap 
+                                    ? ': ' 
+                                    : ':'
+                            ) + v);
                         }
                     }
                 }
@@ -326,7 +350,11 @@ if (typeof JSON !== 'object') {
                     if (Object.prototype.hasOwnProperty.call(value, k)) {
                         v = str(k, value);
                         if (v) {
-                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                            partial.push(quote(k) + (
+                                gap 
+                                    ? ': ' 
+                                    : ':'
+                            ) + v);
                         }
                     }
                 }
@@ -338,8 +366,8 @@ if (typeof JSON !== 'object') {
             v = partial.length === 0
                 ? '{}'
                 : gap
-                ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
-                : '{' + partial.join(',') + '}';
+                    ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
+                    : '{' + partial.join(',') + '}';
             gap = mind;
             return v;
         }
@@ -348,14 +376,13 @@ if (typeof JSON !== 'object') {
 // If the JSON object does not yet have a stringify method, give it one.
 
     if (typeof JSON.stringify !== 'function') {
-        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
         meta = {    // table of character substitutions
             '\b': '\\b',
             '\t': '\\t',
             '\n': '\\n',
             '\f': '\\f',
             '\r': '\\r',
-            '"' : '\\"',
+            '"': '\\"',
             '\\': '\\\\'
         };
         JSON.stringify = function (value, replacer, space) {
@@ -405,7 +432,6 @@ if (typeof JSON !== 'object') {
 // If the JSON object does not yet have a parse method, give it one.
 
     if (typeof JSON.parse !== 'function') {
-        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
         JSON.parse = function (text, reviver) {
 
 // The parse method takes a text and an optional reviver function, and returns
@@ -440,11 +466,11 @@ if (typeof JSON !== 'object') {
 // incorrectly, either silently deleting them, or treating them as line endings.
 
             text = String(text);
-            cx.lastIndex = 0;
-            if (cx.test(text)) {
-                text = text.replace(cx, function (a) {
+            rx_dangerous.lastIndex = 0;
+            if (rx_dangerous.test(text)) {
+                text = text.replace(rx_dangerous, function (a) {
                     return '\\u' +
-                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+                            ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                 });
             }
 
@@ -461,10 +487,14 @@ if (typeof JSON !== 'object') {
 // we look to see that the remaining characters are only whitespace or ']' or
 // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
 
-            if (/^[\],:{}\s]*$/
-                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
-                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
-                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+            if (
+                rx_one.test(
+                    text
+                        .replace(rx_two, '@')
+                        .replace(rx_three, ']')
+                        .replace(rx_four, '')
+                )
+            ) {
 
 // In the third stage we use the eval function to compile the text into a
 // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
index 058a149..493920d 100644 (file)
@@ -10,7 +10,8 @@
                        "زكريا",
                        "مشعل الحربي",
                        "ترجمان05",
-                       "Abanima"
+                       "Abanima",
+                       "محمد أحمد عبد الفتاح"
                ]
        },
        "ooui-outline-control-move-down": "انقل العنصر للأسفل",
@@ -24,5 +25,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/as.json b/resources/lib/oojs-ui/i18n/as.json
new file mode 100644 (file)
index 0000000..ae853dd
--- /dev/null
@@ -0,0 +1,16 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Gitartha.bordoloi"
+               ]
+       },
+       "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": "অব্যাহত ৰাখক"
+}
index c5475f8..4aeb490 100644 (file)
@@ -4,10 +4,13 @@
                        "EugeneZelenko",
                        "Wizardist",
                        "Чаховіч Уладзіслаў",
-                       "Zedlik"
+                       "Zedlik",
+                       "Red Winged Duck"
                ]
        },
-       "ooui-outline-control-move-down": "Перасунуць ніжэй",
-       "ooui-outline-control-move-up": "Перасунуць вышэй",
-       "ooui-toolbar-more": "Болей"
+       "ooui-outline-control-move-down": "Перасунуць элемэнт ніжэй",
+       "ooui-outline-control-move-up": "Перасунуць элемэнт вышэй",
+       "ooui-toolbar-more": "Болей",
+       "ooui-toolgroup-expand": "Болей",
+       "ooui-toolgroup-collapse": "Меней"
 }
index 1db9aed..0d86aa6 100644 (file)
@@ -25,5 +25,7 @@
        "ooui-dialog-process-error": "Něco se pokazilo",
        "ooui-dialog-process-dismiss": "Zavřít",
        "ooui-dialog-process-retry": "Zkusit znovu",
-       "ooui-dialog-process-continue": "Pokračovat"
+       "ooui-dialog-process-continue": "Pokračovat",
+       "ooui-selectfile-not-supported": "Výběr souboru není podporován",
+       "ooui-selectfile-placeholder": "Nebyl vybrán žádný soubor"
 }
index 15624fd..d5649b0 100644 (file)
@@ -24,5 +24,7 @@
        "ooui-dialog-process-error": "Etwas ist schief gelaufen",
        "ooui-dialog-process-dismiss": "Ausblenden",
        "ooui-dialog-process-retry": "Erneut versuchen",
-       "ooui-dialog-process-continue": "Fortfahren"
+       "ooui-dialog-process-continue": "Fortfahren",
+       "ooui-selectfile-not-supported": "Die Dateiauswahl wird nicht unterstützt",
+       "ooui-selectfile-placeholder": "Keine Datei ausgewählt"
 }
index 1db3fd8..9812ec6 100644 (file)
@@ -27,5 +27,8 @@
        "ooui-dialog-process-error": "Something went wrong",
        "ooui-dialog-process-dismiss": "Dismiss",
        "ooui-dialog-process-retry": "Try again",
-       "ooui-dialog-process-continue": "Continue"
+       "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-not-supported": "File selection is not supported",
+       "ooui-selectfile-placeholder": "No file is selected",
+       "ooui-semicolon-separator": "; "
 }
index 8d9714c..0f705ad 100644 (file)
@@ -9,5 +9,13 @@
        },
        "ooui-outline-control-move-down": "Movi eron suben",
        "ooui-outline-control-move-up": "Movi eron supren",
-       "ooui-toolbar-more": "Pli"
+       "ooui-outline-control-remove": "Forigi eron",
+       "ooui-toolbar-more": "Pli",
+       "ooui-toolgroup-expand": "Pli",
+       "ooui-toolgroup-collapse": "Mapli",
+       "ooui-dialog-message-accept": "Bone",
+       "ooui-dialog-message-reject": "Nuligi",
+       "ooui-dialog-process-error": "Io rompiĝis",
+       "ooui-dialog-process-retry": "Reprovi",
+       "ooui-dialog-process-continue": "Daŭrigi"
 }
index 915791e..e5a8e45 100644 (file)
@@ -29,5 +29,7 @@
        "ooui-dialog-process-error": "Algo salió mal",
        "ooui-dialog-process-dismiss": "Descartar",
        "ooui-dialog-process-retry": "Intentar de nuevo",
-       "ooui-dialog-process-continue": "Continuar"
+       "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-not-supported": "No se admite la selección de archivos",
+       "ooui-selectfile-placeholder": "Ningún archivo seleccionado"
 }
index e947582..fe6e997 100644 (file)
@@ -4,17 +4,21 @@
                        "An13sa",
                        "Unai Fdz. de Betoño",
                        "Xabier Armendaritz",
-                       "Subi"
+                       "Subi",
+                       "Sator"
                ]
        },
        "ooui-outline-control-move-down": "Mugitu itema beherantz",
        "ooui-outline-control-move-up": "Mugitu itema gorantz",
+       "ooui-outline-control-remove": "Elementua kendu",
        "ooui-toolbar-more": "Gehiago",
        "ooui-toolgroup-expand": "Gehiago",
        "ooui-toolgroup-collapse": "Gutxiago",
        "ooui-dialog-message-accept": "Ados",
        "ooui-dialog-message-reject": "Utzi",
        "ooui-dialog-process-error": "Zerbaitek huts egin du",
+       "ooui-dialog-process-dismiss": "Utzi",
        "ooui-dialog-process-retry": "Saiatu berriro",
-       "ooui-dialog-process-continue": "Jarraitu"
+       "ooui-dialog-process-continue": "Jarraitu",
+       "ooui-selectfile-placeholder": "Ez da fitxategirik hautatu"
 }
index 7cfcfa2..62198f4 100644 (file)
@@ -11,7 +11,8 @@
                        "Taha",
                        "درفش کاویانی",
                        "Armin1392",
-                       "Alirezaaa"
+                       "Alirezaaa",
+                       "Leyth"
                ]
        },
        "ooui-outline-control-move-down": "انتقال مورد به پایین",
@@ -25,5 +26,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 3fb4110..d00254c 100644 (file)
@@ -27,5 +27,7 @@
        "ooui-dialog-process-error": "Jokin meni pieleen",
        "ooui-dialog-process-dismiss": "Hylkää",
        "ooui-dialog-process-retry": "Yritä uudelleen",
-       "ooui-dialog-process-continue": "Jatka"
+       "ooui-dialog-process-continue": "Jatka",
+       "ooui-selectfile-not-supported": "Tiedoston valitsemista ei tueta",
+       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu"
 }
index 9144cb0..ae671cb 100644 (file)
@@ -41,5 +41,7 @@
        "ooui-dialog-process-error": "Quelque chose a mal tourné",
        "ooui-dialog-process-dismiss": "Rejeter",
        "ooui-dialog-process-retry": "Réessayez",
-       "ooui-dialog-process-continue": "Continuer"
+       "ooui-dialog-process-continue": "Continuer",
+       "ooui-selectfile-not-supported": "La sélection de fichier n’est pas prise en charge",
+       "ooui-selectfile-placeholder": "Aucun fichier sélectionné"
 }
index a4339f4..1283c53 100644 (file)
@@ -18,5 +18,7 @@
        "ooui-dialog-process-error": "Algo foi mal",
        "ooui-dialog-process-dismiss": "Agochar",
        "ooui-dialog-process-retry": "Inténteo de novo",
-       "ooui-dialog-process-continue": "Continuar"
+       "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-not-supported": "Non está soportada a selección de ficheiros",
+       "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro"
 }
index 2d8315b..3f02e19 100644 (file)
@@ -3,15 +3,18 @@
                "authors": [
                        "Ashok modhvadia",
                        "KartikMistry",
-                       "The Discoverer"
+                       "The Discoverer",
+                       "NehalDaveND"
                ]
        },
        "ooui-outline-control-move-down": "વસ્તુ નીચે ખસેડો",
        "ooui-outline-control-move-up": "વસ્તુ ઉપર ખસેડો",
        "ooui-outline-control-remove": "વસ્તુ હટાવો",
        "ooui-toolbar-more": "વધુ",
+       "ooui-toolgroup-expand": "વધુ",
        "ooui-dialog-message-accept": "બરાબર",
        "ooui-dialog-message-reject": "રદ કરો",
        "ooui-dialog-process-error": "કંઇક ગરબડ થઇ",
-       "ooui-dialog-process-retry": "ફરી પ્રયત્ન કરો"
+       "ooui-dialog-process-retry": "ફરી પ્રયત્ન કરો",
+       "ooui-dialog-process-continue": "ચાલુ રાખો"
 }
index cadc416..de67665 100644 (file)
@@ -26,5 +26,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/hrx.json b/resources/lib/oojs-ui/i18n/hrx.json
new file mode 100644 (file)
index 0000000..1534af7
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Midnight Gambler"
+               ]
+       },
+       "ooui-toolbar-more": "Meahr",
+       "ooui-toolgroup-expand": "Meahr",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Abbreche",
+       "ooui-dialog-process-dismiss": "Ausblenne"
+}
index d50e62d..f0fae3c 100644 (file)
@@ -19,5 +19,6 @@
        "ooui-dialog-message-reject": "Mégse",
        "ooui-dialog-process-dismiss": "Elrejt",
        "ooui-dialog-process-retry": "Próbáld újra",
-       "ooui-dialog-process-continue": "Folytatás"
+       "ooui-dialog-process-continue": "Folytatás",
+       "ooui-selectfile-placeholder": "Nincs fájl kiválasztva"
 }
index b37beae..287c86d 100644 (file)
@@ -15,5 +15,7 @@
        "ooui-dialog-process-error": "Adda madi a napasamak",
        "ooui-dialog-process-dismiss": "Pugsayen",
        "ooui-dialog-process-retry": "Padasen manen",
-       "ooui-dialog-process-continue": "Agtuloy"
+       "ooui-dialog-process-continue": "Agtuloy",
+       "ooui-selectfile-not-supported": "Saan a masuportaran ti panagpili ti papeles",
+       "ooui-selectfile-placeholder": "Awan ti napili a papeles"
 }
index 0ff8af8..387d736 100644 (file)
@@ -12,7 +12,8 @@
                        "Minerva Titani",
                        "Raoli",
                        "Una giornata uggiosa '94",
-                       "Ontsed"
+                       "Ontsed",
+                       "Alexmar983"
                ]
        },
        "ooui-outline-control-move-down": "Sposta in basso",
@@ -26,5 +27,7 @@
        "ooui-dialog-process-error": "Qualcosa è andato storto",
        "ooui-dialog-process-dismiss": "Nascondi",
        "ooui-dialog-process-retry": "Riprova",
-       "ooui-dialog-process-continue": "Continua"
+       "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-not-supported": "La selezione del file non è supportata",
+       "ooui-selectfile-placeholder": "Nessun file è selezionato"
 }
index ef92e49..bc3cf0b 100644 (file)
@@ -15,5 +15,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 c975e82..792b6fc 100644 (file)
@@ -15,5 +15,7 @@
        "ooui-dialog-process-error": "Öhnsjädd es scheif jejange",
        "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-dialog-process-continue": "Wigger maache",
+       "ooui-selectfile-not-supported": "Mer ogerschtözze et Datteij_Ußwähle nit.",
+       "ooui-selectfile-placeholder": "Kein Dattei es ußjewählt"
 }
index be9a8ab..94b4687 100644 (file)
@@ -1,13 +1,16 @@
 {
        "@metadata": {
                "authors": [
-                       "George Animal"
+                       "George Animal",
+                       "Bikarhêner"
                ]
        },
+       "ooui-toolbar-more": "Bêhtir",
        "ooui-toolgroup-expand": "Bêhtir",
        "ooui-toolgroup-collapse": "Kêmtir",
        "ooui-dialog-message-accept": "Baş e",
        "ooui-dialog-message-reject": "Betal bike",
        "ooui-dialog-process-retry": "Dîsa hewl bide",
-       "ooui-dialog-process-continue": "Bidomîne"
+       "ooui-dialog-process-continue": "Bidomîne",
+       "ooui-selectfile-placeholder": "Ti dosye nehatiye hilbijartin"
 }
index 119d1be..79bb469 100644 (file)
@@ -21,5 +21,6 @@
        "ooui-dialog-process-error": "Et ass eppes schif gaang",
        "ooui-dialog-process-dismiss": "Verwerfen",
        "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
-       "ooui-dialog-process-continue": "Virufueren"
+       "ooui-dialog-process-continue": "Virufueren",
+       "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht"
 }
index ecd06a8..4334efb 100644 (file)
@@ -3,8 +3,22 @@
                "authors": [
                        "Audriusa",
                        "Eitvys200",
-                       "Mantak111"
+                       "Mantak111",
+                       "Albertas"
                ]
        },
-       "ooui-outline-control-remove": "Šalinti elementus"
+       "ooui-outline-control-move-down": "Perkelti elementą žemyn",
+       "ooui-outline-control-move-up": "Perkelti elementą aukštyn",
+       "ooui-outline-control-remove": "Šalinti elementus",
+       "ooui-toolbar-more": "Daugiau",
+       "ooui-toolgroup-expand": "Daugiau",
+       "ooui-toolgroup-collapse": "Mažiau",
+       "ooui-dialog-message-accept": "Gerai",
+       "ooui-dialog-message-reject": "Atšaukti",
+       "ooui-dialog-process-error": "Kažkas nutiko ne taip",
+       "ooui-dialog-process-dismiss": "Paslėpti",
+       "ooui-dialog-process-retry": "Bandykite dar kartą",
+       "ooui-dialog-process-continue": "Tęsti",
+       "ooui-selectfile-not-supported": "Failų pasirinkimas nepalaikomas",
+       "ooui-selectfile-placeholder": "Nėra pasirinktų failų"
 }
diff --git a/resources/lib/oojs-ui/i18n/luz.json b/resources/lib/oojs-ui/i18n/luz.json
new file mode 100644 (file)
index 0000000..d48a9df
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@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-error": "یه چیایی اشتباه ویده",
+       "ooui-dialog-process-dismiss": "منفصل کردن",
+       "ooui-dialog-process-retry": "دوباره تلاش کردن",
+       "ooui-dialog-process-continue": "ادامه دائن",
+       "ooui-selectfile-not-supported": "فایل انتخابی پشتیبانی نوابیه",
+       "ooui-selectfile-placeholder": "فایلی انتخاب نوابیه"
+}
index 7962336..53e5bf4 100644 (file)
@@ -17,5 +17,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 7006190..6bc94f1 100644 (file)
@@ -6,10 +6,16 @@
                        "Praju23",
                        "V.narsikar",
                        "Ydyashad",
-                       "संतोष दहिवळ"
+                       "संतोष दहिवळ",
+                       "NehalDaveND"
                ]
        },
        "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
        "ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा",
-       "ooui-toolbar-more": "अधिक"
+       "ooui-toolbar-more": "अधिक",
+       "ooui-toolgroup-expand": "अधिक",
+       "ooui-dialog-message-accept": "ठिक आहे",
+       "ooui-dialog-message-reject": "रद्द करा",
+       "ooui-dialog-process-dismiss": "रद्द करा",
+       "ooui-dialog-process-continue": "चालू ठेवा"
 }
index 823d493..2be1122 100644 (file)
        "ooui-outline-control-move-up": "Alihkan perkara ke atas",
        "ooui-outline-control-remove": "Buang perkara",
        "ooui-toolbar-more": "Selebihnya",
+       "ooui-toolgroup-expand": "Selengkapnya",
+       "ooui-toolgroup-collapse": "Secukupnya",
+       "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Batal",
        "ooui-dialog-process-error": "Ada masalah",
        "ooui-dialog-process-dismiss": "Singkir",
-       "ooui-dialog-process-retry": "Cuba lagi"
+       "ooui-dialog-process-retry": "Cuba lagi",
+       "ooui-dialog-process-continue": "Teruskan"
 }
index 9166037..9c07f41 100644 (file)
@@ -3,8 +3,22 @@
                "authors": [
                        "Chelin",
                        "Chrisportelli",
-                       "PiRSquared17"
+                       "PiRSquared17",
+                       "C.R."
                ]
        },
-       "ooui-toolbar-more": "Atro"
+       "ooui-outline-control-move-down": "Mòve abbascio",
+       "ooui-outline-control-move-up": "Mòve ncoppa",
+       "ooui-outline-control-remove": "Leva elemento",
+       "ooui-toolbar-more": "Atro",
+       "ooui-toolgroup-expand": "Cchiù",
+       "ooui-toolgroup-collapse": "Meno",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Scancella",
+       "ooui-dialog-process-error": "Cocchosa è ghiuta malamente",
+       "ooui-dialog-process-dismiss": "Passa 'a vacca",
+       "ooui-dialog-process-retry": "Prova n'ata vota",
+       "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-not-supported": "Filtro 'e selezione nun suppurtato",
+       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file"
 }
index 9e77392..9e2d8f2 100644 (file)
@@ -21,5 +21,6 @@
        "ooui-dialog-process-error": "Noe gikk galt",
        "ooui-dialog-process-dismiss": "Lukk",
        "ooui-dialog-process-retry": "Prøv igjen",
-       "ooui-dialog-process-continue": "Fortsett"
+       "ooui-dialog-process-continue": "Fortsett",
+       "ooui-selectfile-placeholder": "Ingen fil er valgt"
 }
index 7c7b176..8eba859 100644 (file)
@@ -31,5 +31,6 @@
        "ooui-dialog-process-error": "Er is iets misgegaan",
        "ooui-dialog-process-dismiss": "Sluiten",
        "ooui-dialog-process-retry": "Opnieuw proberen",
-       "ooui-dialog-process-continue": "Doorgaan"
+       "ooui-dialog-process-continue": "Doorgaan",
+       "ooui-selectfile-placeholder": "Er is geen bestand geselecteerd"
 }
index 8c7a1e7..0661b3f 100644 (file)
@@ -12,7 +12,7 @@
        "ooui-outline-control-move-up": "ਉੱਤੇ ਲੈਕੇ ਜਾਓ",
        "ooui-toolbar-more": "ਹੋਰ",
        "ooui-toolgroup-expand": "ਹੋਰ",
-       "ooui-toolgroup-collapse": "ਥੋੜੇ",
+       "ooui-toolgroup-collapse": "ਥà©\8bà©\9cà©\8dਹà©\87",
        "ooui-dialog-message-accept": "ਠੀਕ ਹੈ",
        "ooui-dialog-message-reject": "ਰੱਦ ਕਰੋ",
        "ooui-dialog-process-error": "ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ",
index fbd0c8c..3023479 100644 (file)
@@ -30,5 +30,6 @@
        "ooui-dialog-process-error": "Coś poszło nie tak",
        "ooui-dialog-process-dismiss": "Ukryj",
        "ooui-dialog-process-retry": "Spróbuj ponownie",
-       "ooui-dialog-process-continue": "Kontynuuj"
+       "ooui-dialog-process-continue": "Kontynuuj",
+       "ooui-selectfile-placeholder": "Nie wybrano pliku"
 }
index ebffe53..c371bbc 100644 (file)
@@ -14,5 +14,8 @@
        "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 7b3176f..aab0aed 100644 (file)
@@ -24,5 +24,7 @@
        "ooui-dialog-process-error": "Algo correu mal",
        "ooui-dialog-process-dismiss": "Ignorar",
        "ooui-dialog-process-retry": "Tentar novamente",
-       "ooui-dialog-process-continue": "Continuar"
+       "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-not-supported": "A seleção de ficheiros não é suportada",
+       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado"
 }
index c1b794a..bef65ed 100644 (file)
@@ -31,5 +31,8 @@
        "ooui-dialog-process-error": "Title for process dialog error description",
        "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-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-semicolon-separator": "{{optional}} Semicolon used as a separator"
 }
index 258f3e7..970a602 100644 (file)
@@ -19,5 +19,7 @@
        "ooui-dialog-process-error": "Ceva nu a funcționat",
        "ooui-dialog-process-dismiss": "Renunțare",
        "ooui-dialog-process-retry": "Reîncearcă",
-       "ooui-dialog-process-continue": "Continuă"
+       "ooui-dialog-process-continue": "Continuă",
+       "ooui-selectfile-not-supported": "Selecția de fișiere nu este acceptată",
+       "ooui-selectfile-placeholder": "Niciun fișier selectat"
 }
index f6f422a..42005fe 100644 (file)
@@ -15,5 +15,7 @@
        "ooui-dialog-process-error": "Quacche cose ha sciute stuèrte",
        "ooui-dialog-process-dismiss": "Scitte",
        "ooui-dialog-process-retry": "Pruève arrete",
-       "ooui-dialog-process-continue": "Condinue"
+       "ooui-dialog-process-continue": "Condinue",
+       "ooui-selectfile-not-supported": "'U scacchiamende d'u file non g'è supportate",
+       "ooui-selectfile-placeholder": "Nisciune file scacchiate"
 }
index 129dd6a..f5674b3 100644 (file)
@@ -30,5 +30,6 @@
        "ooui-dialog-process-error": "Что-то пошло не так",
        "ooui-dialog-process-dismiss": "Закрыть",
        "ooui-dialog-process-retry": "Попробовать ещё раз",
-       "ooui-dialog-process-continue": "Продолжить"
+       "ooui-dialog-process-continue": "Продолжить",
+       "ooui-selectfile-not-supported": "Выбор файла не поддерживается"
 }
diff --git a/resources/lib/oojs-ui/i18n/sa.json b/resources/lib/oojs-ui/i18n/sa.json
new file mode 100644 (file)
index 0000000..49f038c
--- /dev/null
@@ -0,0 +1,14 @@
+{
+       "@metadata": {
+               "authors": [
+                       "NehalDaveND"
+               ]
+       },
+       "ooui-outline-control-remove": "वस्तु निष्कास्यताम्",
+       "ooui-toolbar-more": "अधिकम्",
+       "ooui-toolgroup-expand": "अधिकम्",
+       "ooui-dialog-message-accept": "अस्तु",
+       "ooui-dialog-message-reject": "निरस्यताम्",
+       "ooui-dialog-process-retry": "पुनः चेष्ट्यताम्",
+       "ooui-dialog-process-continue": "निरन्तरम्"
+}
index d499427..c2422ba 100644 (file)
@@ -25,5 +25,6 @@
        "ooui-dialog-process-error": "Något gick fel",
        "ooui-dialog-process-dismiss": "Stäng",
        "ooui-dialog-process-retry": "Försök igen",
-       "ooui-dialog-process-continue": "Fortsätt"
+       "ooui-dialog-process-continue": "Fortsätt",
+       "ooui-selectfile-placeholder": "Ingen fil är vald"
 }
index d486870..957b0d0 100644 (file)
@@ -9,5 +9,14 @@
                        "Visdaviva",
                        "மதனாஹரன்"
                ]
-       }
+       },
+       "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": "కొనసాగించు"
 }
diff --git a/resources/lib/oojs-ui/i18n/xmf.json b/resources/lib/oojs-ui/i18n/xmf.json
new file mode 100644 (file)
index 0000000..f5bfa2c
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "David1010"
+               ]
+       },
+       "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": "გაგრძელება"
+}
index a850fce..f206a72 100644 (file)
        "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 81ad9a9..7d4e710 100644 (file)
@@ -1,16 +1,22 @@
 {
        "@metadata": {
                "authors": [
-                       "Deryck Chan"
+                       "Deryck Chan",
+                       "William915",
+                       "Shinjiman"
                ]
        },
        "ooui-outline-control-move-down": "向下搬",
        "ooui-outline-control-move-up": "向上搬",
        "ooui-outline-control-remove": "拎走",
-       "ooui-toolbar-more": "仲有...",
+       "ooui-toolbar-more": "仲有",
+       "ooui-toolgroup-expand": "更多",
        "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 ed2f61e..7247d93 100644 (file)
@@ -30,5 +30,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 3fd8d36..3f59200 100644 (file)
@@ -14,7 +14,8 @@
                        "Spring Roll Conan",
                        "Waihorace",
                        "Cwlin0416",
-                       "LNDDYL"
+                       "LNDDYL",
+                       "Shangkuanlc"
                ]
        },
        "ooui-outline-control-move-down": "項目下移",
@@ -28,5 +29,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 fad3c28..0c670e1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.3
+ * OOjs UI v0.11.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-05-12T12:15:44Z
+ * Date: 2015-07-08T01:31:46Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin-left: 0.25em;
 }
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button {
+       padding-left: 0.25em;
+       color: #333333;
+}
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button:focus {
+       color: #000000;
+}
 .oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #087ecc;
 }
        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:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
        background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(to bottom, #ffffff 0%, #dddddd 100%);
 }
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
        background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
        background-image:    -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-       background-image:     -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
        background-image:      -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-       background-image:         linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:         linear-gradient(to bottom, #dddddd 0%, #ffffff 100%);
 }
 .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        margin-left: -0.5em;
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
        background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
        background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
        background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(to bottom, #eaf4fa 0%, #b0d9ee 100%);
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
        background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
        background-image:    -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-       background-image:     -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
        background-image:      -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-       background-image:         linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:         linear-gradient(to bottom, #b0d9ee 0%, #eaf4fa 100%);
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
        border: 1px solid #b8d892;
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
        background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
        background-image:    -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-       background-image:     -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
        background-image:      -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-       background-image:         linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+       background-image:         linear-gradient(to bottom, #f0fbe1 0%, #c3e59a 100%);
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
        background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
        background-image:    -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-       background-image:     -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
        background-image:      -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-       background-image:         linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+       background-image:         linear-gradient(to bottom, #c3e59a 0%, #f0fbe1 100%);
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
        color: #d45353;
 .oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        color: #cccccc;
 }
-.oo-ui-actionFieldLayout-field {
-       display: table;
-       table-layout: fixed;
-       width: 100%;
-}
 .oo-ui-actionFieldLayout-input,
 .oo-ui-actionFieldLayout-button {
        display: table-cell;
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
        background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
        background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
        background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(to bottom, #f1f7fb 0%, #ffffff 100%);
 }
 .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);
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
        background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
        background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
        background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(to bottom, #f1f7fb 0%, #ffffff 100%);
 }
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
        top: 2.5em;
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
        background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
        background-image:    -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-       background-image:     -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
        background-image:      -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-       background-image:         linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+       background-image:         linear-gradient(to bottom, #f1f7fb 0%, #ffffff 100%);
 }
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
        border-top-color: rgba(0, 0, 0, 0.1);
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
        background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
        background-image:    -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-       background-image:     -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
        background-image:      -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-       background-image:         linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
+       background-image:         linear-gradient(to bottom, #ffffff 0%, #f1f7fb 100%);
 }
 .oo-ui-toolbar-bar .oo-ui-toolbar-bar {
        border: none;
        background: none;
 }
-.oo-ui-toolbar-actions > .oo-ui-buttonElement {
+.oo-ui-toolbar-actions > .oo-ui-buttonElement-framed,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement-framed:last-child {
        margin-top: 0.4em;
        margin-bottom: 0.4em;
-}
-.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child {
        margin-right: 0.5em;
 }
+.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless.oo-ui-labelElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement {
+       margin: 0;
+}
+.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;
+}
+.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;
+}
 .oo-ui-toolbar-shadow {
        background-image: /* @embed */ url(themes/apex/images/toolbar-shadow.png);
        bottom: -9px;
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
        background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
        background-image:    -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-       background-image:     -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
        background-image:      -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
-       background-image:         linear-gradient(top, #dddddd 0%, #ffffff 100%);
+       background-image:         linear-gradient(to bottom, #dddddd 0%, #ffffff 100%);
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
        cursor: default;
        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:     -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
        background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
-       background-image:         linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(to bottom, #ffffff 0%, #dddddd 100%);
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
        background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
        background-image:    -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-       background-image:     -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
        background-image:      -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-       background-image:         linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+       background-image:         linear-gradient(to bottom, #b0d9ee 0%, #eaf4fa 100%);
 }
 .oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
        opacity: 1;
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
        background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
        background-image:    -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-       background-image:     -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
        background-image:      -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-       background-image:         linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+       background-image:         linear-gradient(to bottom, #eaf4fa 0%, #b0d9ee 100%);
 }
 .oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
        -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
        display: inline-block;
        vertical-align: middle;
 }
+.oo-ui-buttonInputWidget > button,
+.oo-ui-buttonInputWidget > input {
+       border: 0;
+       padding: 0;
+       background-color: transparent;
+}
 .oo-ui-dropdownInputWidget {
        position: relative;
        vertical-align: middle;
                box-sizing: border-box;
 }
 .oo-ui-dropdownInputWidget select {
+       background: #ffffff;
        height: 2.5em;
        padding: 0.5em;
        font-size: inherit;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
+.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout {
+       margin-bottom: 0;
+}
 .oo-ui-textInputWidget {
        position: relative;
        vertical-align: middle;
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
        padding: 0.5em;
+       line-height: 1.275em;
        font-size: inherit;
        font-family: inherit;
        background-color: #ffffff;
 .oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
        margin-right: 2em;
 }
+.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-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-handle > input[type="file"] {
+       position: absolute;
+       margin: 0;
+       top: 0;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       width: 100%;
+       height: 100%;
+       opacity: 0;
+       z-index: 1;
+       cursor: pointer;
+}
+.oo-ui-selectFileWidget-handle > .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 {
+       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-empty .oo-ui-selectFileWidget-clearButton,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
+       display: none;
+}
+.oo-ui-selectFileWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-selectFileWidget-handle {
+       height: 2.5em;
+       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 {
+       right: 0;
+}
+.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+       left: 0.25em;
+}
+.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
+       line-height: 2.5em;
+       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;
+}
+.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+       top: 0;
+       width: 1.875em;
+       height: 1.875em;
+       margin: 0.3em;
+}
+.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+       top: 0;
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.775em;
+}
+.oo-ui-selectFileWidget-handle > .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 {
+       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 {
+       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-selectFileWidget-handle {
+       padding-right: 3em;
+}
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .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-handle .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-indicatorElement .oo-ui-selectFileWidget-handle,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
+       padding-right: 2em;
+}
 .oo-ui-outlineOptionWidget {
        position: relative;
        cursor: pointer;
        padding: 1em;
        line-height: 0;
 }
+.oo-ui-numberInputWidget {
+       display: inline-block;
+       position: relative;
+       max-width: 50em;
+}
+.oo-ui-numberInputWidget-field {
+       display: table;
+       table-layout: fixed;
+       width: 100%;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget,
+.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget {
+       display: table-cell;
+       vertical-align: middle;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget {
+       width: 100%;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget {
+       white-space: nowrap;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button {
+       box-sizing: border-box;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget,
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button {
+       margin: 0;
+       width: 2.5em;
+}
+.oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+       border-top-right-radius: 0;
+       border-bottom-right-radius: 0;
+       border-right-width: 0;
+}
+.oo-ui-numberInputWidget-plusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+       border-top-left-radius: 0;
+       border-bottom-left-radius: 0;
+       border-left-width: 0;
+}
+.oo-ui-numberInputWidget .oo-ui-textInputWidget input {
+       border-radius: 0;
+}
 .oo-ui-window {
        background-color: transparent;
        background-image: none;
 }
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
        border-right: 1px solid #e5e5e5;
+       margin: 0;
 }
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
        border-right-width: 0;
 }
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
        border-bottom: 1px solid #e5e5e5;
+       margin: 0;
 }
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
        border-bottom-width: 0;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget {
        height: 3.4em;
+       margin-right: 0;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:last-child {
+       margin-right: 0;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        text-align: center;
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-       margin: 0.75em 0 0.75em 0.75em;
+       margin: 0.75em;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
        padding: 0 1em;
        vertical-align: middle;
+       /* Adjust for border so text aligns with title */
+       margin: -1px;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless {
+       margin: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button {
+       padding: 0.75em 1em;
+       vertical-align: middle;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
        background-color: rgba(0, 0, 0, 0.1);
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-       margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       /* Adjust for border so text aligns with title */
-       margin: -1px;
-}
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
        background-color: rgba(8, 126, 204, 0.05);
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
        background-color: rgba(212, 83, 83, 0.1);
 }
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement {
+       margin-right: 0;
+}
 .oo-ui-processDialog > .oo-ui-window-frame {
        min-height: 5em;
 }
index d997f8c..6a12aa1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.3
+ * OOjs UI v0.11.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-05-12T12:15:37Z
+ * Date: 2015-07-08T01:31:38Z
  */
 /**
  * @class
@@ -16,7 +16,7 @@
  */
 OO.ui.ApexTheme = function OoUiApexTheme() {
        // Parent constructor
-       OO.ui.ApexTheme.super.call( this );
+       OO.ui.ApexTheme.parent.call( this );
 };
 
 /* Setup */
index 12e80c1..3153746 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.3
+ * OOjs UI v0.11.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-05-12T12:15:44Z
+ * Date: 2015-07-08T01:31:46Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
        margin-left: 0.25em;
        margin-right: 0.25em;
 }
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button {
+       padding-left: 0.25em;
+       padding-right: 0.25em;
+       color: #333333;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #555555;
 }
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #444444;
 }
 .oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        color: #cccccc;
 }
-.oo-ui-actionFieldLayout-field {
-       display: table;
-       table-layout: fixed;
-       width: 100%;
-}
 .oo-ui-actionFieldLayout-input,
 .oo-ui-actionFieldLayout-button {
        display: table-cell;
        background: none;
        box-shadow: none;
 }
-.oo-ui-toolbar-actions > .oo-ui-buttonElement {
-       margin-top: 0.25em;
-       margin-bottom: 0.25em;
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement {
+       margin: 0;
 }
-.oo-ui-toolbar-actions > .oo-ui-toolbar,
-.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child {
-       margin-right: 0.5em;
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button {
+       border: 0;
+       border-radius: 0;
+       margin: 0;
+       padding: 1.0546875em 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;
 }
 .oo-ui-optionWidget {
        position: relative;
        display: inline-block;
        vertical-align: middle;
 }
+.oo-ui-buttonInputWidget > button,
+.oo-ui-buttonInputWidget > input {
+       border: 0;
+       padding: 0;
+       background-color: transparent;
+}
 .oo-ui-checkboxInputWidget {
        position: relative;
        line-height: 1.6em;
                box-sizing: border-box;
 }
 .oo-ui-dropdownInputWidget select {
-       height: 2.5em;
-       padding: 0.5em;
+       background: #ffffff;
+       height: 2.275em;
        font-size: inherit;
        font-family: inherit;
        -webkit-box-sizing: border-box;
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png");
 }
+.oo-ui-radioSelectInputWidget .oo-ui-fieldLayout {
+       margin-bottom: 0;
+}
 .oo-ui-textInputWidget {
        position: relative;
        vertical-align: middle;
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
        padding: 0.5em;
+       line-height: 1.275em;
        margin: 0;
        font-size: inherit;
        font-family: inherit;
        margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
+       background: #ffffff;
        margin-right: 0.5em;
 }
 .oo-ui-dropdownWidget-handle {
        margin-right: 0;
 }
 .oo-ui-dropdownWidget-handle {
-       height: 2.5em;
+       padding: 0.5em 0;
        border: 1px solid #cccccc;
        border-radius: 0.1em;
 }
        left: 0.25em;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-       line-height: 2.5em;
+       line-height: 1.275em;
        margin: 0 1em;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
 .oo-ui-dropdownWidget .oo-ui-selectWidget {
        border-top-color: #ffffff;
 }
+.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-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-handle > input[type="file"] {
+       position: absolute;
+       margin: 0;
+       top: 0;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       width: 100%;
+       height: 100%;
+       opacity: 0;
+       z-index: 1;
+       cursor: pointer;
+}
+.oo-ui-selectFileWidget-handle > .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 {
+       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-empty .oo-ui-selectFileWidget-clearButton,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
+       display: none;
+}
+.oo-ui-selectFileWidget:last-child {
+       margin-right: 0;
+}
+.oo-ui-selectFileWidget-handle {
+       height: 2.5em;
+       border: 1px solid #cccccc;
+       border-radius: 0.1em;
+       padding: 0 1em;
+       background: #ffffff;
+}
+.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+       right: 0;
+}
+.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+       left: 0.25em;
+}
+.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
+       line-height: 2.5em;
+       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;
+}
+.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+       top: 0;
+       width: 1.875em;
+       height: 1.875em;
+       margin: 0.3em;
+}
+.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+       top: 0;
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.775em;
+}
+.oo-ui-selectFileWidget-handle > .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 {
+       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 {
+       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-selectFileWidget-handle {
+       padding-right: 3em;
+}
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .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-handle .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-indicatorElement .oo-ui-selectFileWidget-handle,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
+       padding-right: 2em;
+}
 .oo-ui-outlineOptionWidget {
        position: relative;
        cursor: pointer;
        padding: 1em;
        line-height: 0;
 }
+.oo-ui-numberInputWidget {
+       display: inline-block;
+       position: relative;
+       max-width: 50em;
+}
+.oo-ui-numberInputWidget-field {
+       display: table;
+       table-layout: fixed;
+       width: 100%;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget,
+.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget {
+       display: table-cell;
+       vertical-align: middle;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-textInputWidget {
+       width: 100%;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget {
+       white-space: nowrap;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button {
+       box-sizing: border-box;
+}
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget,
+.oo-ui-numberInputWidget-field > .oo-ui-buttonWidget > .oo-ui-buttonElement-button {
+       margin: 0;
+       width: 2.5em;
+}
+.oo-ui-numberInputWidget-minusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+       border-top-right-radius: 0;
+       border-bottom-right-radius: 0;
+       border-right-width: 0;
+}
+.oo-ui-numberInputWidget-plusButton.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+       border-top-left-radius: 0;
+       border-bottom-left-radius: 0;
+       border-left-width: 0;
+}
+.oo-ui-numberInputWidget .oo-ui-textInputWidget input {
+       border-radius: 0;
+}
 .oo-ui-window {
        background: transparent;
 }
 }
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
        border-right: 1px solid #e5e5e5;
+       margin: 0;
 }
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
        border-right-width: 0;
 }
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
        border-bottom: 1px solid #e5e5e5;
+       margin: 0;
 }
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
        border-bottom-width: 0;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget {
        height: 3.4em;
+       margin-right: 0;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:last-child {
+       margin-right: 0;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
        text-align: center;
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-       margin: 0.75em 0 0.75em 0.75em;
+       margin: 0.75em;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
        padding: 0 1em;
        vertical-align: middle;
+       /* Adjust for border so text aligns with title */
+       margin: -1px;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless {
+       margin: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-frameless .oo-ui-buttonElement-button {
+       padding: 0.75em 1em;
+       vertical-align: middle;
 }
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
        background-color: rgba(0, 0, 0, 0.1);
 }
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-       margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       /* Adjust for border so text aligns with title */
-       margin: -1px;
-}
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
        background-color: rgba(8, 126, 204, 0.05);
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
        background-color: rgba(212, 83, 83, 0.1);
 }
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement {
+       margin-right: 0;
+}
 .oo-ui-processDialog > .oo-ui-window-frame {
        min-height: 5em;
 }
index eaca1f1..48de83f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.3
+ * OOjs UI v0.11.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-05-12T12:15:37Z
+ * Date: 2015-07-08T01:31:38Z
  */
 /**
  * @class
@@ -16,7 +16,7 @@
  */
 OO.ui.MediaWikiTheme = function OoUiMediaWikiTheme() {
        // Parent constructor
-       OO.ui.MediaWikiTheme.super.call( this );
+       OO.ui.MediaWikiTheme.parent.call( this );
 };
 
 /* Setup */
@@ -39,12 +39,15 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
                        destructive: false
                },
                // Parent method
-               classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element ),
+               classes = OO.ui.MediaWikiTheme.parent.prototype.getElementClasses.call( this, element ),
                isFramed;
 
        if ( element.supports( [ 'hasFlag' ] ) ) {
                isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
-               if ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) {
+               if (
+                       ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) ||
+                       ( !isFramed && element.hasFlag( 'primary' ) )
+               ) {
                        variants.invert = true;
                } else {
                        variants.progressive = element.hasFlag( 'progressive' );
index 9692d5c..b67289b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.3
+ * OOjs UI v0.11.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-05-12T12:15:37Z
+ * Date: 2015-07-08T01:31:38Z
  */
 ( function ( OO ) {
 
@@ -44,6 +44,21 @@ OO.ui.Keys = {
        SPACE: 32
 };
 
+/**
+ * @property {Number}
+ */
+OO.ui.elementId = 0;
+
+/**
+ * Generate a unique ID for element
+ *
+ * @return {String} [id]
+ */
+OO.ui.generateElementId = function () {
+       OO.ui.elementId += 1;
+       return 'oojsui-' + OO.ui.elementId;
+};
+
 /**
  * Check if an element is focusable.
  * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
@@ -230,7 +245,13 @@ OO.ui.infuse = function ( idOrNode ) {
                // Label for process dialog retry action button, visible when describing only recoverable errors
                'ooui-dialog-process-retry': 'Try again',
                // Label for process dialog retry action button, visible when describing only warnings
-               'ooui-dialog-process-continue': 'Continue'
+               'ooui-dialog-process-continue': 'Continue',
+               // Default placeholder for file selection widgets
+               'ooui-selectfile-not-supported': 'File selection is not supported',
+               // Default placeholder for file selection widgets
+               'ooui-selectfile-placeholder': 'No file is selected',
+               // Semicolon separator
+               'ooui-semicolon-separator': '; '
        };
 
        /**
@@ -299,8 +320,72 @@ OO.ui.infuse = function ( idOrNode ) {
 
 } )();
 
+/*!
+ * Mixin namespace.
+ */
+
+/**
+ * Namespace for OOjs UI mixins.
+ *
+ * Mixins are named according to the type of object they are intended to
+ * be mixed in to.  For example, OO.ui.mixin.GroupElement is intended to be
+ * mixed in to an instance of OO.ui.Element, and OO.ui.mixin.GroupWidget
+ * is intended to be mixed in to an instance of OO.ui.Widget.
+ *
+ * @class
+ * @singleton
+ */
+OO.ui.mixin = {};
+
 /**
- * Element that can be marked as pending.
+ * PendingElement is a mixin that is used to create elements that notify users that something is happening
+ * and that they should wait before proceeding. The pending state is visually represented with a pending
+ * texture that appears in the head of a pending {@link OO.ui.ProcessDialog process dialog} or in the input
+ * field of a {@link OO.ui.TextInputWidget text input widget}.
+ *
+ * Currently, {@link OO.ui.ActionWidget Action widgets}, which mix in this class, can also be marked as pending, but only when
+ * used in {@link OO.ui.MessageDialog message dialogs}. The behavior is not currently supported for action widgets used
+ * in process dialogs.
+ *
+ *     @example
+ *     function MessageDialog( config ) {
+ *         MessageDialog.parent.call( this, config );
+ *     }
+ *     OO.inheritClass( MessageDialog, OO.ui.MessageDialog );
+ *
+ *     MessageDialog.static.actions = [
+ *         { action: 'save', label: 'Done', flags: 'primary' },
+ *         { label: 'Cancel', flags: 'safe' }
+ *     ];
+ *
+ *     MessageDialog.prototype.initialize = function () {
+ *         MessageDialog.parent.prototype.initialize.apply( this, arguments );
+ *         this.content = new OO.ui.PanelLayout( { $: this.$, padded: true } );
+ *         this.content.$element.append( '<p>Click the \'Done\' action widget to see its pending state. Note that action widgets can be marked pending in message dialogs but not process dialogs.</p>' );
+ *         this.$body.append( this.content.$element );
+ *     };
+ *     MessageDialog.prototype.getBodyHeight = function () {
+ *         return 100;
+ *     }
+ *     MessageDialog.prototype.getActionProcess = function ( action ) {
+ *         var dialog = this;
+ *         if ( action === 'save' ) {
+ *             dialog.getActions().get({actions: 'save'})[0].pushPending();
+ *             return new OO.ui.Process()
+ *             .next( 1000 )
+ *             .next( function () {
+ *                 dialog.getActions().get({actions: 'save'})[0].popPending();
+ *             } );
+ *         }
+ *         return MessageDialog.parent.prototype.getActionProcess.call( this, action );
+ *     };
+ *
+ *     var windowManager = new OO.ui.WindowManager();
+ *     $( 'body' ).append( windowManager.$element );
+ *
+ *     var dialog = new MessageDialog();
+ *     windowManager.addWindows( [ dialog ] );
+ *     windowManager.openWindow( dialog );
  *
  * @abstract
  * @class
@@ -309,7 +394,7 @@ OO.ui.infuse = function ( idOrNode ) {
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$pending] Element to mark as pending, defaults to this.$element
  */
-OO.ui.PendingElement = function OoUiPendingElement( config ) {
+OO.ui.mixin.PendingElement = function OoUiMixinPendingElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -323,7 +408,7 @@ OO.ui.PendingElement = function OoUiPendingElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.PendingElement );
+OO.initClass( OO.ui.mixin.PendingElement );
 
 /* Methods */
 
@@ -332,7 +417,7 @@ OO.initClass( OO.ui.PendingElement );
  *
  * @param {jQuery} $pending The element to set to pending.
  */
-OO.ui.PendingElement.prototype.setPendingElement = function ( $pending ) {
+OO.ui.mixin.PendingElement.prototype.setPendingElement = function ( $pending ) {
        if ( this.$pending ) {
                this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
        }
@@ -344,20 +429,21 @@ OO.ui.PendingElement.prototype.setPendingElement = function ( $pending ) {
 };
 
 /**
- * Check if input is pending.
+ * Check if an element is pending.
  *
- * @return {boolean}
+ * @return {boolean} Element is pending
  */
-OO.ui.PendingElement.prototype.isPending = function () {
+OO.ui.mixin.PendingElement.prototype.isPending = function () {
        return !!this.pending;
 };
 
 /**
- * Increase the pending stack.
+ * Increase the pending counter. The pending state will remain active until the counter is zero
+ * (i.e., the number of calls to #pushPending and #popPending is the same).
  *
  * @chainable
  */
-OO.ui.PendingElement.prototype.pushPending = function () {
+OO.ui.mixin.PendingElement.prototype.pushPending = function () {
        if ( this.pending === 0 ) {
                this.$pending.addClass( 'oo-ui-pendingElement-pending' );
                this.updateThemeClasses();
@@ -368,13 +454,12 @@ OO.ui.PendingElement.prototype.pushPending = function () {
 };
 
 /**
- * Reduce the pending stack.
- *
- * Clamped at zero.
+ * Decrease the pending counter. The pending state will remain active until the counter is zero
+ * (i.e., the number of calls to #pushPending and #popPending is the same).
  *
  * @chainable
  */
-OO.ui.PendingElement.prototype.popPending = function () {
+OO.ui.mixin.PendingElement.prototype.popPending = function () {
        if ( this.pending === 1 ) {
                this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
                this.updateThemeClasses();
@@ -399,7 +484,7 @@ OO.ui.PendingElement.prototype.popPending = function () {
  *     @example
  *     // Example: An action set used in a process dialog
  *     function MyProcessDialog( config ) {
- *         MyProcessDialog.super.call( this, config );
+ *         MyProcessDialog.parent.call( this, config );
  *     }
  *     OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
  *     MyProcessDialog.static.title = 'An action set in a process dialog';
@@ -412,7 +497,7 @@ OO.ui.PendingElement.prototype.popPending = function () {
  *     ];
  *
  *     MyProcessDialog.prototype.initialize = function () {
- *         MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ *         MyProcessDialog.parent.prototype.initialize.apply( this, arguments );
  *         this.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
  *         this.panel1.$element.append( '<p>This dialog uses an action set (continue, help, cancel, back) configured with modes. This is edit mode. Click \'help\' to see help mode.</p>' );
  *         this.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
@@ -423,7 +508,7 @@ OO.ui.PendingElement.prototype.popPending = function () {
  *         this.$body.append( this.stackLayout.$element );
  *     };
  *     MyProcessDialog.prototype.getSetupProcess = function ( data ) {
- *         return MyProcessDialog.super.prototype.getSetupProcess.call( this, data )
+ *         return MyProcessDialog.parent.prototype.getSetupProcess.call( this, data )
  *             .next( function () {
  *                 this.actions.setMode( 'edit' );
  *             }, this );
@@ -441,7 +526,7 @@ OO.ui.PendingElement.prototype.popPending = function () {
  *                 dialog.close();
  *             } );
  *         }
- *         return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ *         return MyProcessDialog.parent.prototype.getActionProcess.call( this, action );
  *     };
  *     MyProcessDialog.prototype.getBodyHeight = function () {
  *         return this.panel1.$element.outerHeight( true );
@@ -1351,11 +1436,12 @@ OO.ui.Element.static.getRootScrollableElement = function ( el ) {
  */
 OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) {
        var i, val,
-               props = [ 'overflow' ],
+               // props = [ 'overflow' ] doesn't work due to https://bugzilla.mozilla.org/show_bug.cgi?id=889091
+               props = [ 'overflow-x', 'overflow-y' ],
                $parent = $( el ).parent();
 
        if ( dimension === 'x' || dimension === 'y' ) {
-               props.push( 'overflow-' + dimension );
+               props = [ 'overflow-' + dimension ];
        }
 
        while ( $parent.length ) {
@@ -1458,7 +1544,10 @@ OO.ui.Element.static.scrollIntoView = function ( el, config ) {
  * @param {HTMLElement} el Element to reconsider the scrollbars on
  */
 OO.ui.Element.static.reconsiderScrollbars = function ( el ) {
-       var i, len, nodes = [];
+       var i, len, scrollLeft, scrollTop, nodes = [];
+       // Save scroll position
+       scrollLeft = el.scrollLeft;
+       scrollTop = el.scrollTop;
        // Detach all children
        while ( el.firstChild ) {
                nodes.push( el.firstChild );
@@ -1470,6 +1559,9 @@ OO.ui.Element.static.reconsiderScrollbars = function ( el ) {
        for ( i = 0, len = nodes.length; i < len; i++ ) {
                el.appendChild( nodes[ i ] );
        }
+       // Restore scroll position (no-op if scrollbars disappeared)
+       el.scrollLeft = scrollLeft;
+       el.scrollTop = scrollTop;
 };
 
 /* Methods */
@@ -1612,7 +1704,7 @@ OO.ui.Element.prototype.getClosestScrollableElementContainer = function () {
 /**
  * Get group element is in.
  *
- * @return {OO.ui.GroupElement|null} Group element, null if none
+ * @return {OO.ui.mixin.GroupElement|null} Group element, null if none
  */
 OO.ui.Element.prototype.getElementGroup = function () {
        return this.elementGroup;
@@ -1621,7 +1713,7 @@ OO.ui.Element.prototype.getElementGroup = function () {
 /**
  * Set group element is in.
  *
- * @param {OO.ui.GroupElement|null} group Group element, null if none
+ * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none
  * @chainable
  */
 OO.ui.Element.prototype.setElementGroup = function ( group ) {
@@ -1658,7 +1750,7 @@ OO.ui.Layout = function OoUiLayout( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.Layout.super.call( this, config );
+       OO.ui.Layout.parent.call( this, config );
 
        // Mixin constructors
        OO.EventEmitter.call( this );
@@ -1692,7 +1784,7 @@ OO.ui.Widget = function OoUiWidget( config ) {
        config = $.extend( { disabled: false }, config );
 
        // Parent constructor
-       OO.ui.Widget.super.call( this, config );
+       OO.ui.Widget.parent.call( this, config );
 
        // Mixin constructors
        OO.EventEmitter.call( this );
@@ -1711,6 +1803,19 @@ OO.ui.Widget = function OoUiWidget( config ) {
 OO.inheritClass( OO.ui.Widget, OO.ui.Element );
 OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
 
+/* Static Properties */
+
+/**
+ * Whether this widget will behave reasonably when wrapped in a HTML `<label>`. If this is true,
+ * wrappers such as OO.ui.FieldLayout may use a `<label>` instead of implementing own label click
+ * handling.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.Widget.static.supportsSimpleLabel = false;
+
 /* Events */
 
 /**
@@ -1825,7 +1930,7 @@ OO.ui.Window = function OoUiWindow( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.Window.super.call( this, config );
+       OO.ui.Window.parent.call( this, config );
 
        // Mixin constructors
        OO.EventEmitter.call( this );
@@ -2414,11 +2519,11 @@ OO.ui.Window.prototype.teardown = function ( data ) {
  *     @example
  *     // A simple dialog window.
  *     function MyDialog( config ) {
- *         MyDialog.super.call( this, config );
+ *         MyDialog.parent.call( this, config );
  *     }
  *     OO.inheritClass( MyDialog, OO.ui.Dialog );
  *     MyDialog.prototype.initialize = function () {
- *         MyDialog.super.prototype.initialize.call( this );
+ *         MyDialog.parent.prototype.initialize.call( this );
  *         this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
  *         this.content.$element.append( '<p>A simple dialog window. Press \'Esc\' to close.</p>' );
  *         this.$body.append( this.content.$element );
@@ -2441,17 +2546,17 @@ OO.ui.Window.prototype.teardown = function ( data ) {
  * @abstract
  * @class
  * @extends OO.ui.Window
- * @mixins OO.ui.PendingElement
+ * @mixins OO.ui.mixin.PendingElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.Dialog = function OoUiDialog( config ) {
        // Parent constructor
-       OO.ui.Dialog.super.call( this, config );
+       OO.ui.Dialog.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.PendingElement.call( this );
+       OO.ui.mixin.PendingElement.call( this );
 
        // Properties
        this.actions = new OO.ui.ActionSet();
@@ -2475,7 +2580,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.Dialog, OO.ui.Window );
-OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
+OO.mixinClass( OO.ui.Dialog, OO.ui.mixin.PendingElement );
 
 /* Static Properties */
 
@@ -2497,7 +2602,7 @@ OO.ui.Dialog.static.name = '';
 /**
  * The dialog title.
  *
- * The title can be specified as a plaintext string, a {@link OO.ui.LabelElement Label} node, or a function
+ * The title can be specified as a plaintext string, a {@link OO.ui.mixin.LabelElement Label} node, or a function
  * that will produce a Label node or string. The title can also be specified with data passed to the
  * constructor (see #getSetupProcess). In this case, the static value will be overriden.
  *
@@ -2626,7 +2731,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
        data = data || {};
 
        // Parent method
-       return OO.ui.Dialog.super.prototype.getSetupProcess.call( this, data )
+       return OO.ui.Dialog.parent.prototype.getSetupProcess.call( this, data )
                .next( function () {
                        var config = this.constructor.static,
                                actions = data.actions !== undefined ? data.actions : config.actions;
@@ -2647,7 +2752,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
  */
 OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
        // Parent method
-       return OO.ui.Dialog.super.prototype.getTeardownProcess.call( this, data )
+       return OO.ui.Dialog.parent.prototype.getTeardownProcess.call( this, data )
                .first( function () {
                        if ( this.constructor.static.escapable ) {
                                this.$document.off( 'keydown', this.onDocumentKeyDownHandler );
@@ -2663,13 +2768,18 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
  */
 OO.ui.Dialog.prototype.initialize = function () {
        // Parent method
-       OO.ui.Dialog.super.prototype.initialize.call( this );
+       OO.ui.Dialog.parent.prototype.initialize.call( this );
+
+       var titleId = OO.ui.generateElementId();
 
        // Properties
-       this.title = new OO.ui.LabelWidget();
+       this.title = new OO.ui.LabelWidget( {
+               id: titleId
+       } );
 
        // Initialization
        this.$content.addClass( 'oo-ui-dialog-content' );
+       this.$element.attr( 'aria-labelledby', titleId );
        this.setPendingElement( this.$head );
 };
 
@@ -2789,7 +2899,7 @@ OO.ui.WindowManager = function OoUiWindowManager( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.WindowManager.super.call( this, config );
+       OO.ui.WindowManager.parent.call( this, config );
 
        // Mixin constructors
        OO.EventEmitter.call( this );
@@ -3694,7 +3804,13 @@ OO.ui.Process.prototype.next = function ( step, context ) {
 };
 
 /**
- * Factory for tools.
+ * A ToolFactory creates tools on demand. All tools ({@link OO.ui.Tool Tools}, {@link OO.ui.PopupTool PopupTools},
+ * and {@link OO.ui.ToolGroupTool ToolGroupTools}) must be registered with a tool factory. Tools are
+ * registered by their symbolic name. See {@link OO.ui.Toolbar toolbars} for an example.
+ *
+ * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  *
  * @class
  * @extends OO.Factory
@@ -3702,7 +3818,7 @@ OO.ui.Process.prototype.next = function ( step, context ) {
  */
 OO.ui.ToolFactory = function OoUiToolFactory() {
        // Parent constructor
-       OO.ui.ToolFactory.super.call( this );
+       OO.ui.ToolFactory.parent.call( this );
 };
 
 /* Setup */
@@ -3815,8 +3931,19 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
 };
 
 /**
- * Factory for tool groups.
+ * ToolGroupFactories create {@link OO.ui.ToolGroup toolgroups} on demand. The toolgroup classes must
+ * specify a symbolic name and be registered with the factory. The following classes are registered by
+ * default:
  *
+ * - {@link OO.ui.BarToolGroup BarToolGroups} (‘bar’)
+ * - {@link OO.ui.MenuToolGroup MenuToolGroups} (‘menu’)
+ * - {@link OO.ui.ListToolGroup ListToolGroups} (‘list’)
+ *
+ * See {@link OO.ui.Toolbar toolbars} for an example.
+ *
+ * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  * @class
  * @extends OO.Factory
  * @constructor
@@ -3841,7 +3968,7 @@ OO.inheritClass( OO.ui.ToolGroupFactory, OO.Factory );
 /* Static Methods */
 
 /**
- * Get a default set of classes to be registered on construction
+ * Get a default set of classes to be registered on construction.
  *
  * @return {Function[]} Default classes
  */
@@ -3940,7 +4067,7 @@ OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
  *  order (e.g., 1 for the first focusable element). Use 0 to use the default navigation order; use -1
  *  to remove the element from the tab-navigation flow.
  */
-OO.ui.TabIndexedElement = function OoUiTabIndexedElement( config ) {
+OO.ui.mixin.TabIndexedElement = function OoUiMixinTabIndexedElement( config ) {
        // Configuration initialization
        config = $.extend( { tabIndex: 0 }, config );
 
@@ -3949,7 +4076,7 @@ OO.ui.TabIndexedElement = function OoUiTabIndexedElement( config ) {
        this.tabIndex = null;
 
        // Events
-       this.connect( this, { disable: 'onDisable' } );
+       this.connect( this, { disable: 'onTabIndexedElementDisable' } );
 
        // Initialization
        this.setTabIndex( config.tabIndex );
@@ -3958,7 +4085,7 @@ OO.ui.TabIndexedElement = function OoUiTabIndexedElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.TabIndexedElement );
+OO.initClass( OO.ui.mixin.TabIndexedElement );
 
 /* Methods */
 
@@ -3972,7 +4099,7 @@ OO.initClass( OO.ui.TabIndexedElement );
  * @param {jQuery} $tabIndexed Element that should use the tabindex functionality
  * @chainable
  */
-OO.ui.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {
+OO.ui.mixin.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {
        var tabIndex = this.tabIndex;
        // Remove attributes from old $tabIndexed
        this.setTabIndex( null );
@@ -3988,7 +4115,7 @@ OO.ui.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed
  * @param {number|null} tabIndex Tabindex value, or `null` for no tabindex
  * @chainable
  */
-OO.ui.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {
+OO.ui.mixin.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {
        tabIndex = typeof tabIndex === 'number' ? tabIndex : null;
 
        if ( this.tabIndex !== tabIndex ) {
@@ -4006,7 +4133,7 @@ OO.ui.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {
  * @private
  * @chainable
  */
-OO.ui.TabIndexedElement.prototype.updateTabIndex = function () {
+OO.ui.mixin.TabIndexedElement.prototype.updateTabIndex = function () {
        if ( this.$tabIndexed ) {
                if ( this.tabIndex !== null ) {
                        // Do not index over disabled elements
@@ -4028,7 +4155,7 @@ OO.ui.TabIndexedElement.prototype.updateTabIndex = function () {
  * @private
  * @param {boolean} disabled Element is disabled
  */
-OO.ui.TabIndexedElement.prototype.onDisable = function () {
+OO.ui.mixin.TabIndexedElement.prototype.onTabIndexedElementDisable = function () {
        this.updateTabIndex();
 };
 
@@ -4037,7 +4164,7 @@ OO.ui.TabIndexedElement.prototype.onDisable = function () {
  *
  * @return {number|null} Tabindex value
  */
-OO.ui.TabIndexedElement.prototype.getTabIndex = function () {
+OO.ui.mixin.TabIndexedElement.prototype.getTabIndex = function () {
        return this.tabIndex;
 };
 
@@ -4057,7 +4184,7 @@ OO.ui.TabIndexedElement.prototype.getTabIndex = function () {
  * @cfg {boolean} [framed=true] Render the button with a frame
  * @cfg {string} [accessKey] Button's access key
  */
-OO.ui.ButtonElement = function OoUiButtonElement( config ) {
+OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -4082,7 +4209,7 @@ OO.ui.ButtonElement = function OoUiButtonElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.ButtonElement );
+OO.initClass( OO.ui.mixin.ButtonElement );
 
 /* Static Properties */
 
@@ -4090,7 +4217,7 @@ OO.initClass( OO.ui.ButtonElement );
  * Cancel mouse down events.
  *
  * This property is usually set to `true` to prevent the focus from changing when the button is clicked.
- * Classes such as {@link OO.ui.DraggableElement DraggableElement} and {@link OO.ui.ButtonOptionWidget ButtonOptionWidget}
+ * Classes such as {@link OO.ui.mixin.DraggableElement DraggableElement} and {@link OO.ui.ButtonOptionWidget ButtonOptionWidget}
  * use a value of `false` so that dragging behavior is possible and mousedown events can be handled by a
  * parent widget.
  *
@@ -4098,7 +4225,7 @@ OO.initClass( OO.ui.ButtonElement );
  * @inheritable
  * @property {boolean}
  */
-OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
+OO.ui.mixin.ButtonElement.static.cancelButtonMouseDownEvents = true;
 
 /* Events */
 
@@ -4119,7 +4246,7 @@ OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
  *
  * @param {jQuery} $button Element to use as button
  */
-OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
+OO.ui.mixin.ButtonElement.prototype.setButtonElement = function ( $button ) {
        if ( this.$button ) {
                this.$button
                        .removeClass( 'oo-ui-buttonElement-button' )
@@ -4149,7 +4276,7 @@ OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
  * @protected
  * @param {jQuery.Event} e Mouse down event
  */
-OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
+OO.ui.mixin.ButtonElement.prototype.onMouseDown = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return;
        }
@@ -4169,7 +4296,7 @@ OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
  * @protected
  * @param {jQuery.Event} e Mouse up event
  */
-OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
+OO.ui.mixin.ButtonElement.prototype.onMouseUp = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return;
        }
@@ -4185,7 +4312,7 @@ OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
  * @param {jQuery.Event} e Mouse click event
  * @fires click
  */
-OO.ui.ButtonElement.prototype.onClick = function ( e ) {
+OO.ui.mixin.ButtonElement.prototype.onClick = function ( e ) {
        if ( !this.isDisabled() && e.which === 1 ) {
                if ( this.emit( 'click' ) ) {
                        return false;
@@ -4199,7 +4326,7 @@ OO.ui.ButtonElement.prototype.onClick = function ( e ) {
  * @protected
  * @param {jQuery.Event} e Key down event
  */
-OO.ui.ButtonElement.prototype.onKeyDown = function ( e ) {
+OO.ui.mixin.ButtonElement.prototype.onKeyDown = function ( e ) {
        if ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {
                return;
        }
@@ -4215,7 +4342,7 @@ OO.ui.ButtonElement.prototype.onKeyDown = function ( e ) {
  * @protected
  * @param {jQuery.Event} e Key up event
  */
-OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
+OO.ui.mixin.ButtonElement.prototype.onKeyUp = function ( e ) {
        if ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {
                return;
        }
@@ -4231,7 +4358,7 @@ OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
  * @param {jQuery.Event} e Key press event
  * @fires click
  */
-OO.ui.ButtonElement.prototype.onKeyPress = function ( e ) {
+OO.ui.mixin.ButtonElement.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
                if ( this.emit( 'click' ) ) {
                        return false;
@@ -4244,7 +4371,7 @@ OO.ui.ButtonElement.prototype.onKeyPress = function ( e ) {
  *
  * @return {boolean} Button is framed
  */
-OO.ui.ButtonElement.prototype.isFramed = function () {
+OO.ui.mixin.ButtonElement.prototype.isFramed = function () {
        return this.framed;
 };
 
@@ -4254,7 +4381,7 @@ OO.ui.ButtonElement.prototype.isFramed = function () {
  * @param {boolean} [framed] Make button framed, omit to toggle
  * @chainable
  */
-OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
+OO.ui.mixin.ButtonElement.prototype.toggleFramed = function ( framed ) {
        framed = framed === undefined ? !this.framed : !!framed;
        if ( framed !== this.framed ) {
                this.framed = framed;
@@ -4273,7 +4400,7 @@ OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
  * @param {string} accessKey Button's access key, use empty string to remove
  * @chainable
  */
-OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
+OO.ui.mixin.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
        accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
 
        if ( this.accessKey !== accessKey ) {
@@ -4300,7 +4427,7 @@ OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
  * @param {boolean} [value] Make button active
  * @chainable
  */
-OO.ui.ButtonElement.prototype.setActive = function ( value ) {
+OO.ui.mixin.ButtonElement.prototype.setActive = function ( value ) {
        this.$element.toggleClass( 'oo-ui-buttonElement-active', !!value );
        return this;
 };
@@ -4321,7 +4448,7 @@ OO.ui.ButtonElement.prototype.setActive = function ( value ) {
  * @cfg {jQuery} [$group] The container element created by the class. If this configuration
  *  is omitted, the group element will use a generated `<div>`.
  */
-OO.ui.GroupElement = function OoUiGroupElement( config ) {
+OO.ui.mixin.GroupElement = function OoUiMixinGroupElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -4343,7 +4470,7 @@ OO.ui.GroupElement = function OoUiGroupElement( config ) {
  *
  * @param {jQuery} $group Element to use as group
  */
-OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
+OO.ui.mixin.GroupElement.prototype.setGroupElement = function ( $group ) {
        var i, len;
 
        this.$group = $group;
@@ -4357,7 +4484,7 @@ OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
  *
  * @return {boolean} Group is empty
  */
-OO.ui.GroupElement.prototype.isEmpty = function () {
+OO.ui.mixin.GroupElement.prototype.isEmpty = function () {
        return !this.items.length;
 };
 
@@ -4370,7 +4497,7 @@ OO.ui.GroupElement.prototype.isEmpty = function () {
  *
  * @return {OO.ui.Element[]} An array of items.
  */
-OO.ui.GroupElement.prototype.getItems = function () {
+OO.ui.mixin.GroupElement.prototype.getItems = function () {
        return this.items.slice( 0 );
 };
 
@@ -4383,7 +4510,7 @@ OO.ui.GroupElement.prototype.getItems = function () {
  * @param {Object} data Item data to search for
  * @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists
  */
-OO.ui.GroupElement.prototype.getItemFromData = function ( data ) {
+OO.ui.mixin.GroupElement.prototype.getItemFromData = function ( data ) {
        var i, len, item,
                hash = OO.getHash( data );
 
@@ -4405,7 +4532,7 @@ OO.ui.GroupElement.prototype.getItemFromData = function ( data ) {
  * @param {Object} data Item data to search for
  * @return {OO.ui.Element[]} Items with equivalent data
  */
-OO.ui.GroupElement.prototype.getItemsFromData = function ( data ) {
+OO.ui.mixin.GroupElement.prototype.getItemsFromData = function ( data ) {
        var i, len, item,
                hash = OO.getHash( data ),
                items = [];
@@ -4434,7 +4561,7 @@ OO.ui.GroupElement.prototype.getItemsFromData = function ( data ) {
 
  * @throws {Error} An error is thrown if aggregation already exists.
  */
-OO.ui.GroupElement.prototype.aggregate = function ( events ) {
+OO.ui.mixin.GroupElement.prototype.aggregate = function ( events ) {
        var i, len, item, add, remove, itemEvent, groupEvent;
 
        for ( itemEvent in events ) {
@@ -4451,7 +4578,7 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
                                item = this.items[ i ];
                                if ( item.connect && item.disconnect ) {
                                        remove = {};
-                                       remove[ itemEvent ] = [ 'emit', groupEvent, item ];
+                                       remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
                                        item.disconnect( this, remove );
                                }
                        }
@@ -4486,7 +4613,7 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
  * @param {number} [index] Index of the insertion point
  * @chainable
  */
-OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
+OO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {
        var i, len, item, event, events, currentIndex,
                itemElements = [];
 
@@ -4537,7 +4664,7 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
  * @param {OO.ui.Element[]} items An array of items to remove
  * @chainable
  */
-OO.ui.GroupElement.prototype.removeItems = function ( items ) {
+OO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {
        var i, len, item, index, remove, itemEvent;
 
        // Remove specific items
@@ -4572,7 +4699,7 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
  *
  * @chainable
  */
-OO.ui.GroupElement.prototype.clearItems = function () {
+OO.ui.mixin.GroupElement.prototype.clearItems = function () {
        var i, len, item, remove, itemEvent;
 
        // Remove all items
@@ -4599,7 +4726,7 @@ OO.ui.GroupElement.prototype.clearItems = function () {
 /**
  * DraggableElement is a mixin class used to create elements that can be clicked
  * and dragged by a mouse to a new position within a group. This class must be used
- * in conjunction with OO.ui.DraggableGroupElement, which provides a container for
+ * in conjunction with OO.ui.mixin.DraggableGroupElement, which provides a container for
  * the draggable elements.
  *
  * @abstract
@@ -4607,7 +4734,7 @@ OO.ui.GroupElement.prototype.clearItems = function () {
  *
  * @constructor
  */
-OO.ui.DraggableElement = function OoUiDraggableElement() {
+OO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement() {
        // Properties
        this.index = null;
 
@@ -4623,7 +4750,7 @@ OO.ui.DraggableElement = function OoUiDraggableElement() {
                } );
 };
 
-OO.initClass( OO.ui.DraggableElement );
+OO.initClass( OO.ui.mixin.DraggableElement );
 
 /* Events */
 
@@ -4631,7 +4758,7 @@ OO.initClass( OO.ui.DraggableElement );
  * @event dragstart
  *
  * A dragstart event is emitted when the user clicks and begins dragging an item.
- * @param {OO.ui.DraggableElement} item The item the user has clicked and is dragging with the mouse.
+ * @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with the mouse.
  */
 
 /**
@@ -4649,9 +4776,9 @@ OO.initClass( OO.ui.DraggableElement );
 /* Static Properties */
 
 /**
- * @inheritdoc OO.ui.ButtonElement
+ * @inheritdoc OO.ui.mixin.ButtonElement
  */
-OO.ui.DraggableElement.static.cancelButtonMouseDownEvents = false;
+OO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;
 
 /* Methods */
 
@@ -4662,7 +4789,7 @@ OO.ui.DraggableElement.static.cancelButtonMouseDownEvents = false;
  * @param {jQuery.Event} event jQuery event
  * @fires dragstart
  */
-OO.ui.DraggableElement.prototype.onDragStart = function ( e ) {
+OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
        var dataTransfer = e.originalEvent.dataTransfer;
        // Define drop effect
        dataTransfer.dropEffect = 'none';
@@ -4688,7 +4815,7 @@ OO.ui.DraggableElement.prototype.onDragStart = function ( e ) {
  * @private
  * @fires dragend
  */
-OO.ui.DraggableElement.prototype.onDragEnd = function () {
+OO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {
        this.$element.removeClass( 'oo-ui-draggableElement-dragging' );
        this.emit( 'dragend' );
 };
@@ -4700,7 +4827,7 @@ OO.ui.DraggableElement.prototype.onDragEnd = function () {
  * @param {jQuery.Event} event jQuery event
  * @fires drop
  */
-OO.ui.DraggableElement.prototype.onDrop = function ( e ) {
+OO.ui.mixin.DraggableElement.prototype.onDrop = function ( e ) {
        e.preventDefault();
        this.emit( 'drop', e );
 };
@@ -4711,7 +4838,7 @@ OO.ui.DraggableElement.prototype.onDrop = function ( e ) {
  *
  * @private
  */
-OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
+OO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {
        e.preventDefault();
 };
 
@@ -4722,7 +4849,7 @@ OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
  * @private
  * @param {number} Item index
  */
-OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
+OO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {
        if ( this.index !== index ) {
                this.index = index;
                this.$element.data( 'index', index );
@@ -4735,18 +4862,18 @@ OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
  * @private
  * @return {number} Item index
  */
-OO.ui.DraggableElement.prototype.getIndex = function () {
+OO.ui.mixin.DraggableElement.prototype.getIndex = function () {
        return this.index;
 };
 
 /**
  * DraggableGroupElement is a mixin class used to create a group element to
  * contain draggable elements, which are items that can be clicked and dragged by a mouse.
- * The class is used with OO.ui.DraggableElement.
+ * The class is used with OO.ui.mixin.DraggableElement.
  *
  * @abstract
  * @class
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -4755,12 +4882,12 @@ OO.ui.DraggableElement.prototype.getIndex = function () {
  *  or in several rows should use horizontal orientation. The vertical orientation should only be
  *  used when the items are displayed in a single column. Defaults to 'vertical'
  */
-OO.ui.DraggableGroupElement = function OoUiDraggableGroupElement( config ) {
+OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( config ) {
        // Configuration initialization
        config = config || {};
 
        // Parent constructor
-       OO.ui.GroupElement.call( this, config );
+       OO.ui.mixin.GroupElement.call( this, config );
 
        // Properties
        this.orientation = config.orientation || 'vertical';
@@ -4799,7 +4926,7 @@ OO.ui.DraggableGroupElement = function OoUiDraggableGroupElement( config ) {
 };
 
 /* Setup */
-OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );
 
 /* Events */
 
@@ -4807,7 +4934,7 @@ OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
  * A 'reorder' event is emitted when the order of items in the group changes.
  *
  * @event reorder
- * @param {OO.ui.DraggableElement} item Reordered item
+ * @param {OO.ui.mixin.DraggableElement} item Reordered item
  * @param {number} [newIndex] New index for the item
  */
 
@@ -4817,9 +4944,9 @@ OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
  * Respond to item drag start event
  *
  * @private
- * @param {OO.ui.DraggableElement} item Dragged item
+ * @param {OO.ui.mixin.DraggableElement} item Dragged item
  */
-OO.ui.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
+OO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
        var i, len;
 
        // Map the index of each object
@@ -4848,7 +4975,7 @@ OO.ui.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
  *
  * @private
  */
-OO.ui.DraggableGroupElement.prototype.onItemDragEnd = function () {
+OO.ui.mixin.DraggableGroupElement.prototype.onItemDragEnd = function () {
        this.unsetDragItem();
        return false;
 };
@@ -4857,10 +4984,10 @@ OO.ui.DraggableGroupElement.prototype.onItemDragEnd = function () {
  * Handle drop event and switch the order of the items accordingly
  *
  * @private
- * @param {OO.ui.DraggableElement} item Dropped item
+ * @param {OO.ui.mixin.DraggableElement} item Dropped item
  * @fires reorder
  */
-OO.ui.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
+OO.ui.mixin.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
        var toIndex = item.getIndex();
        // Check if the dropped item is from the current group
        // TODO: Figure out a way to configure a list of legally droppable
@@ -4884,7 +5011,7 @@ OO.ui.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
  *
  * @private
  */
-OO.ui.DraggableGroupElement.prototype.onDragLeave = function () {
+OO.ui.mixin.DraggableGroupElement.prototype.onDragLeave = function () {
        // This means the item was dragged outside the widget
        this.$placeholder
                .css( 'left', 0 )
@@ -4897,7 +5024,7 @@ OO.ui.DraggableGroupElement.prototype.onDragLeave = function () {
  * @private
  * @param {jQuery.Event} event Event details
  */
-OO.ui.DraggableGroupElement.prototype.onDragOver = function ( e ) {
+OO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {
        var dragOverObj, $optionWidget, itemOffset, itemMidpoint, itemBoundingRect,
                itemSize, cssOutput, dragPosition, itemIndex, itemPosition,
                clientX = e.originalEvent.clientX,
@@ -4967,16 +5094,16 @@ OO.ui.DraggableGroupElement.prototype.onDragOver = function ( e ) {
 /**
  * Set a dragged item
  *
- * @param {OO.ui.DraggableElement} item Dragged item
+ * @param {OO.ui.mixin.DraggableElement} item Dragged item
  */
-OO.ui.DraggableGroupElement.prototype.setDragItem = function ( item ) {
+OO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {
        this.dragItem = item;
 };
 
 /**
  * Unset the current dragged item
  */
-OO.ui.DraggableGroupElement.prototype.unsetDragItem = function () {
+OO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {
        this.dragItem = null;
        this.itemDragOver = null;
        this.$placeholder.addClass( 'oo-ui-element-hidden' );
@@ -4986,9 +5113,9 @@ OO.ui.DraggableGroupElement.prototype.unsetDragItem = function () {
 /**
  * Get the item that is currently being dragged.
  *
- * @return {OO.ui.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged
+ * @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged
  */
-OO.ui.DraggableGroupElement.prototype.getDragItem = function () {
+OO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {
        return this.dragItem;
 };
 
@@ -4997,7 +5124,7 @@ OO.ui.DraggableGroupElement.prototype.getDragItem = function () {
  *
  * @return {Boolean} Item is being dragged
  */
-OO.ui.DraggableGroupElement.prototype.isDragging = function () {
+OO.ui.mixin.DraggableGroupElement.prototype.isDragging = function () {
        return this.getDragItem() !== null;
 };
 
@@ -5039,7 +5166,7 @@ OO.ui.DraggableGroupElement.prototype.isDragging = function () {
  * @cfg {string|Function} [iconTitle] A text string used as the icon title, or a function that returns title
  *  text. The icon title is displayed when users move the mouse over the icon.
  */
-OO.ui.IconElement = function OoUiIconElement( config ) {
+OO.ui.mixin.IconElement = function OoUiMixinIconElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -5056,7 +5183,7 @@ OO.ui.IconElement = function OoUiIconElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.IconElement );
+OO.initClass( OO.ui.mixin.IconElement );
 
 /* Static Properties */
 
@@ -5075,7 +5202,7 @@ OO.initClass( OO.ui.IconElement );
  * @inheritable
  * @property {Object|string}
  */
-OO.ui.IconElement.static.icon = null;
+OO.ui.mixin.IconElement.static.icon = null;
 
 /**
  * The icon title, displayed when users move the mouse over the icon. The value can be text, a
@@ -5087,7 +5214,7 @@ OO.ui.IconElement.static.icon = null;
  * @inheritable
  * @property {string|Function|null}
  */
-OO.ui.IconElement.static.iconTitle = null;
+OO.ui.mixin.IconElement.static.iconTitle = null;
 
 /* Methods */
 
@@ -5099,7 +5226,7 @@ OO.ui.IconElement.static.iconTitle = null;
  *
  * @param {jQuery} $icon Element to use as icon
  */
-OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
+OO.ui.mixin.IconElement.prototype.setIconElement = function ( $icon ) {
        if ( this.$icon ) {
                this.$icon
                        .removeClass( 'oo-ui-iconElement-icon oo-ui-icon-' + this.icon )
@@ -5123,7 +5250,7 @@ OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
  *  by language code, or `null` to remove the icon.
  * @chainable
  */
-OO.ui.IconElement.prototype.setIcon = function ( icon ) {
+OO.ui.mixin.IconElement.prototype.setIcon = function ( icon ) {
        icon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;
        icon = typeof icon === 'string' && icon.trim().length ? icon.trim() : null;
 
@@ -5152,7 +5279,7 @@ OO.ui.IconElement.prototype.setIcon = function ( icon ) {
  *  a function that returns title text, or `null` for no title.
  * @chainable
  */
-OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
+OO.ui.mixin.IconElement.prototype.setIconTitle = function ( iconTitle ) {
        iconTitle = typeof iconTitle === 'function' ||
                ( typeof iconTitle === 'string' && iconTitle.length ) ?
                        OO.ui.resolveMsg( iconTitle ) : null;
@@ -5176,7 +5303,7 @@ OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
  *
  * @return {string} Icon name
  */
-OO.ui.IconElement.prototype.getIcon = function () {
+OO.ui.mixin.IconElement.prototype.getIcon = function () {
        return this.icon;
 };
 
@@ -5185,7 +5312,7 @@ OO.ui.IconElement.prototype.getIcon = function () {
  *
  * @return {string} Icon title text
  */
-OO.ui.IconElement.prototype.getIconTitle = function () {
+OO.ui.mixin.IconElement.prototype.getIconTitle = function () {
        return this.iconTitle;
 };
 
@@ -5218,7 +5345,7 @@ OO.ui.IconElement.prototype.getIconTitle = function () {
  *  or a function that returns title text. The indicator title is displayed when users move
  *  the mouse over the indicator.
  */
-OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
+OO.ui.mixin.IndicatorElement = function OoUiMixinIndicatorElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -5235,7 +5362,7 @@ OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.IndicatorElement );
+OO.initClass( OO.ui.mixin.IndicatorElement );
 
 /* Static Properties */
 
@@ -5247,7 +5374,7 @@ OO.initClass( OO.ui.IndicatorElement );
  * @inheritable
  * @property {string|null}
  */
-OO.ui.IndicatorElement.static.indicator = null;
+OO.ui.mixin.IndicatorElement.static.indicator = null;
 
 /**
  * A text string used as the indicator title, a function that returns title text, or `null`
@@ -5257,7 +5384,7 @@ OO.ui.IndicatorElement.static.indicator = null;
  * @inheritable
  * @property {string|Function|null}
  */
-OO.ui.IndicatorElement.static.indicatorTitle = null;
+OO.ui.mixin.IndicatorElement.static.indicatorTitle = null;
 
 /* Methods */
 
@@ -5268,7 +5395,7 @@ OO.ui.IndicatorElement.static.indicatorTitle = null;
  *
  * @param {jQuery} $indicator Element to use as indicator
  */
-OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
+OO.ui.mixin.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
        if ( this.$indicator ) {
                this.$indicator
                        .removeClass( 'oo-ui-indicatorElement-indicator oo-ui-indicator-' + this.indicator )
@@ -5289,7 +5416,7 @@ OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
  * @param {string|null} indicator Symbolic name of indicator, or `null` for no indicator
  * @chainable
  */
-OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
+OO.ui.mixin.IndicatorElement.prototype.setIndicator = function ( indicator ) {
        indicator = typeof indicator === 'string' && indicator.length ? indicator.trim() : null;
 
        if ( this.indicator !== indicator ) {
@@ -5319,7 +5446,7 @@ OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
  *   `null` for no indicator title
  * @chainable
  */
-OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
+OO.ui.mixin.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
        indicatorTitle = typeof indicatorTitle === 'function' ||
                ( typeof indicatorTitle === 'string' && indicatorTitle.length ) ?
                        OO.ui.resolveMsg( indicatorTitle ) : null;
@@ -5343,7 +5470,7 @@ OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle )
  *
  * @return {string} Symbolic name of indicator
  */
-OO.ui.IndicatorElement.prototype.getIndicator = function () {
+OO.ui.mixin.IndicatorElement.prototype.getIndicator = function () {
        return this.indicator;
 };
 
@@ -5354,7 +5481,7 @@ OO.ui.IndicatorElement.prototype.getIndicator = function () {
  *
  * @return {string} Indicator title text
  */
-OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
+OO.ui.mixin.IndicatorElement.prototype.getIndicatorTitle = function () {
        return this.indicatorTitle;
 };
 
@@ -5379,7 +5506,7 @@ OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
  * @cfg {boolean} [autoFitLabel=true] Fit the label to the width of the parent element.
  *  The label will be truncated to fit if necessary.
  */
-OO.ui.LabelElement = function OoUiLabelElement( config ) {
+OO.ui.mixin.LabelElement = function OoUiMixinLabelElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -5395,7 +5522,7 @@ OO.ui.LabelElement = function OoUiLabelElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.LabelElement );
+OO.initClass( OO.ui.mixin.LabelElement );
 
 /* Events */
 
@@ -5415,7 +5542,7 @@ OO.initClass( OO.ui.LabelElement );
  * @inheritable
  * @property {string|Function|null}
  */
-OO.ui.LabelElement.static.label = null;
+OO.ui.mixin.LabelElement.static.label = null;
 
 /* Methods */
 
@@ -5426,7 +5553,7 @@ OO.ui.LabelElement.static.label = null;
  *
  * @param {jQuery} $label Element to use as label
  */
-OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
+OO.ui.mixin.LabelElement.prototype.setLabelElement = function ( $label ) {
        if ( this.$label ) {
                this.$label.removeClass( 'oo-ui-labelElement-label' ).empty();
        }
@@ -5445,7 +5572,7 @@ OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
  *  text; or null for no label
  * @chainable
  */
-OO.ui.LabelElement.prototype.setLabel = function ( label ) {
+OO.ui.mixin.LabelElement.prototype.setLabel = function ( label ) {
        label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
        label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null;
 
@@ -5468,7 +5595,7 @@ OO.ui.LabelElement.prototype.setLabel = function ( label ) {
  * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or
  *  text; or null for no label
  */
-OO.ui.LabelElement.prototype.getLabel = function () {
+OO.ui.mixin.LabelElement.prototype.getLabel = function () {
        return this.label;
 };
 
@@ -5477,7 +5604,7 @@ OO.ui.LabelElement.prototype.getLabel = function () {
  *
  * @chainable
  */
-OO.ui.LabelElement.prototype.fitLabel = function () {
+OO.ui.mixin.LabelElement.prototype.fitLabel = function () {
        if ( this.$label && this.$label.autoEllipsis && this.autoFitLabel ) {
                this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
        }
@@ -5494,7 +5621,7 @@ OO.ui.LabelElement.prototype.fitLabel = function () {
  * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
  *  text; or null for no label
  */
-OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
+OO.ui.mixin.LabelElement.prototype.setLabelContent = function ( label ) {
        if ( typeof label === 'string' ) {
                if ( label.match( /^\s*$/ ) ) {
                        // Convert whitespace only string to a single non-breaking space
@@ -5535,7 +5662,7 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
  * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.
  *  By default, the lookup menu is not generated and displayed until the user begins to type.
  */
-OO.ui.LookupElement = function OoUiLookupElement( config ) {
+OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -5581,7 +5708,7 @@ OO.ui.LookupElement = function OoUiLookupElement( config ) {
  * @protected
  * @param {jQuery.Event} e Input focus event
  */
-OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
+OO.ui.mixin.LookupElement.prototype.onLookupInputFocus = function () {
        this.lookupInputFocused = true;
        this.populateLookupMenu();
 };
@@ -5592,7 +5719,7 @@ OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
  * @protected
  * @param {jQuery.Event} e Input blur event
  */
-OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
+OO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () {
        this.closeLookupMenu();
        this.lookupInputFocused = false;
 };
@@ -5603,7 +5730,7 @@ OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
  * @protected
  * @param {jQuery.Event} e Input mouse down event
  */
-OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
+OO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () {
        // Only open the menu if the input was already focused.
        // This way we allow the user to open the menu again after closing it with Esc
        // by clicking in the input. Opening (and populating) the menu when initially
@@ -5619,7 +5746,7 @@ OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
  * @protected
  * @param {string} value New input value
  */
-OO.ui.LookupElement.prototype.onLookupInputChange = function () {
+OO.ui.mixin.LookupElement.prototype.onLookupInputChange = function () {
        if ( this.lookupInputFocused ) {
                this.populateLookupMenu();
        }
@@ -5631,7 +5758,7 @@ OO.ui.LookupElement.prototype.onLookupInputChange = function () {
  * @protected
  * @param {boolean} visible Whether the lookup menu is now visible.
  */
-OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
+OO.ui.mixin.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
        if ( !visible ) {
                // When the menu is hidden, abort any active request and clear the menu.
                // This has to be done here in addition to closeLookupMenu(), because
@@ -5647,7 +5774,7 @@ OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
  * @protected
  * @param {OO.ui.MenuOptionWidget} item Selected item
  */
-OO.ui.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
+OO.ui.mixin.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
        this.setValue( item.getData() );
 };
 
@@ -5657,7 +5784,7 @@ OO.ui.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
  * @private
  * @return {OO.ui.TextInputMenuSelectWidget}
  */
-OO.ui.LookupElement.prototype.getLookupMenu = function () {
+OO.ui.mixin.LookupElement.prototype.getLookupMenu = function () {
        return this.lookupMenu;
 };
 
@@ -5668,7 +5795,7 @@ OO.ui.LookupElement.prototype.getLookupMenu = function () {
  *
  * @param {boolean} disabled Disable lookups
  */
-OO.ui.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
+OO.ui.mixin.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
        this.lookupsDisabled = !!disabled;
 };
 
@@ -5678,7 +5805,7 @@ OO.ui.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
  * @private
  * @chainable
  */
-OO.ui.LookupElement.prototype.openLookupMenu = function () {
+OO.ui.mixin.LookupElement.prototype.openLookupMenu = function () {
        if ( !this.lookupMenu.isEmpty() ) {
                this.lookupMenu.toggle( true );
        }
@@ -5691,7 +5818,7 @@ OO.ui.LookupElement.prototype.openLookupMenu = function () {
  * @private
  * @chainable
  */
-OO.ui.LookupElement.prototype.closeLookupMenu = function () {
+OO.ui.mixin.LookupElement.prototype.closeLookupMenu = function () {
        this.lookupMenu.toggle( false );
        this.abortLookupRequest();
        this.lookupMenu.clearItems();
@@ -5707,7 +5834,7 @@ OO.ui.LookupElement.prototype.closeLookupMenu = function () {
  * @private
  * @chainable
  */
-OO.ui.LookupElement.prototype.populateLookupMenu = function () {
+OO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {
        var widget = this,
                value = this.getValue();
 
@@ -5746,7 +5873,7 @@ OO.ui.LookupElement.prototype.populateLookupMenu = function () {
  * @private
  * @chainable
  */
-OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
+OO.ui.mixin.LookupElement.prototype.initializeLookupMenuSelection = function () {
        if ( !this.lookupMenu.getSelectedItem() ) {
                this.lookupMenu.highlightItem( this.lookupMenu.getFirstSelectableItem() );
        }
@@ -5760,7 +5887,7 @@ OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
  *   the done event. If the request was aborted to make way for a subsequent request, this promise
  *   will not be rejected: it will remain pending forever.
  */
-OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
+OO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () {
        var widget = this,
                value = this.getValue(),
                deferred = $.Deferred(),
@@ -5811,7 +5938,7 @@ OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
  *
  * @private
  */
-OO.ui.LookupElement.prototype.abortLookupRequest = function () {
+OO.ui.mixin.LookupElement.prototype.abortLookupRequest = function () {
        var oldRequest = this.lookupRequest;
        if ( oldRequest ) {
                // First unset this.lookupRequest to the fail handler will notice
@@ -5829,7 +5956,7 @@ OO.ui.LookupElement.prototype.abortLookupRequest = function () {
  * @abstract
  * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
  */
-OO.ui.LookupElement.prototype.getLookupRequest = function () {
+OO.ui.mixin.LookupElement.prototype.getLookupRequest = function () {
        // Stub, implemented in subclass
        return null;
 };
@@ -5845,7 +5972,7 @@ OO.ui.LookupElement.prototype.getLookupRequest = function () {
  * @param {Mixed} response Response from server
  * @return {Mixed} Cached result data
  */
-OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
+OO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
        // Stub, implemented in subclass
        return [];
 };
@@ -5859,7 +5986,7 @@ OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
  * @param {Mixed} data Cached result data, usually an array
  * @return {OO.ui.MenuOptionWidget[]} Menu items
  */
-OO.ui.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
+OO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
        // Stub, implemented in subclass
        return [];
 };
@@ -5878,7 +6005,7 @@ OO.ui.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
  * @cfg {Object} [popup] Configuration to pass to popup
  * @cfg {boolean} [popup.autoClose=true] Popup auto-closes when it loses focus
  */
-OO.ui.PopupElement = function OoUiPopupElement( config ) {
+OO.ui.mixin.PopupElement = function OoUiMixinPopupElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -5897,7 +6024,7 @@ OO.ui.PopupElement = function OoUiPopupElement( config ) {
  *
  * @return {OO.ui.PopupWidget} Popup widget
  */
-OO.ui.PopupElement.prototype.getPopup = function () {
+OO.ui.mixin.PopupElement.prototype.getPopup = function () {
        return this.popup;
 };
 
@@ -5949,7 +6076,7 @@ OO.ui.PopupElement.prototype.getPopup = function () {
  *  the flagged functionality is applied to the element created by the class ($element).
  *  If a different element is specified, the flagged functionality will be applied to it instead.
  */
-OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
+OO.ui.mixin.FlaggedElement = function OoUiMixinFlaggedElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -5984,7 +6111,7 @@ OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
  *
  * @param {jQuery} $flagged Element that should be flagged
  */
-OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
+OO.ui.mixin.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
        var classNames = Object.keys( this.flags ).map( function ( flag ) {
                return 'oo-ui-flaggedElement-' + flag;
        } ).join( ' ' );
@@ -6002,7 +6129,7 @@ OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
  * @param {string} flag Name of flag
  * @return {boolean} The flag is set
  */
-OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
+OO.ui.mixin.FlaggedElement.prototype.hasFlag = function ( flag ) {
        return flag in this.flags;
 };
 
@@ -6011,7 +6138,7 @@ OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
  *
  * @return {string[]} Flag names
  */
-OO.ui.FlaggedElement.prototype.getFlags = function () {
+OO.ui.mixin.FlaggedElement.prototype.getFlags = function () {
        return Object.keys( this.flags );
 };
 
@@ -6021,7 +6148,7 @@ OO.ui.FlaggedElement.prototype.getFlags = function () {
  * @chainable
  * @fires flag
  */
-OO.ui.FlaggedElement.prototype.clearFlags = function () {
+OO.ui.mixin.FlaggedElement.prototype.clearFlags = function () {
        var flag, className,
                changes = {},
                remove = [],
@@ -6053,7 +6180,7 @@ OO.ui.FlaggedElement.prototype.clearFlags = function () {
  * @chainable
  * @fires flag
  */
-OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
+OO.ui.mixin.FlaggedElement.prototype.setFlags = function ( flags ) {
        var i, len, flag, className,
                changes = {},
                add = [],
@@ -6136,7 +6263,7 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
  * @cfg {string|Function} [title] The title text or a function that returns text. If
  *  this config is omitted, the value of the {@link #static-title static title} property is used.
  */
-OO.ui.TitledElement = function OoUiTitledElement( config ) {
+OO.ui.mixin.TitledElement = function OoUiMixinTitledElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -6151,7 +6278,7 @@ OO.ui.TitledElement = function OoUiTitledElement( config ) {
 
 /* Setup */
 
-OO.initClass( OO.ui.TitledElement );
+OO.initClass( OO.ui.mixin.TitledElement );
 
 /* Static Properties */
 
@@ -6163,7 +6290,7 @@ OO.initClass( OO.ui.TitledElement );
  * @inheritable
  * @property {string|Function|null}
  */
-OO.ui.TitledElement.static.title = null;
+OO.ui.mixin.TitledElement.static.title = null;
 
 /* Methods */
 
@@ -6175,7 +6302,7 @@ OO.ui.TitledElement.static.title = null;
  *
  * @param {jQuery} $titled Element that should use the 'titled' functionality
  */
-OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
+OO.ui.mixin.TitledElement.prototype.setTitledElement = function ( $titled ) {
        if ( this.$titled ) {
                this.$titled.removeAttr( 'title' );
        }
@@ -6192,7 +6319,7 @@ OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
  * @param {string|Function|null} title Title text, a function that returns text, or `null` for no title
  * @chainable
  */
-OO.ui.TitledElement.prototype.setTitle = function ( title ) {
+OO.ui.mixin.TitledElement.prototype.setTitle = function ( title ) {
        title = typeof title === 'string' ? OO.ui.resolveMsg( title ) : null;
 
        if ( this.title !== title ) {
@@ -6214,7 +6341,7 @@ OO.ui.TitledElement.prototype.setTitle = function ( title ) {
  *
  * @return {string} Title string
  */
-OO.ui.TitledElement.prototype.getTitle = function () {
+OO.ui.mixin.TitledElement.prototype.getTitle = function () {
        return this.title;
 };
 
@@ -6222,7 +6349,8 @@ OO.ui.TitledElement.prototype.getTitle = function () {
  * Element that can be automatically clipped to visible boundaries.
  *
  * Whenever the element's natural height changes, you have to call
- * #clip to make sure it's still clipping correctly.
+ * {@link OO.ui.mixin.ClippableElement#clip} to make sure it's still
+ * clipping correctly.
  *
  * @abstract
  * @class
@@ -6231,7 +6359,7 @@ OO.ui.TitledElement.prototype.getTitle = function () {
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$clippable] Nodes to clip, assigned to #$clippable, omit to use #$element
  */
-OO.ui.ClippableElement = function OoUiClippableElement( config ) {
+OO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -6261,7 +6389,7 @@ OO.ui.ClippableElement = function OoUiClippableElement( config ) {
  *
  * @param {jQuery} $clippable Element to make clippable
  */
-OO.ui.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
+OO.ui.mixin.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
        if ( this.$clippable ) {
                this.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );
                this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
@@ -6280,7 +6408,7 @@ OO.ui.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
  * @param {boolean} [clipping] Enable clipping, omit to toggle
  * @chainable
  */
-OO.ui.ClippableElement.prototype.toggleClipping = function ( clipping ) {
+OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {
        clipping = clipping === undefined ? !this.clipping : !!clipping;
 
        if ( this.clipping !== clipping ) {
@@ -6317,7 +6445,7 @@ OO.ui.ClippableElement.prototype.toggleClipping = function ( clipping ) {
  *
  * @return {boolean} Element will be clipped to the visible area
  */
-OO.ui.ClippableElement.prototype.isClipping = function () {
+OO.ui.mixin.ClippableElement.prototype.isClipping = function () {
        return this.clipping;
 };
 
@@ -6326,7 +6454,7 @@ OO.ui.ClippableElement.prototype.isClipping = function () {
  *
  * @return {boolean} Part of the element is being clipped
  */
-OO.ui.ClippableElement.prototype.isClipped = function () {
+OO.ui.mixin.ClippableElement.prototype.isClipped = function () {
        return this.clippedHorizontally || this.clippedVertically;
 };
 
@@ -6335,7 +6463,7 @@ OO.ui.ClippableElement.prototype.isClipped = function () {
  *
  * @return {boolean} Part of the element is being clipped
  */
-OO.ui.ClippableElement.prototype.isClippedHorizontally = function () {
+OO.ui.mixin.ClippableElement.prototype.isClippedHorizontally = function () {
        return this.clippedHorizontally;
 };
 
@@ -6344,7 +6472,7 @@ OO.ui.ClippableElement.prototype.isClippedHorizontally = function () {
  *
  * @return {boolean} Part of the element is being clipped
  */
-OO.ui.ClippableElement.prototype.isClippedVertically = function () {
+OO.ui.mixin.ClippableElement.prototype.isClippedVertically = function () {
        return this.clippedVertically;
 };
 
@@ -6354,7 +6482,7 @@ OO.ui.ClippableElement.prototype.isClippedVertically = function () {
  * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
  * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
  */
-OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
+OO.ui.mixin.ClippableElement.prototype.setIdealSize = function ( width, height ) {
        this.idealWidth = width;
        this.idealHeight = height;
 
@@ -6374,7 +6502,7 @@ OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
  *
  * @chainable
  */
-OO.ui.ClippableElement.prototype.clip = function () {
+OO.ui.mixin.ClippableElement.prototype.clip = function () {
        if ( !this.clipping ) {
                // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
                return this;
@@ -6387,16 +6515,13 @@ OO.ui.ClippableElement.prototype.clip = function () {
                ccOffset = $container.offset() || { top: 0, left: 0 },
                ccHeight = $container.innerHeight() - buffer,
                ccWidth = $container.innerWidth() - buffer,
-               cHeight = this.$clippable.outerHeight() + buffer,
                cWidth = this.$clippable.outerWidth() + buffer,
-               scrollTop = this.$clippableScroller.scrollTop(),
+               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 = cOffset.top < 0 ?
-                       cHeight + cOffset.top :
-                       ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
+               desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
                naturalWidth = this.$clippable.prop( 'scrollWidth' ),
                naturalHeight = this.$clippable.prop( 'scrollHeight' ),
                clipWidth = desiredWidth < naturalWidth,
@@ -6425,19 +6550,38 @@ OO.ui.ClippableElement.prototype.clip = function () {
 };
 
 /**
- * Generic toolbar tool.
+ * 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
+ * out when the tool is selected. Tools must also be registered with a {@link OO.ui.ToolFactory tool factory},
+ * which creates the tools on demand.
+ *
+ * Tools are added to toolgroups ({@link OO.ui.ListToolGroup ListToolGroup},
+ * {@link OO.ui.BarToolGroup BarToolGroup}, or {@link OO.ui.MenuToolGroup MenuToolGroup}), which determine how
+ * the tool is displayed in the toolbar. See {@link OO.ui.Toolbar toolbars} for an example.
+ *
+ * For more information, please see the [OOjs UI documentation on MediaWiki][1].
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  *
  * @abstract
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.FlaggedElement
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {OO.ui.ToolGroup} toolGroup
  * @param {Object} [config] Configuration options
- * @cfg {string|Function} [title] Title text or a function that returns text
+ * @cfg {string|Function} [title] Title text or a function that returns text. If this config is omitted, the value of
+ *  the {@link #static-title static title} property is used.
+ *
+ *  The title is used in different ways depending on the type of toolgroup that contains the tool. The
+ *  title is used as a tooltip if the tool is part of a {@link OO.ui.BarToolGroup bar} toolgroup, or as the label text if the tool is
+ *  part of a {@link OO.ui.ListToolGroup list} or {@link OO.ui.MenuToolGroup menu} toolgroup.
+ *
+ *  For bar toolgroups, a description of the accelerator key is appended to the title if an accelerator key
+ *  is associated with an action by the same name as the tool and accelerator functionality has been added to the application.
+ *  To add accelerator key functionality, you must subclass OO.ui.Toolbar and override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method.
  */
 OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        // Allow passing positional parameters inside the config object
@@ -6450,7 +6594,7 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.Tool.super.call( this, config );
+       OO.ui.Tool.parent.call( this, config );
 
        // Properties
        this.toolGroup = toolGroup;
@@ -6462,9 +6606,9 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.title = null;
 
        // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.FlaggedElement.call( this, config );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.FlaggedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );
 
        // Events
        this.toolbar.connect( this, { updateState: 'onUpdateState' } );
@@ -6497,15 +6641,9 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
-OO.mixinClass( OO.ui.Tool, OO.ui.IconElement );
-OO.mixinClass( OO.ui.Tool, OO.ui.FlaggedElement );
-OO.mixinClass( OO.ui.Tool, OO.ui.TabIndexedElement );
-
-/* Events */
-
-/**
- * @event select
- */
+OO.mixinClass( OO.ui.Tool, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.mixin.FlaggedElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.mixin.TabIndexedElement );
 
 /* Static Properties */
 
@@ -6518,6 +6656,9 @@ OO.ui.Tool.static.tagName = 'span';
 /**
  * Symbolic name of tool.
  *
+ * The symbolic name is used internally to register the tool with a {@link OO.ui.ToolFactory ToolFactory}. It can
+ * also be used when adding tools to toolgroups.
+ *
  * @abstract
  * @static
  * @inheritable
@@ -6526,7 +6667,10 @@ OO.ui.Tool.static.tagName = 'span';
 OO.ui.Tool.static.name = '';
 
 /**
- * Tool group.
+ * Symbolic name of the group.
+ *
+ * The group name is used to associate tools with each other so that they can be selected later by
+ * a {@link OO.ui.ToolGroup toolgroup}.
  *
  * @abstract
  * @static
@@ -6536,22 +6680,17 @@ OO.ui.Tool.static.name = '';
 OO.ui.Tool.static.group = '';
 
 /**
- * Tool title.
- *
- * Title is used as a tooltip when the tool is part of a bar tool group, or a label when the tool
- * is part of a list or menu tool group. If a trigger is associated with an action by the same name
- * as the tool, a description of its keyboard shortcut for the appropriate platform will be
- * appended to the title if the tool is part of a bar tool group.
+ * Tool title text or a function that returns title text. The value of the static property is overridden if the #title config option is used.
  *
  * @abstract
  * @static
  * @inheritable
- * @property {string|Function} Title text or a function that returns text
+ * @property {string|Function}
  */
 OO.ui.Tool.static.title = '';
 
 /**
- * Whether this tool should be displayed with both title and label when used in a bar tool group.
+ * Display both icon and label when the tool is used in a {@link OO.ui.BarToolGroup bar} toolgroup.
  * Normally only the icon is displayed, or only the label if no icon is given.
  *
  * @static
@@ -6561,7 +6700,10 @@ OO.ui.Tool.static.title = '';
 OO.ui.Tool.static.displayBothIconAndLabel = false;
 
 /**
- * Tool can be automatically added to catch-all groups.
+ * Add tool to catch-all groups automatically.
+ *
+ * A catch-all group, which contains all tools that do not currently belong to a toolgroup,
+ * can be included in a toolgroup using the wildcard selector, an asterisk (*).
  *
  * @static
  * @inheritable
@@ -6570,7 +6712,11 @@ OO.ui.Tool.static.displayBothIconAndLabel = false;
 OO.ui.Tool.static.autoAddToCatchall = true;
 
 /**
- * Tool can be automatically added to named groups.
+ * Add tool to named groups automatically.
+ *
+ * By default, tools that are configured with a static ‘group’ property are added
+ * to that group and will be selected when the symbolic name of the group is specified (e.g., when
+ * toolgroups include tools by group name).
  *
  * @static
  * @property {boolean}
@@ -6581,6 +6727,10 @@ OO.ui.Tool.static.autoAddToGroup = true;
 /**
  * Check if this tool is compatible with given data.
  *
+ * This is a stub that can be overriden to provide support for filtering tools based on an
+ * arbitrary piece of information  (e.g., where the cursor is in a document). The implementation
+ * must also call this method so that the compatibility check can be performed.
+ *
  * @static
  * @inheritable
  * @param {Mixed} data Data to check
@@ -6597,6 +6747,7 @@ OO.ui.Tool.static.isCompatibleWith = function () {
  *
  * This is an abstract method that must be overridden in a concrete subclass.
  *
+ * @protected
  * @abstract
  */
 OO.ui.Tool.prototype.onUpdateState = function () {
@@ -6610,6 +6761,7 @@ OO.ui.Tool.prototype.onUpdateState = function () {
  *
  * This is an abstract method that must be overridden in a concrete subclass.
  *
+ * @protected
  * @abstract
  */
 OO.ui.Tool.prototype.onSelect = function () {
@@ -6619,18 +6771,24 @@ OO.ui.Tool.prototype.onSelect = function () {
 };
 
 /**
- * Check if the button is active.
+ * Check if the tool is active.
  *
- * @return {boolean} Button is active
+ * Tools become active when their #onSelect or #onUpdateState handlers change them to appear pressed
+ * with the #setActive method. Additional CSS is applied to the tool to reflect the active state.
+ *
+ * @return {boolean} Tool is active
  */
 OO.ui.Tool.prototype.isActive = function () {
        return this.active;
 };
 
 /**
- * Make the button appear active or inactive.
+ * Make the tool appear active or inactive.
+ *
+ * This method should be called within #onSelect or #onUpdateState event handlers to make the tool
+ * appear pressed or not.
  *
- * @param {boolean} state Make button appear active
+ * @param {boolean} state Make tool appear active
  */
 OO.ui.Tool.prototype.setActive = function ( state ) {
        this.active = !!state;
@@ -6642,7 +6800,7 @@ OO.ui.Tool.prototype.setActive = function ( state ) {
 };
 
 /**
- * Get the tool title.
+ * Set the tool #title.
  *
  * @param {string|Function} title Title text or a function that returns text
  * @chainable
@@ -6654,7 +6812,7 @@ OO.ui.Tool.prototype.setTitle = function ( title ) {
 };
 
 /**
- * Get the tool title.
+ * Get the tool #title.
  *
  * @return {string} Title text
  */
@@ -6698,6 +6856,9 @@ OO.ui.Tool.prototype.updateTitle = function () {
 
 /**
  * Destroy tool.
+ *
+ * Destroying the tool removes all event handlers and the tool’s DOM elements.
+ * Call this method whenever you are done using a tool.
  */
 OO.ui.Tool.prototype.destroy = function () {
        this.toolbar.disconnect( this );
@@ -6705,11 +6866,23 @@ OO.ui.Tool.prototype.destroy = function () {
 };
 
 /**
- * Collection of tool groups.
+ * Toolbars are complex interface components that permit users to easily access a variety
+ * of {@link OO.ui.Tool tools} (e.g., formatting commands) and actions, which are additional commands that are
+ * part of the toolbar, but not configured as tools.
+ *
+ * Individual tools are customized and then registered with a {@link OO.ui.ToolFactory tool factory}, which creates
+ * the tools on demand. Each tool has a symbolic name (used when registering the tool), a title (e.g., ‘Insert
+ * picture’), and an icon.
  *
- * The following is a minimal example using several tools and tool groups.
+ * Individual tools are organized in {@link OO.ui.ToolGroup toolgroups}, which can be {@link OO.ui.MenuToolGroup menus}
+ * of tools, {@link OO.ui.ListToolGroup lists} of tools, or a single {@link OO.ui.BarToolGroup bar} of tools.
+ * The arrangement and order of the toolgroups is customized when the toolbar is set up. Tools can be presented in
+ * any order, but each can only appear once in the toolbar.
+ *
+ * The following is an example of a basic toolbar.
  *
  *     @example
+ *     // Example of a toolbar
  *     // Create the toolbar
  *     var toolFactory = new OO.ui.ToolFactory();
  *     var toolGroupFactory = new OO.ui.ToolGroupFactory();
@@ -6722,7 +6895,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *
  *     // Create a class inheriting from OO.ui.Tool
  *     function PictureTool() {
- *         PictureTool.super.apply( this, arguments );
+ *         PictureTool.parent.apply( this, arguments );
  *     }
  *     OO.inheritClass( PictureTool, OO.ui.Tool );
  *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
@@ -6741,7 +6914,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *
  *     // Register two more tools, nothing interesting here
  *     function SettingsTool() {
- *         SettingsTool.super.apply( this, arguments );
+ *         SettingsTool.parent.apply( this, arguments );
  *     }
  *     OO.inheritClass( SettingsTool, OO.ui.Tool );
  *     SettingsTool.static.name = 'settings';
@@ -6755,7 +6928,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *
  *     // Register two more tools, nothing interesting here
  *     function StuffTool() {
- *         StuffTool.super.apply( this, arguments );
+ *         StuffTool.parent.apply( this, arguments );
  *     }
  *     OO.inheritClass( StuffTool, OO.ui.Tool );
  *     StuffTool.static.name = 'stuff';
@@ -6822,7 +6995,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *     // document.
  *     toolbar.initialize();
  *
- * The following example extends the previous one to illustrate 'menu' tool groups and the usage of
+ * The following example extends the previous one to illustrate 'menu' toolgroups and the usage of
  * 'updateState' event.
  *
  *     @example
@@ -6838,7 +7011,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *
  *     // Create a class inheriting from OO.ui.Tool
  *     function PictureTool() {
- *         PictureTool.super.apply( this, arguments );
+ *         PictureTool.parent.apply( this, arguments );
  *     }
  *     OO.inheritClass( PictureTool, OO.ui.Tool );
  *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
@@ -6862,7 +7035,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *
  *     // Register two more tools, nothing interesting here
  *     function SettingsTool() {
- *         SettingsTool.super.apply( this, arguments );
+ *         SettingsTool.parent.apply( this, arguments );
  *         this.reallyActive = false;
  *     }
  *     OO.inheritClass( SettingsTool, OO.ui.Tool );
@@ -6883,7 +7056,7 @@ OO.ui.Tool.prototype.destroy = function () {
  *
  *     // Register two more tools, nothing interesting here
  *     function StuffTool() {
- *         StuffTool.super.apply( this, arguments );
+ *         StuffTool.parent.apply( this, arguments );
  *         this.reallyActive = false;
  *     }
  *     OO.inheritClass( StuffTool, OO.ui.Tool );
@@ -6958,14 +7131,16 @@ OO.ui.Tool.prototype.destroy = function () {
  * @class
  * @extends OO.ui.Element
  * @mixins OO.EventEmitter
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {OO.ui.ToolFactory} toolFactory Factory for creating tools
- * @param {OO.ui.ToolGroupFactory} toolGroupFactory Factory for creating tool groups
+ * @param {OO.ui.ToolGroupFactory} toolGroupFactory Factory for creating toolgroups
  * @param {Object} [config] Configuration options
- * @cfg {boolean} [actions] Add an actions section opposite to the tools
- * @cfg {boolean} [shadow] Add a shadow below the toolbar
+ * @cfg {boolean} [actions] Add an actions section to the toolbar. Actions are commands that are included
+ *  in the toolbar, but are not configured as tools. By default, actions are displayed on the right side of
+ *  the toolbar.
+ * @cfg {boolean} [shadow] Add a shadow below the toolbar.
  */
 OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
        // Allow passing positional parameters inside the config object
@@ -6979,11 +7154,11 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.Toolbar.super.call( this, config );
+       OO.ui.Toolbar.parent.call( this, config );
 
        // Mixin constructors
        OO.EventEmitter.call( this );
-       OO.ui.GroupElement.call( this, config );
+       OO.ui.mixin.GroupElement.call( this, config );
 
        // Properties
        this.toolFactory = toolFactory;
@@ -7018,7 +7193,7 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
 
 OO.inheritClass( OO.ui.Toolbar, OO.ui.Element );
 OO.mixinClass( OO.ui.Toolbar, OO.EventEmitter );
-OO.mixinClass( OO.ui.Toolbar, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.Toolbar, OO.ui.mixin.GroupElement );
 
 /* Methods */
 
@@ -7032,9 +7207,9 @@ OO.ui.Toolbar.prototype.getToolFactory = function () {
 };
 
 /**
- * Get the tool group factory.
+ * Get the toolgroup factory.
  *
- * @return {OO.Factory} Tool group factory
+ * @return {OO.Factory} Toolgroup factory
  */
 OO.ui.Toolbar.prototype.getToolGroupFactory = function () {
        return this.toolGroupFactory;
@@ -7043,6 +7218,7 @@ OO.ui.Toolbar.prototype.getToolGroupFactory = function () {
 /**
  * Handles mouse down events.
  *
+ * @private
  * @param {jQuery.Event} e Mouse down event
  */
 OO.ui.Toolbar.prototype.onPointerDown = function ( e ) {
@@ -7078,19 +7254,18 @@ OO.ui.Toolbar.prototype.initialize = function () {
 };
 
 /**
- * Setup toolbar.
+ * Set up the toolbar.
  *
- * Tools can be specified in the following ways:
- *
- * - A specific tool: `{ name: 'tool-name' }` or `'tool-name'`
- * - All tools in a group: `{ group: 'group-name' }`
- * - All tools: `'*'` - Using this will make the group a list with a "More" label by default
+ * The toolbar is set up with a list of toolgroup configurations that specify the type of
+ * toolgroup ({@link OO.ui.BarToolGroup bar}, {@link OO.ui.MenuToolGroup menu}, or {@link OO.ui.ListToolGroup list})
+ * to add and which tools to include, exclude, promote, or demote within that toolgroup. Please
+ * see {@link OO.ui.ToolGroup toolgroups} for more information about including tools in toolgroups.
  *
- * @param {Object.<string,Array>} groups List of tool group configurations
- * @param {Array|string} [groups.include] Tools to include
- * @param {Array|string} [groups.exclude] Tools to exclude
- * @param {Array|string} [groups.promote] Tools to promote to the beginning
- * @param {Array|string} [groups.demote] Tools to demote to the end
+ * @param {Object.<string,Array>} groups List of toolgroup configurations
+ * @param {Array|string} [groups.include] Tools to include in the toolgroup
+ * @param {Array|string} [groups.exclude] Tools to exclude from the toolgroup
+ * @param {Array|string} [groups.promote] Tools to promote to the beginning of the toolgroup
+ * @param {Array|string} [groups.demote] Tools to demote to the end of the toolgroup
  */
 OO.ui.Toolbar.prototype.setup = function ( groups ) {
        var i, len, type, group,
@@ -7122,7 +7297,7 @@ OO.ui.Toolbar.prototype.setup = function ( groups ) {
 };
 
 /**
- * Remove all tools and groups from the toolbar.
+ * Remove all tools and toolgroups from the toolbar.
  */
 OO.ui.Toolbar.prototype.reset = function () {
        var i, len;
@@ -7136,9 +7311,10 @@ OO.ui.Toolbar.prototype.reset = function () {
 };
 
 /**
- * Destroys toolbar, removing event handlers and DOM elements.
+ * Destroy the toolbar.
  *
- * Call this whenever you are done using a toolbar.
+ * Destroying the toolbar removes all event handlers and DOM elements that constitute the toolbar. Call
+ * this method whenever you are done using a toolbar.
  */
 OO.ui.Toolbar.prototype.destroy = function () {
        $( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
@@ -7147,7 +7323,9 @@ OO.ui.Toolbar.prototype.destroy = function () {
 };
 
 /**
- * Check if tool has not been used yet.
+ * Check if the tool is available.
+ *
+ * Available tools are ones that have not yet been added to the toolbar.
  *
  * @param {string} name Symbolic name of tool
  * @return {boolean} Tool is available
@@ -7177,7 +7355,9 @@ OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
 /**
  * Get accelerator label for tool.
  *
- * This is a stub that should be overridden to provide access to accelerator information.
+ * The OOjs UI library does not contain an accelerator system, but this is the hook for one. To
+ * use an accelerator system, subclass the toolbar and override this method, which is meant to return a label
+ * that describes the accelerator keys for the tool passed (by symbolic name) to the method.
  *
  * @param {string} name Symbolic name of tool
  * @return {string|undefined} Tool accelerator label if available
@@ -7187,26 +7367,44 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
 };
 
 /**
- * Collection of tools.
+ * ToolGroups are collections of {@link OO.ui.Tool tools} that are used in a {@link OO.ui.Toolbar toolbar}.
+ * The type of toolgroup ({@link OO.ui.ListToolGroup list}, {@link OO.ui.BarToolGroup bar}, or {@link OO.ui.MenuToolGroup menu})
+ * to which a tool belongs determines how the tool is arranged and displayed in the toolbar. Toolgroups
+ * themselves are created on demand with a {@link OO.ui.ToolGroupFactory toolgroup factory}.
  *
- * Tools can be specified in the following ways:
+ * Toolgroups can contain individual tools, groups of tools, or all available tools:
  *
- * - A specific tool: `{ name: 'tool-name' }` or `'tool-name'`
- * - All tools in a group: `{ group: 'group-name' }`
- * - All tools: `'*'`
+ * To include an individual tool (or array of individual tools), specify tools by symbolic name:
+ *
+ *      include: [ 'tool-name' ] or [ { name: 'tool-name' }]
+ *
+ * To include a group of tools, specify the group name. (The tool's static ‘group’ config is used to assign the tool to a group.)
+ *
+ *      include: [ { group: 'group-name' } ]
+ *
+ *  To include all tools that are not yet assigned to a toolgroup, use the catch-all selector, an asterisk (*):
+ *
+ *      include: '*'
+ *
+ * See {@link OO.ui.Toolbar toolbars} for a full example. For more information about toolbars in general,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  *
  * @abstract
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
  * @param {Object} [config] Configuration options
- * @cfg {Array|string} [include=[]] List of tools to include
- * @cfg {Array|string} [exclude=[]] List of tools to exclude
- * @cfg {Array|string} [promote=[]] List of tools to promote to the beginning
- * @cfg {Array|string} [demote=[]] List of tools to demote to the end
+ * @cfg {Array|string} [include=[]] List of tools to include in the toolgroup.
+ * @cfg {Array|string} [exclude=[]] List of tools to exclude from the toolgroup.
+ * @cfg {Array|string} [promote=[]] List of tools to promote to the beginning of the toolgroup.
+ * @cfg {Array|string} [demote=[]] List of tools to demote to the end of the toolgroup.
+ *  This setting is particularly useful when tools have been added to the toolgroup
+ *  en masse (e.g., via the catch-all selector).
  */
 OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        // Allow passing positional parameters inside the config object
@@ -7219,10 +7417,10 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ToolGroup.super.call( this, config );
+       OO.ui.ToolGroup.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, config );
+       OO.ui.mixin.GroupElement.call( this, config );
 
        // Properties
        this.toolbar = toolbar;
@@ -7261,7 +7459,7 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ToolGroup, OO.ui.Widget );
-OO.mixinClass( OO.ui.ToolGroup, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.ToolGroup, OO.ui.mixin.GroupElement );
 
 /* Events */
 
@@ -7283,6 +7481,11 @@ OO.ui.ToolGroup.static.titleTooltips = false;
 /**
  * Show acceleration labels in tooltips.
  *
+ * Note: The OOjs UI library does not include an accelerator system, but does contain
+ * a hook for one. To use an accelerator system, subclass the {@link OO.ui.Toolbar toolbar} and
+ * override the {@link OO.ui.Toolbar#getToolAccelerator getToolAccelerator} method, which is
+ * meant to return a label that describes the accelerator keys for a given tool (e.g., 'Ctrl + M').
+ *
  * @static
  * @inheritable
  * @property {boolean}
@@ -7304,7 +7507,7 @@ OO.ui.ToolGroup.static.autoDisable = true;
  * @inheritdoc
  */
 OO.ui.ToolGroup.prototype.isDisabled = function () {
-       return this.autoDisabled || OO.ui.ToolGroup.super.prototype.isDisabled.apply( this, arguments );
+       return this.autoDisabled || OO.ui.ToolGroup.parent.prototype.isDisabled.apply( this, arguments );
 };
 
 /**
@@ -7323,12 +7526,13 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () {
                }
                this.autoDisabled = allDisabled;
        }
-       OO.ui.ToolGroup.super.prototype.updateDisabled.apply( this, arguments );
+       OO.ui.ToolGroup.parent.prototype.updateDisabled.apply( this, arguments );
 };
 
 /**
  * Handle mouse down and key down events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse down or key down event
  */
 OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
@@ -7349,6 +7553,7 @@ OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
 /**
  * Handle captured mouse up and key up events.
  *
+ * @protected
  * @param {Event} e Mouse up or key up event
  */
 OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {
@@ -7362,6 +7567,7 @@ OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {
 /**
  * Handle mouse up and key up events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse up or key up event
  */
 OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {
@@ -7382,6 +7588,7 @@ OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {
 /**
  * Handle mouse over and focus events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse over or focus event
  */
 OO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {
@@ -7395,6 +7602,7 @@ OO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {
 /**
  * Handle mouse out and blur events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse out or blur event
  */
 OO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) {
@@ -7434,6 +7642,7 @@ OO.ui.ToolGroup.prototype.getTargetTool = function ( e ) {
  * - a tool being added that may be included
  * - a tool already included being overridden
  *
+ * @protected
  * @param {string} name Symbolic name of tool
  */
 OO.ui.ToolGroup.prototype.onToolFactoryRegister = function () {
@@ -7441,9 +7650,9 @@ OO.ui.ToolGroup.prototype.onToolFactoryRegister = function () {
 };
 
 /**
- * Get the toolbar this group is in.
+ * Get the toolbar that contains the toolgroup.
  *
- * @return {OO.ui.Toolbar} Toolbar of group
+ * @return {OO.ui.Toolbar} Toolbar that contains the toolgroup
  */
 OO.ui.ToolGroup.prototype.getToolbar = function () {
        return this.toolbar;
@@ -7510,7 +7719,7 @@ OO.ui.ToolGroup.prototype.populate = function () {
 };
 
 /**
- * Destroy tool group.
+ * Destroy toolgroup.
  */
 OO.ui.ToolGroup.prototype.destroy = function () {
        var name;
@@ -7568,7 +7777,7 @@ OO.ui.ToolGroup.prototype.destroy = function () {
  */
 OO.ui.MessageDialog = function OoUiMessageDialog( config ) {
        // Parent constructor
-       OO.ui.MessageDialog.super.call( this, config );
+       OO.ui.MessageDialog.parent.call( this, config );
 
        // Properties
        this.verticalActionLayout = null;
@@ -7624,7 +7833,7 @@ OO.ui.MessageDialog.static.actions = [
  * @inheritdoc
  */
 OO.ui.MessageDialog.prototype.setManager = function ( manager ) {
-       OO.ui.MessageDialog.super.prototype.setManager.call( this, manager );
+       OO.ui.MessageDialog.parent.prototype.setManager.call( this, manager );
 
        // Events
        this.manager.connect( this, {
@@ -7639,7 +7848,7 @@ OO.ui.MessageDialog.prototype.setManager = function ( manager ) {
  */
 OO.ui.MessageDialog.prototype.onActionResize = function ( action ) {
        this.fitActions();
-       return OO.ui.MessageDialog.super.prototype.onActionResize.call( this, action );
+       return OO.ui.MessageDialog.parent.prototype.onActionResize.call( this, action );
 };
 
 /**
@@ -7686,7 +7895,7 @@ OO.ui.MessageDialog.prototype.getActionProcess = function ( action ) {
                        this.close( { action: action } );
                }, this );
        }
-       return OO.ui.MessageDialog.super.prototype.getActionProcess.call( this, action );
+       return OO.ui.MessageDialog.parent.prototype.getActionProcess.call( this, action );
 };
 
 /**
@@ -7703,7 +7912,7 @@ OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
        data = data || {};
 
        // Parent method
-       return OO.ui.MessageDialog.super.prototype.getSetupProcess.call( this, data )
+       return OO.ui.MessageDialog.parent.prototype.getSetupProcess.call( this, data )
                .next( function () {
                        this.title.setLabel(
                                data.title !== undefined ? data.title : this.constructor.static.title
@@ -7741,7 +7950,7 @@ OO.ui.MessageDialog.prototype.getBodyHeight = function () {
  */
 OO.ui.MessageDialog.prototype.setDimensions = function ( dim ) {
        var $scrollable = this.container.$element;
-       OO.ui.MessageDialog.super.prototype.setDimensions.call( this, dim );
+       OO.ui.MessageDialog.parent.prototype.setDimensions.call( this, dim );
 
        // Twiddle the overflow property, otherwise an unnecessary scrollbar will be produced.
        // Need to do it after transition completes (250ms), add 50ms just in case.
@@ -7762,7 +7971,7 @@ OO.ui.MessageDialog.prototype.setDimensions = function ( dim ) {
  */
 OO.ui.MessageDialog.prototype.initialize = function () {
        // Parent method
-       OO.ui.MessageDialog.super.prototype.initialize.call( this );
+       OO.ui.MessageDialog.parent.prototype.initialize.call( this );
 
        // Properties
        this.$actions = $( '<div>' );
@@ -7793,7 +8002,7 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
        var i, len, other, special, others;
 
        // Parent method
-       OO.ui.MessageDialog.super.prototype.attachActions.call( this );
+       OO.ui.MessageDialog.parent.prototype.attachActions.call( this );
 
        special = this.actions.getSpecial();
        others = this.actions.getOthers();
@@ -7869,7 +8078,7 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
  *     @example
  *     // Example: Creating and opening a process dialog window.
  *     function MyProcessDialog( config ) {
- *         MyProcessDialog.super.call( this, config );
+ *         MyProcessDialog.parent.call( this, config );
  *     }
  *     OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
  *
@@ -7880,7 +8089,7 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
  *     ];
  *
  *     MyProcessDialog.prototype.initialize = function () {
- *         MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ *         MyProcessDialog.parent.prototype.initialize.apply( this, arguments );
  *         this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
  *         this.content.$element.append( '<p>This is a process dialog window. The header contains the title and two buttons: \'Cancel\' (a safe action) on the left and \'Done\' (a primary action)  on the right.</p>' );
  *         this.$body.append( this.content.$element );
@@ -7892,7 +8101,7 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
  *                 dialog.close( { action: action } );
  *             } );
  *         }
- *         return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ *         return MyProcessDialog.parent.prototype.getActionProcess.call( this, action );
  *     };
  *
  *     var windowManager = new OO.ui.WindowManager();
@@ -7913,7 +8122,7 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
  */
 OO.ui.ProcessDialog = function OoUiProcessDialog( config ) {
        // Parent constructor
-       OO.ui.ProcessDialog.super.call( this, config );
+       OO.ui.ProcessDialog.parent.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-processDialog' );
@@ -7955,7 +8164,7 @@ OO.ui.ProcessDialog.prototype.onActionResize = function ( action ) {
        if ( this.actions.isSpecial( action ) ) {
                this.fitLabel();
        }
-       return OO.ui.ProcessDialog.super.prototype.onActionResize.call( this, action );
+       return OO.ui.ProcessDialog.parent.prototype.onActionResize.call( this, action );
 };
 
 /**
@@ -7963,7 +8172,7 @@ OO.ui.ProcessDialog.prototype.onActionResize = function ( action ) {
  */
 OO.ui.ProcessDialog.prototype.initialize = function () {
        // Parent method
-       OO.ui.ProcessDialog.super.prototype.initialize.call( this );
+       OO.ui.ProcessDialog.parent.prototype.initialize.call( this );
 
        // Properties
        this.$navigation = $( '<div>' );
@@ -8026,7 +8235,7 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
        var i, len, other, special, others;
 
        // Parent method
-       OO.ui.ProcessDialog.super.prototype.attachActions.call( this );
+       OO.ui.ProcessDialog.parent.prototype.attachActions.call( this );
 
        special = this.actions.getSpecial();
        others = this.actions.getOthers();
@@ -8050,7 +8259,7 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
  */
 OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
        var process = this;
-       return OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
+       return OO.ui.ProcessDialog.parent.prototype.executeAction.call( this, action )
                .fail( function ( errors ) {
                        process.showErrors( errors || [] );
                } );
@@ -8063,11 +8272,31 @@ OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
  * @chainable
  */
 OO.ui.ProcessDialog.prototype.fitLabel = function () {
-       var width = Math.max(
-               this.$safeActions.is( ':visible' ) ? this.$safeActions.width() : 0,
-               this.$primaryActions.is( ':visible' ) ? this.$primaryActions.width() : 0
-       );
-       this.$location.css( { paddingLeft: width, paddingRight: width } );
+       var safeWidth, primaryWidth, biggerWidth, labelWidth, navigationWidth, leftWidth, rightWidth;
+
+       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
+               leftWidth = rightWidth = biggerWidth;
+       } else {
+               // Let's hope we at least have enough space not to overlap, because we can't wrap the label…
+               if ( this.getDir() === 'ltr' ) {
+                       leftWidth = safeWidth;
+                       rightWidth = primaryWidth;
+               } else {
+                       leftWidth = primaryWidth;
+                       rightWidth = safeWidth;
+               }
+       }
+
+       this.$location.css( { paddingLeft: leftWidth, paddingRight: rightWidth } );
 
        return this;
 };
@@ -8141,7 +8370,7 @@ OO.ui.ProcessDialog.prototype.hideErrors = function () {
  */
 OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
        // Parent method
-       return OO.ui.ProcessDialog.super.prototype.getTeardownProcess.call( this, data )
+       return OO.ui.ProcessDialog.parent.prototype.getTeardownProcess.call( this, data )
                .first( function () {
                        // Make sure to hide errors
                        this.hideErrors();
@@ -8170,7 +8399,7 @@ OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
  * @class
  * @extends OO.ui.Layout
- * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.mixin.LabelElement
  *
  * @constructor
  * @param {OO.ui.Widget} fieldWidget Field widget
@@ -8186,16 +8415,16 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
                fieldWidget = config.fieldWidget;
        }
 
-       var hasInputWidget = fieldWidget instanceof OO.ui.InputWidget;
+       var hasInputWidget = fieldWidget.constructor.static.supportsSimpleLabel;
 
        // Configuration initialization
        config = $.extend( { align: 'left' }, config );
 
        // Parent constructor
-       OO.ui.FieldLayout.super.call( this, config );
+       OO.ui.FieldLayout.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.LabelElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, config );
 
        // Properties
        this.fieldWidget = fieldWidget;
@@ -8241,7 +8470,7 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.LabelElement );
 
 /* Methods */
 
@@ -8354,10 +8583,6 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
  * @constructor
  * @param {OO.ui.Widget} fieldWidget Field widget
  * @param {OO.ui.ButtonWidget} buttonWidget Button 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.
  */
 OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {
        // Allow passing positional parameters inside the config object
@@ -8367,23 +8592,24 @@ OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWid
                buttonWidget = config.buttonWidget;
        }
 
-       // Configuration initialization
-       config = $.extend( { align: 'left' }, config );
-
        // Parent constructor
-       OO.ui.ActionFieldLayout.super.call( this, fieldWidget, config );
+       OO.ui.ActionFieldLayout.parent.call( this, fieldWidget, config );
 
        // Properties
-       this.fieldWidget = fieldWidget;
        this.buttonWidget = buttonWidget;
-       this.$button = $( '<div>' )
+       this.$button = $( '<div>' );
+       this.$input = $( '<div>' );
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-actionFieldLayout' );
+       this.$button
                .addClass( 'oo-ui-actionFieldLayout-button' )
                .append( this.buttonWidget.$element );
-       this.$input = $( '<div>' )
+       this.$input
                .addClass( 'oo-ui-actionFieldLayout-input' )
                .append( this.fieldWidget.$element );
        this.$field
-               .addClass( 'oo-ui-actionFieldLayout' )
                .append( this.$input, this.$button );
 };
 
@@ -8425,9 +8651,9 @@ OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );
  *
  * @class
  * @extends OO.ui.Layout
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -8438,12 +8664,12 @@ OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.FieldsetLayout.super.call( this, config );
+       OO.ui.FieldsetLayout.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.GroupElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.GroupElement.call( this, config );
 
        if ( config.help ) {
                this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
@@ -8474,9 +8700,9 @@ OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.mixin.GroupElement );
 
 /**
  * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based
@@ -8531,7 +8757,7 @@ OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
  *
  * @class
  * @extends OO.ui.Layout
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -8545,10 +8771,10 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.FormLayout.super.call( this, config );
+       OO.ui.FormLayout.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+       OO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Events
        this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
@@ -8569,7 +8795,7 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FormLayout, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.FormLayout, OO.ui.mixin.GroupElement );
 
 /* Events */
 
@@ -8671,7 +8897,7 @@ OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
        }, config );
 
        // Parent constructor
-       OO.ui.MenuLayout.super.call( this, config );
+       OO.ui.MenuLayout.parent.call( this, config );
 
        /**
         * Menu DOM node
@@ -8768,7 +8994,7 @@ OO.ui.MenuLayout.prototype.getMenuPosition = function () {
  *     // Example of a BookletLayout that contains two PageLayouts.
  *
  *     function PageOneLayout( name, config ) {
- *         PageOneLayout.super.call( this, name, config );
+ *         PageOneLayout.parent.call( this, name, config );
  *         this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );
  *     }
  *     OO.inheritClass( PageOneLayout, OO.ui.PageLayout );
@@ -8777,7 +9003,7 @@ OO.ui.MenuLayout.prototype.getMenuPosition = function () {
  *     };
  *
  *     function PageTwoLayout( name, config ) {
- *         PageTwoLayout.super.call( this, name, config );
+ *         PageTwoLayout.parent.call( this, name, config );
  *         this.$element.append( '<p>Second page</p>' );
  *     }
  *     OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );
@@ -8810,7 +9036,7 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.BookletLayout.super.call( this, config );
+       OO.ui.BookletLayout.parent.call( this, config );
 
        // Properties
        this.currentPageName = null;
@@ -9311,7 +9537,7 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
  *     // Example of a IndexLayout that contains two CardLayouts.
  *
  *     function CardOneLayout( name, config ) {
- *         CardOneLayout.super.call( this, name, config );
+ *         CardOneLayout.parent.call( this, name, config );
  *         this.$element.append( '<p>First card</p>' );
  *     }
  *     OO.inheritClass( CardOneLayout, OO.ui.CardLayout );
@@ -9320,7 +9546,7 @@ OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
  *     };
  *
  *     function CardTwoLayout( name, config ) {
- *         CardTwoLayout.super.call( this, name, config );
+ *         CardTwoLayout.parent.call( this, name, config );
  *         this.$element.append( '<p>Second card</p>' );
  *     }
  *     OO.inheritClass( CardTwoLayout, OO.ui.CardLayout );
@@ -9349,7 +9575,7 @@ OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
        config = $.extend( {}, config, { menuPosition: 'top' } );
 
        // Parent constructor
-       OO.ui.IndexLayout.super.call( this, config );
+       OO.ui.IndexLayout.parent.call( this, config );
 
        // Properties
        this.currentCardName = null;
@@ -9785,7 +10011,7 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
        }, config );
 
        // Parent constructor
-       OO.ui.PanelLayout.super.call( this, config );
+       OO.ui.PanelLayout.parent.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-panelLayout' );
@@ -9834,7 +10060,7 @@ OO.ui.CardLayout = function OoUiCardLayout( name, config ) {
        config = $.extend( { scrollable: true }, config );
 
        // Parent constructor
-       OO.ui.CardLayout.super.call( this, config );
+       OO.ui.CardLayout.parent.call( this, config );
 
        // Properties
        this.name = name;
@@ -9973,7 +10199,7 @@ OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
        config = $.extend( { scrollable: true }, config );
 
        // Parent constructor
-       OO.ui.PageLayout.super.call( this, config );
+       OO.ui.PageLayout.parent.call( this, config );
 
        // Properties
        this.name = name;
@@ -10111,7 +10337,7 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
  *
  * @class
  * @extends OO.ui.PanelLayout
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -10123,10 +10349,10 @@ OO.ui.StackLayout = function OoUiStackLayout( config ) {
        config = $.extend( { scrollable: true }, config );
 
        // Parent constructor
-       OO.ui.StackLayout.super.call( this, config );
+       OO.ui.StackLayout.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+       OO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Properties
        this.currentItem = null;
@@ -10145,7 +10371,7 @@ OO.ui.StackLayout = function OoUiStackLayout( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );
-OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.StackLayout, OO.ui.mixin.GroupElement );
 
 /* Events */
 
@@ -10201,7 +10427,7 @@ OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
        this.updateHiddenState( items, this.currentItem );
 
        // Mixin method
-       OO.ui.GroupElement.prototype.addItems.call( this, items, index );
+       OO.ui.mixin.GroupElement.prototype.addItems.call( this, items, index );
 
        if ( !this.currentItem && items.length ) {
                this.setItem( items[ 0 ] );
@@ -10222,7 +10448,7 @@ OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
  */
 OO.ui.StackLayout.prototype.removeItems = function ( items ) {
        // Mixin method
-       OO.ui.GroupElement.prototype.removeItems.call( this, items );
+       OO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );
 
        if ( $.inArray( this.currentItem, items ) !== -1 ) {
                if ( this.items.length ) {
@@ -10246,7 +10472,7 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
  */
 OO.ui.StackLayout.prototype.clearItems = function () {
        this.unsetCurrentItem();
-       OO.ui.GroupElement.prototype.clearItems.call( this );
+       OO.ui.mixin.GroupElement.prototype.clearItems.call( this );
 
        return this;
 };
@@ -10301,7 +10527,94 @@ OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem )
 };
 
 /**
- * Horizontal bar layout of tools as icon buttons.
+ * 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}
+ * and {@link OO.ui.ListToolGroup ListToolGroup}). The {@link OO.ui.Tool tools} in a BarToolGroup are
+ * displayed by icon in a single row. The title of the tool is displayed when users move the mouse over
+ * the tool.
+ *
+ * BarToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar is
+ * set up.
+ *
+ *     @example
+ *     // Example of a BarToolGroup with two tools
+ *     var toolFactory = new OO.ui.ToolFactory();
+ *     var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ *     // We will be placing status text in this element when tools are used
+ *     var $area = $( '<p>' ).text( 'Example of a BarToolGroup with two tools.' );
+ *
+ *     // Define the tools that we're going to place in our toolbar
+ *
+ *     // Create a class inheriting from OO.ui.Tool
+ *     function PictureTool() {
+ *         PictureTool.parent.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( PictureTool, OO.ui.Tool );
+ *     // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ *     // of 'icon' and 'title' (displayed icon and text).
+ *     PictureTool.static.name = 'picture';
+ *     PictureTool.static.icon = 'picture';
+ *     PictureTool.static.title = 'Insert picture';
+ *     // Defines the action that will happen when this tool is selected (clicked).
+ *     PictureTool.prototype.onSelect = function () {
+ *         $area.text( 'Picture tool clicked!' );
+ *         // Never display this tool as "active" (selected).
+ *         this.setActive( false );
+ *     };
+ *     // Make this tool available in our toolFactory and thus our toolbar
+ *     toolFactory.register( PictureTool );
+ *
+ *     // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ *     // little popup window (a PopupWidget).
+ *     function HelpTool( toolGroup, config ) {
+ *         OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ *             padded: true,
+ *             label: 'Help',
+ *             head: true
+ *         } }, config ) );
+ *         this.popup.$body.append( '<p>I am helpful!</p>' );
+ *     }
+ *     OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ *     HelpTool.static.name = 'help';
+ *     HelpTool.static.icon = 'help';
+ *     HelpTool.static.title = 'Help';
+ *     toolFactory.register( HelpTool );
+ *
+ *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ *     // used once (but not all defined tools must be used).
+ *     toolbar.setup( [
+ *         {
+ *             // 'bar' tool groups display tools by icon only
+ *             type: 'bar',
+ *             include: [ 'picture', 'help' ]
+ *         }
+ *     ] );
+ *
+ *     // Create some UI around the toolbar and place it in the document
+ *     var frame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true
+ *     } );
+ *     var contentFrame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         padded: true
+ *     } );
+ *     frame.$element.append(
+ *         toolbar.$element,
+ *         contentFrame.$element.append( $area )
+ *     );
+ *     $( 'body' ).append( frame.$element );
+ *
+ *     // Here is where the toolbar is actually built. This must be done after inserting it into the
+ *     // document.
+ *     toolbar.initialize();
+ *
+ * For more information about how to add tools to a bar tool group, please see {@link OO.ui.ToolGroup toolgroup}.
+ * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  *
  * @class
  * @extends OO.ui.ToolGroup
@@ -10318,7 +10631,7 @@ OO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {
        }
 
        // Parent constructor
-       OO.ui.BarToolGroup.super.call( this, toolbar, config );
+       OO.ui.BarToolGroup.parent.call( this, toolbar, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-barToolGroup' );
@@ -10337,22 +10650,24 @@ OO.ui.BarToolGroup.static.accelTooltips = true;
 OO.ui.BarToolGroup.static.name = 'bar';
 
 /**
- * Popup list of tools with an icon and optional label.
+ * PopupToolGroup is an abstract base class used by both {@link OO.ui.MenuToolGroup MenuToolGroup}
+ * and {@link OO.ui.ListToolGroup ListToolGroup} to provide a popup--an overlaid menu or list of tools with an
+ * optional icon and label. This class can be used for other base classes that also use this functionality.
  *
  * @abstract
  * @class
  * @extends OO.ui.ToolGroup
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.TitledElement
- * @mixins OO.ui.ClippableElement
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.ClippableElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
  * @param {Object} [config] Configuration options
- * @cfg {string} [header] Text to display at the top of the pop-up
+ * @cfg {string} [header] Text to display at the top of the popup
  */
 OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        // Allow passing positional parameters inside the config object
@@ -10365,7 +10680,7 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.PopupToolGroup.super.call( this, toolbar, config );
+       OO.ui.PopupToolGroup.parent.call( this, toolbar, config );
 
        // Properties
        this.active = false;
@@ -10374,12 +10689,12 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        this.$handle = $( '<span>' );
 
        // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.TitledElement.call( this, config );
-       OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.TitledElement.call( this, config );
+       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
        // Events
        this.$handle.on( {
@@ -10411,12 +10726,12 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.ClippableElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TabIndexedElement );
 
 /* Methods */
 
@@ -10425,7 +10740,7 @@ OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TabIndexedElement );
  */
 OO.ui.PopupToolGroup.prototype.setDisabled = function () {
        // Parent method
-       OO.ui.PopupToolGroup.super.prototype.setDisabled.apply( this, arguments );
+       OO.ui.PopupToolGroup.parent.prototype.setDisabled.apply( this, arguments );
 
        if ( this.isDisabled() && this.isElementAttached() ) {
                this.setActive( false );
@@ -10437,6 +10752,7 @@ OO.ui.PopupToolGroup.prototype.setDisabled = function () {
  *
  * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse up or key up event
  */
 OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
@@ -10457,12 +10773,13 @@ OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {
        ) {
                this.setActive( false );
        }
-       return OO.ui.PopupToolGroup.super.prototype.onMouseKeyUp.call( this, e );
+       return OO.ui.PopupToolGroup.parent.prototype.onMouseKeyUp.call( this, e );
 };
 
 /**
  * Handle mouse up and key up events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse up or key up event
  */
 OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {
@@ -10477,6 +10794,7 @@ OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {
 /**
  * Handle mouse down and key down events.
  *
+ * @protected
  * @param {jQuery.Event} e Mouse down or key down event
  */
 OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
@@ -10490,9 +10808,10 @@ OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
 };
 
 /**
- * Switch into active mode.
+ * Switch into 'active' mode.
  *
- * When active, mouseup events anywhere in the document will trigger deactivation.
+ * When active, the popup is visible. A mouseup event anywhere in the document will trigger
+ * deactivation.
  */
 OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
        value = !!value;
@@ -10525,11 +10844,79 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
 };
 
 /**
- * Drop down list layout of tools as labeled icon buttons.
+ * ListToolGroups 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}
+ * and {@link OO.ui.BarToolGroup BarToolGroup}). The {@link OO.ui.Tool tools} in a ListToolGroup are displayed
+ * by label in a dropdown menu. The title of the tool is used as the label text. The menu itself can be configured
+ * with a label, icon, indicator, header, and title.
+ *
+ * ListToolGroups can be configured to be expanded and collapsed. Collapsed lists will have a ‘More’ option that
+ * users can select to see the full list of tools. If a collapsed toolgroup is expanded, a ‘Fewer’ option permits
+ * users to collapse the list again.
+ *
+ * ListToolGroups are created by a {@link OO.ui.ToolGroupFactory toolgroup factory} when the toolbar is set up. The factory
+ * requires the ListToolGroup's symbolic name, 'list', which is specified along with the other configurations. For more
+ * information about how to add tools to a ListToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.
+ *
+ *     @example
+ *     // Example of a ListToolGroup
+ *     var toolFactory = new OO.ui.ToolFactory();
+ *     var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ *     // Configure and register two tools
+ *     function SettingsTool() {
+ *         SettingsTool.parent.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( SettingsTool, OO.ui.Tool );
+ *     SettingsTool.static.name = 'settings';
+ *     SettingsTool.static.icon = 'settings';
+ *     SettingsTool.static.title = 'Change settings';
+ *     SettingsTool.prototype.onSelect = function () {
+ *         this.setActive( false );
+ *     };
+ *     toolFactory.register( SettingsTool );
+ *     // Register two more tools, nothing interesting here
+ *     function StuffTool() {
+ *         StuffTool.parent.apply( this, arguments );
+ *     }
+ *     OO.inheritClass( StuffTool, OO.ui.Tool );
+ *     StuffTool.static.name = 'stuff';
+ *     StuffTool.static.icon = 'ellipsis';
+ *     StuffTool.static.title = 'Change the world';
+ *     StuffTool.prototype.onSelect = function () {
+ *         this.setActive( false );
+ *     };
+ *     toolFactory.register( StuffTool );
+ *     toolbar.setup( [
+ *         {
+ *             // Configurations for list toolgroup.
+ *             type: 'list',
+ *             label: 'ListToolGroup',
+ *             indicator: 'down',
+ *             icon: 'picture',
+ *             title: 'This is the title, displayed when user moves the mouse over the list toolgroup',
+ *             header: 'This is the header',
+ *             include: [ 'settings', 'stuff' ],
+ *             allowCollapse: ['stuff']
+ *         }
+ *     ] );
+ *
+ *     // Create some UI around the toolbar and place it in the document
+ *     var frame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true
+ *     } );
+ *     frame.$element.append(
+ *         toolbar.$element
+ *     );
+ *     $( 'body' ).append( frame.$element );
+ *     // Build the toolbar. This must be done after the toolbar has been appended to the document.
+ *     toolbar.initialize();
  *
- * This layout allows some tools to be collapsible, controlled by a "More" / "Fewer" option at the
- * bottom of the main list. These are not automatically positioned at the bottom of the list; you
- * may want to use the 'promote' and 'demote' configuration options to achieve this.
+ * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  *
  * @class
  * @extends OO.ui.PopupToolGroup
@@ -10537,11 +10924,16 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
  * @param {Object} [config] Configuration options
- * @cfg {Array} [allowCollapse] List of tools that can be collapsed. Remaining tools will be always
- *  shown.
- * @cfg {Array} [forceExpand] List of tools that *may not* be collapsed. All remaining tools will be
- *  allowed to be collapsed.
- * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
+ * @cfg {Array} [allowCollapse] Allow the specified tools to be collapsed. By default, collapsible tools
+ *  will only be displayed if users click the ‘More’ option displayed at the bottom of the list. If
+ *  the list is expanded, a ‘Fewer’ option permits users to collapse the list again. Any tools that
+ *  are included in the toolgroup, but are not designated as collapsible, will always be displayed.
+ *  To open a collapsible list in its expanded state, set #expanded to 'true'.
+ * @cfg {Array} [forceExpand] Expand the specified tools. All other tools will be designated as collapsible.
+ *  Unless #expanded is set to true, the collapsible tools will be collapsed when the list is first opened.
+ * @cfg {boolean} [expanded=false] Expand collapsible tools. This config is only relevant if tools have
+ *  been designated as collapsible. When expanded is set to true, all tools in the group will be displayed
+ *  when the list is first opened. Users can collapse the list with a ‘Fewer’ option at the bottom.
  */
 OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
        // Allow passing positional parameters inside the config object
@@ -10560,7 +10952,7 @@ OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
        this.collapsibleTools = [];
 
        // Parent constructor
-       OO.ui.ListToolGroup.super.call( this, toolbar, config );
+       OO.ui.ListToolGroup.parent.call( this, toolbar, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-listToolGroup' );
@@ -10582,7 +10974,7 @@ OO.ui.ListToolGroup.static.name = 'list';
 OO.ui.ListToolGroup.prototype.populate = function () {
        var i, len, allowCollapse = [];
 
-       OO.ui.ListToolGroup.super.prototype.populate.call( this );
+       OO.ui.ListToolGroup.parent.prototype.populate.call( this );
 
        // Update the list of collapsible tools
        if ( this.allowCollapse !== undefined ) {
@@ -10608,7 +11000,7 @@ OO.ui.ListToolGroup.prototype.populate = function () {
 OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
        if ( this.expandCollapseTool === undefined ) {
                var ExpandCollapseTool = function () {
-                       ExpandCollapseTool.super.apply( this, arguments );
+                       ExpandCollapseTool.parent.apply( this, arguments );
                };
 
                OO.inheritClass( ExpandCollapseTool, OO.ui.Tool );
@@ -10640,9 +11032,9 @@ OO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {
        ) {
                // HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which
                // hides the popup list when a tool is selected) and call ToolGroup's implementation directly.
-               return OO.ui.ListToolGroup.super.super.prototype.onMouseKeyUp.call( this, e );
+               return OO.ui.ListToolGroup.parent.parent.prototype.onMouseKeyUp.call( this, e );
        } else {
-               return OO.ui.ListToolGroup.super.prototype.onMouseKeyUp.call( this, e );
+               return OO.ui.ListToolGroup.parent.prototype.onMouseKeyUp.call( this, e );
        }
 };
 
@@ -10659,16 +11051,113 @@ OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
 };
 
 /**
- * Drop down menu layout of tools as selectable menu items.
+ * MenuToolGroups 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.BarToolGroup BarToolGroup}
+ * and {@link OO.ui.ListToolGroup ListToolGroup}). MenuToolGroups contain selectable {@link OO.ui.Tool tools},
+ * which are displayed by label in a dropdown menu. The tool's title is used as the label text, and the
+ * menu label is updated to reflect which tool or tools are currently selected. If no tools are selected,
+ * the menu label is empty. The menu can be configured with an indicator, icon, title, and/or header.
  *
- * @class
- * @extends OO.ui.PopupToolGroup
+ * MenuToolGroups are created by a {@link OO.ui.ToolGroupFactory tool group factory} when the toolbar
+ * is set up. Note that all tools must define an {@link OO.ui.Tool#onUpdateState onUpdateState} method if
+ * a MenuToolGroup is used.
  *
- * @constructor
- * @param {OO.ui.Toolbar} toolbar
- * @param {Object} [config] Configuration options
- */
-OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
+ *     @example
+ *     // Example of a MenuToolGroup
+ *     var toolFactory = new OO.ui.ToolFactory();
+ *     var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ *     var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ *     // We will be placing status text in this element when tools are used
+ *     var $area = $( '<p>' ).text( 'An example of a MenuToolGroup. Select a tool from the dropdown menu.' );
+ *
+ *     // Define the tools that we're going to place in our toolbar
+ *
+ *     function SettingsTool() {
+ *         SettingsTool.parent.apply( this, arguments );
+ *         this.reallyActive = false;
+ *     }
+ *     OO.inheritClass( SettingsTool, OO.ui.Tool );
+ *     SettingsTool.static.name = 'settings';
+ *     SettingsTool.static.icon = 'settings';
+ *     SettingsTool.static.title = 'Change settings';
+ *     SettingsTool.prototype.onSelect = function () {
+ *         $area.text( 'Settings tool clicked!' );
+ *         // Toggle the active state on each click
+ *         this.reallyActive = !this.reallyActive;
+ *         this.setActive( this.reallyActive );
+ *         // To update the menu label
+ *         this.toolbar.emit( 'updateState' );
+ *     };
+ *     SettingsTool.prototype.onUpdateState = function () {
+ *     };
+ *     toolFactory.register( SettingsTool );
+ *
+ *     function StuffTool() {
+ *         StuffTool.parent.apply( this, arguments );
+ *         this.reallyActive = false;
+ *     }
+ *     OO.inheritClass( StuffTool, OO.ui.Tool );
+ *     StuffTool.static.name = 'stuff';
+ *     StuffTool.static.icon = 'ellipsis';
+ *     StuffTool.static.title = 'More stuff';
+ *     StuffTool.prototype.onSelect = function () {
+ *         $area.text( 'More stuff tool clicked!' );
+ *         // Toggle the active state on each click
+ *         this.reallyActive = !this.reallyActive;
+ *         this.setActive( this.reallyActive );
+ *         // To update the menu label
+ *         this.toolbar.emit( 'updateState' );
+ *     };
+ *     StuffTool.prototype.onUpdateState = function () {
+ *     };
+ *     toolFactory.register( StuffTool );
+ *
+ *     // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ *     // used once (but not all defined tools must be used).
+ *     toolbar.setup( [
+ *         {
+ *             type: 'menu',
+ *             header: 'This is the (optional) header',
+ *             title: 'This is the (optional) title',
+ *             indicator: 'down',
+ *             include: [ 'settings', 'stuff' ]
+ *         }
+ *     ] );
+ *
+ *     // Create some UI around the toolbar and place it in the document
+ *     var frame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         framed: true
+ *     } );
+ *     var contentFrame = new OO.ui.PanelLayout( {
+ *         expanded: false,
+ *         padded: true
+ *     } );
+ *     frame.$element.append(
+ *         toolbar.$element,
+ *         contentFrame.$element.append( $area )
+ *     );
+ *     $( 'body' ).append( frame.$element );
+ *
+ *     // Here is where the toolbar is actually built. This must be done after inserting it into the
+ *     // document.
+ *     toolbar.initialize();
+ *     toolbar.emit( 'updateState' );
+ *
+ * For more information about how to add tools to a MenuToolGroup, please see {@link OO.ui.ToolGroup toolgroup}.
+ * For more information about toolbars in general, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
+ *
+ * @class
+ * @extends OO.ui.PopupToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
        // Allow passing positional parameters inside the config object
        if ( OO.isPlainObject( toolbar ) && config === undefined ) {
                config = toolbar;
@@ -10679,7 +11168,7 @@ OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.MenuToolGroup.super.call( this, toolbar, config );
+       OO.ui.MenuToolGroup.parent.call( this, toolbar, config );
 
        // Events
        this.toolbar.connect( this, { updateState: 'onUpdateState' } );
@@ -10703,6 +11192,8 @@ OO.ui.MenuToolGroup.static.name = 'menu';
  *
  * When the state changes, the title of each active item in the menu will be joined together and
  * used as a label for the group. The label will be empty if none of the items are active.
+ *
+ * @private
  */
 OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
        var name,
@@ -10718,12 +11209,35 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
 };
 
 /**
- * Tool that shows a popup when selected.
+ * Popup tools open a popup window when they are selected from the {@link OO.ui.Toolbar toolbar}. Each popup tool is configured
+ * with a static name, title, and icon, as well with as any popup configurations. Unlike other tools, popup tools do not require that developers specify
+ * an #onSelect or #onUpdateState method, as these methods have been implemented already.
+ *
+ *     // Example of a popup tool. When selected, a popup tool displays
+ *     // a popup window.
+ *     function HelpTool( toolGroup, config ) {
+ *        OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ *            padded: true,
+ *            label: 'Help',
+ *            head: true
+ *        } }, config ) );
+ *        this.popup.$body.append( '<p>I am helpful!</p>' );
+ *     };
+ *     OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ *     HelpTool.static.name = 'help';
+ *     HelpTool.static.icon = 'help';
+ *     HelpTool.static.title = 'Help';
+ *     toolFactory.register( HelpTool );
+ *
+ * For an example of a toolbar that contains a popup tool, see {@link OO.ui.Toolbar toolbars}. For more information about
+ * toolbars in genreral, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars
  *
  * @abstract
  * @class
  * @extends OO.ui.Tool
- * @mixins OO.ui.PopupElement
+ * @mixins OO.ui.mixin.PopupElement
  *
  * @constructor
  * @param {OO.ui.ToolGroup} toolGroup
@@ -10737,10 +11251,10 @@ OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {
        }
 
        // Parent constructor
-       OO.ui.PopupTool.super.call( this, toolGroup, config );
+       OO.ui.PopupTool.parent.call( this, toolGroup, config );
 
        // Mixin constructors
-       OO.ui.PopupElement.call( this, config );
+       OO.ui.mixin.PopupElement.call( this, config );
 
        // Initialization
        this.$element
@@ -10751,7 +11265,7 @@ OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );
-OO.mixinClass( OO.ui.PopupTool, OO.ui.PopupElement );
+OO.mixinClass( OO.ui.PopupTool, OO.ui.mixin.PopupElement );
 
 /* Methods */
 
@@ -10778,8 +11292,33 @@ OO.ui.PopupTool.prototype.onUpdateState = function () {
 };
 
 /**
- * Tool that has a tool group inside. This is a bad workaround for the lack of proper hierarchical
- * menus in toolbars (T74159).
+ * A ToolGroupTool is a special sort of tool that can contain other {@link OO.ui.Tool tools}
+ * and {@link OO.ui.ToolGroup toolgroups}. The ToolGroupTool was specifically designed to be used
+ * inside a {@link OO.ui.BarToolGroup bar} toolgroup to provide access to additional tools from
+ * the bar item. Included tools will be displayed in a dropdown {@link OO.ui.ListToolGroup list}
+ * when the ToolGroupTool is selected.
+ *
+ *     // Example: ToolGroupTool with two nested tools, 'setting1' and 'setting2', defined elsewhere.
+ *
+ *     function SettingsTool() {
+ *         SettingsTool.parent.apply( this, arguments );
+ *     };
+ *     OO.inheritClass( SettingsTool, OO.ui.ToolGroupTool );
+ *     SettingsTool.static.name = 'settings';
+ *     SettingsTool.static.title = 'Change settings';
+ *     SettingsTool.static.groupConfig = {
+ *         icon: 'settings',
+ *         label: 'ToolGroupTool',
+ *         include: [  'setting1', 'setting2'  ]
+ *     };
+ *     toolFactory.register( SettingsTool );
+ *
+ * For more information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * Please note that this implementation is subject to change per [T74159] [2].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Toolbars#ToolGroupTool
+ * [2]: https://phabricator.wikimedia.org/T74159
  *
  * @abstract
  * @class
@@ -10797,7 +11336,7 @@ OO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {
        }
 
        // Parent constructor
-       OO.ui.ToolGroupTool.super.call( this, toolGroup, config );
+       OO.ui.ToolGroupTool.parent.call( this, toolGroup, config );
 
        // Properties
        this.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );
@@ -10819,7 +11358,11 @@ OO.inheritClass( OO.ui.ToolGroupTool, OO.ui.Tool );
 /* Static Properties */
 
 /**
- * Tool group configuration. See OO.ui.Toolbar#setup for the accepted values.
+ * Toolgroup configuration.
+ *
+ * The toolgroup configuration consists of the tools to include, as well as an icon and label
+ * to use for the bar item. Tools can be included by symbolic name, group, or with the
+ * wildcard selector. Please see {@link OO.ui.ToolGroup toolgroup} for more information.
  *
  * @property {Object.<string,Array>}
  */
@@ -10857,10 +11400,10 @@ OO.ui.ToolGroupTool.prototype.onUpdateState = function () {
 };
 
 /**
- * Build a OO.ui.ToolGroup from the configuration.
+ * Build a {@link OO.ui.ToolGroup toolgroup} from the specified configuration.
  *
- * @param {Object.<string,Array>} group Tool group configuration. See OO.ui.Toolbar#setup for the
- *   accepted values.
+ * @param {Object.<string,Array>} group Toolgroup configuration. Please see {@link OO.ui.ToolGroup toolgroup} for
+ *  more information.
  * @return {OO.ui.ListToolGroup}
  */
 OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
@@ -10875,26 +11418,26 @@ OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
 };
 
 /**
- * Mixin for OO.ui.Widget subclasses to provide OO.ui.GroupElement.
+ * Mixin for OO.ui.Widget subclasses to provide OO.ui.mixin.GroupElement.
  *
- * Use together with OO.ui.ItemWidget to make disabled state inheritable.
+ * Use together with OO.ui.mixin.ItemWidget to make disabled state inheritable.
  *
  * @private
  * @abstract
  * @class
- * @extends OO.ui.GroupElement
+ * @extends OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
-OO.ui.GroupWidget = function OoUiGroupWidget( config ) {
+OO.ui.mixin.GroupWidget = function OoUiMixinGroupWidget( config ) {
        // Parent constructor
-       OO.ui.GroupWidget.super.call( this, config );
+       OO.ui.mixin.GroupWidget.parent.call( this, config );
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.GroupWidget, OO.ui.GroupElement );
+OO.inheritClass( OO.ui.mixin.GroupWidget, OO.ui.mixin.GroupElement );
 
 /* Methods */
 
@@ -10906,14 +11449,14 @@ OO.inheritClass( OO.ui.GroupWidget, OO.ui.GroupElement );
  * @param {boolean} disabled Disable widget
  * @chainable
  */
-OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
+OO.ui.mixin.GroupWidget.prototype.setDisabled = function ( disabled ) {
        var i, len;
 
        // Parent method
        // Note: Calling #setDisabled this way assumes this is mixed into an OO.ui.Widget
        OO.ui.Widget.prototype.setDisabled.call( this, disabled );
 
-       // During construction, #setDisabled is called before the OO.ui.GroupElement constructor
+       // During construction, #setDisabled is called before the OO.ui.mixin.GroupElement constructor
        if ( this.items ) {
                for ( i = 0, len = this.items.length; i < len; i++ ) {
                        this.items[ i ].updateDisabled();
@@ -10924,12 +11467,12 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
 };
 
 /**
- * Mixin for widgets used as items in widgets that inherit OO.ui.GroupWidget.
+ * Mixin for widgets used as items in widgets that mix in OO.ui.mixin.GroupWidget.
  *
- * Item widgets have a reference to a OO.ui.GroupWidget while they are attached to the group. This
+ * Item widgets have a reference to a OO.ui.mixin.GroupWidget while they are attached to the group. This
  * allows bidirectional communication.
  *
- * Use together with OO.ui.GroupWidget to make disabled state inheritable.
+ * Use together with OO.ui.mixin.GroupWidget to make disabled state inheritable.
  *
  * @private
  * @abstract
@@ -10937,7 +11480,7 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
  *
  * @constructor
  */
-OO.ui.ItemWidget = function OoUiItemWidget() {
+OO.ui.mixin.ItemWidget = function OoUiMixinItemWidget() {
        //
 };
 
@@ -10950,7 +11493,7 @@ OO.ui.ItemWidget = function OoUiItemWidget() {
  *
  * @return {boolean} Widget is disabled
  */
-OO.ui.ItemWidget.prototype.isDisabled = function () {
+OO.ui.mixin.ItemWidget.prototype.isDisabled = function () {
        return this.disabled ||
                ( this.elementGroup instanceof OO.ui.Widget && this.elementGroup.isDisabled() );
 };
@@ -10958,10 +11501,10 @@ OO.ui.ItemWidget.prototype.isDisabled = function () {
 /**
  * Set group element is in.
  *
- * @param {OO.ui.GroupElement|null} group Group element, null if none
+ * @param {OO.ui.mixin.GroupElement|null} group Group element, null if none
  * @chainable
  */
-OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
+OO.ui.mixin.ItemWidget.prototype.setElementGroup = function ( group ) {
        // Parent method
        // Note: Calling #setElementGroup this way assumes this is mixed into an OO.ui.Element
        OO.ui.Element.prototype.setElementGroup.call( this, group );
@@ -10975,12 +11518,13 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
 /**
  * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.
  * Controls include moving items up and down, removing items, and adding different kinds of items.
- * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
+ *
+ * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.GroupElement
- * @mixins OO.ui.IconElement
+ * @mixins OO.ui.mixin.GroupElement
+ * @mixins OO.ui.mixin.IconElement
  *
  * @constructor
  * @param {OO.ui.OutlineSelectWidget} outline Outline to control
@@ -11000,11 +11544,11 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
        config = $.extend( { icon: 'add' }, config );
 
        // Parent constructor
-       OO.ui.OutlineControlsWidget.super.call( this, config );
+       OO.ui.OutlineControlsWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, config );
-       OO.ui.IconElement.call( this, config );
+       OO.ui.mixin.GroupElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
 
        // Properties
        this.outline = outline;
@@ -11049,8 +11593,8 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
 /* Setup */
 
 OO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.GroupElement );
-OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.GroupElement );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.IconElement );
 
 /* Events */
 
@@ -11136,7 +11680,7 @@ OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ToggleWidget.super.call( this, config );
+       OO.ui.ToggleWidget.parent.call( this, config );
 
        // Properties
        this.value = null;
@@ -11216,7 +11760,7 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11227,10 +11771,10 @@ OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ButtonGroupWidget.super.call( this, config );
+       OO.ui.ButtonGroupWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+       OO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonGroupWidget' );
@@ -11242,7 +11786,7 @@ OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.mixin.GroupElement );
 
 /**
  * ButtonWidget is a generic widget for buttons. A wide variety of looks,
@@ -11265,13 +11809,13 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.ButtonElement
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.TitledElement
- * @mixins OO.ui.FlaggedElement
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.ButtonElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11284,16 +11828,16 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ButtonWidget.super.call( this, config );
+       OO.ui.ButtonWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.ButtonElement.call( this, config );
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
-       OO.ui.FlaggedElement.call( this, config );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+       OO.ui.mixin.ButtonElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, 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 } ) );
 
        // Properties
        this.href = null;
@@ -11316,13 +11860,13 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.ButtonElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.IndicatorElement );
+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 );
 
 /* Methods */
 
@@ -11335,7 +11879,7 @@ OO.ui.ButtonWidget.prototype.onMouseDown = function ( e ) {
                this.$button.removeAttr( 'tabindex' );
        }
 
-       return OO.ui.ButtonElement.prototype.onMouseDown.call( this, e );
+       return OO.ui.mixin.ButtonElement.prototype.onMouseDown.call( this, e );
 };
 
 /**
@@ -11347,7 +11891,7 @@ OO.ui.ButtonWidget.prototype.onMouseUp = function ( e ) {
                this.$button.attr( 'tabindex', this.tabIndex );
        }
 
-       return OO.ui.ButtonElement.prototype.onMouseUp.call( this, e );
+       return OO.ui.mixin.ButtonElement.prototype.onMouseUp.call( this, e );
 };
 
 /**
@@ -11473,7 +12017,7 @@ OO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {
  *
  * @class
  * @extends OO.ui.ButtonWidget
- * @mixins OO.ui.PendingElement
+ * @mixins OO.ui.mixin.PendingElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11488,10 +12032,10 @@ OO.ui.ActionWidget = function OoUiActionWidget( config ) {
        config = $.extend( { framed: false }, config );
 
        // Parent constructor
-       OO.ui.ActionWidget.super.call( this, config );
+       OO.ui.ActionWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.PendingElement.call( this, config );
+       OO.ui.mixin.PendingElement.call( this, config );
 
        // Properties
        this.action = config.action || '';
@@ -11506,7 +12050,7 @@ OO.ui.ActionWidget = function OoUiActionWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ActionWidget, OO.ui.ButtonWidget );
-OO.mixinClass( OO.ui.ActionWidget, OO.ui.PendingElement );
+OO.mixinClass( OO.ui.ActionWidget, OO.ui.mixin.PendingElement );
 
 /* Events */
 
@@ -11578,7 +12122,7 @@ OO.ui.ActionWidget.prototype.propagateResize = function () {
  */
 OO.ui.ActionWidget.prototype.setIcon = function () {
        // Mixin method
-       OO.ui.IconElement.prototype.setIcon.apply( this, arguments );
+       OO.ui.mixin.IconElement.prototype.setIcon.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -11589,7 +12133,7 @@ OO.ui.ActionWidget.prototype.setIcon = function () {
  */
 OO.ui.ActionWidget.prototype.setLabel = function () {
        // Mixin method
-       OO.ui.LabelElement.prototype.setLabel.apply( this, arguments );
+       OO.ui.mixin.LabelElement.prototype.setLabel.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -11600,7 +12144,7 @@ OO.ui.ActionWidget.prototype.setLabel = function () {
  */
 OO.ui.ActionWidget.prototype.setFlags = function () {
        // Mixin method
-       OO.ui.FlaggedElement.prototype.setFlags.apply( this, arguments );
+       OO.ui.mixin.FlaggedElement.prototype.setFlags.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -11611,7 +12155,7 @@ OO.ui.ActionWidget.prototype.setFlags = function () {
  */
 OO.ui.ActionWidget.prototype.clearFlags = function () {
        // Mixin method
-       OO.ui.FlaggedElement.prototype.clearFlags.apply( this, arguments );
+       OO.ui.mixin.FlaggedElement.prototype.clearFlags.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -11625,7 +12169,7 @@ OO.ui.ActionWidget.prototype.clearFlags = function () {
  */
 OO.ui.ActionWidget.prototype.toggle = function () {
        // Parent method
-       OO.ui.ActionWidget.super.prototype.toggle.apply( this, arguments );
+       OO.ui.ActionWidget.parent.prototype.toggle.apply( this, arguments );
        this.propagateResize();
 
        return this;
@@ -11651,17 +12195,17 @@ OO.ui.ActionWidget.prototype.toggle = function () {
  *
  * @class
  * @extends OO.ui.ButtonWidget
- * @mixins OO.ui.PopupElement
+ * @mixins OO.ui.mixin.PopupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
        // Parent constructor
-       OO.ui.PopupButtonWidget.super.call( this, config );
+       OO.ui.PopupButtonWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.PopupElement.call( this, config );
+       OO.ui.mixin.PopupElement.call( this, config );
 
        // Events
        this.connect( this, { click: 'onAction' } );
@@ -11676,7 +12220,7 @@ OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );
-OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
+OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.mixin.PopupElement );
 
 /* Methods */
 
@@ -11692,9 +12236,9 @@ OO.ui.PopupButtonWidget.prototype.onAction = function () {
 /**
  * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a
  * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be
- * configured with {@link OO.ui.IconElement icons}, {@link OO.ui.IndicatorElement indicators},
- * {@link OO.ui.TitledElement titles}, {@link OO.ui.FlaggedElement styling flags},
- * and {@link OO.ui.LabelElement labels}. Please see
+ * configured with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators},
+ * {@link OO.ui.mixin.TitledElement titles}, {@link OO.ui.mixin.FlaggedElement styling flags},
+ * and {@link OO.ui.mixin.LabelElement labels}. Please see
  * the [OOjs UI documentation][1] on MediaWiki for more information.
  *
  *     @example
@@ -11713,13 +12257,13 @@ OO.ui.PopupButtonWidget.prototype.onAction = function () {
  *
  * @class
  * @extends OO.ui.ToggleWidget
- * @mixins OO.ui.ButtonElement
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.TitledElement
- * @mixins OO.ui.FlaggedElement
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.ButtonElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11731,16 +12275,16 @@ OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ToggleButtonWidget.super.call( this, config );
+       OO.ui.ToggleButtonWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.ButtonElement.call( this, config );
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
-       OO.ui.FlaggedElement.call( this, config );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+       OO.ui.mixin.ButtonElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, 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 } ) );
 
        // Events
        this.connect( this, { click: 'onAction' } );
@@ -11755,13 +12299,13 @@ OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonElement );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.FlaggedElement );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.ButtonElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.FlaggedElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Methods */
 
@@ -11788,7 +12332,7 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
        }
 
        // Parent method
-       OO.ui.ToggleButtonWidget.super.prototype.setValue.call( this, value );
+       OO.ui.ToggleButtonWidget.parent.prototype.setValue.call( this, value );
 
        return this;
 };
@@ -11800,7 +12344,7 @@ OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
        if ( this.$button ) {
                this.$button.removeAttr( 'aria-pressed' );
        }
-       OO.ui.ButtonElement.prototype.setButtonElement.call( this, $button );
+       OO.ui.mixin.ButtonElement.prototype.setButtonElement.call( this, $button );
        this.$button.attr( 'aria-pressed', this.value.toString() );
 };
 
@@ -11809,6 +12353,9 @@ OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
  * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
  * users can interact with it.
  *
+ * If you want to use this within a HTML form, such as a OO.ui.FormLayout, use
+ * OO.ui.DropdownInputWidget instead.
+ *
  *     @example
  *     // Example: A DropdownWidget with a menu that contains three options
  *     var dropDown = new OO.ui.DropdownWidget( {
@@ -11839,11 +12386,11 @@ OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.TitledElement
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11854,17 +12401,17 @@ OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
        config = $.extend( { indicator: 'down' }, config );
 
        // Parent constructor
-       OO.ui.DropdownWidget.super.call( this, config );
+       OO.ui.DropdownWidget.parent.call( this, config );
 
        // Properties (must be set before TabIndexedElement constructor call)
        this.$handle = this.$( '<span>' );
 
        // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
        // Properties
        this.menu = new OO.ui.MenuSelectWidget( $.extend( { widget: this }, config.menu ) );
@@ -11888,11 +12435,11 @@ OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.DropdownWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Methods */
 
@@ -11915,6 +12462,7 @@ OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
        var selectedLabel;
 
        if ( !item ) {
+               this.setLabel( null );
                return;
        }
 
@@ -11948,194 +12496,584 @@ OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
  * @param {jQuery.Event} e Key press event
  */
 OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
-       if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+       if ( !this.isDisabled() &&
+               ( ( e.which === OO.ui.Keys.SPACE && !this.menu.isVisible() ) || e.which === OO.ui.Keys.ENTER )
+       ) {
                this.menu.toggle();
                return false;
        }
 };
 
 /**
- * IconWidget is a generic widget for {@link OO.ui.IconElement icons}. In general, IconWidgets should be used with OO.ui.LabelWidget,
- * which creates a label that identifies the icon’s function. See the [OOjs UI documentation on MediaWiki] [1]
- * for a list of icons included in the library.
+ * SelectFileWidgets allow for selecting files, using the HTML5 File API. These
+ * widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link
+ * OO.ui.mixin.IndicatorElement indicators}.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
  *
  *     @example
- *     // An icon widget with a label
- *     var myIcon = new OO.ui.IconWidget( {
- *         icon: 'help',
- *         iconTitle: 'Help'
- *      } );
- *      // Create a label.
- *      var iconLabel = new OO.ui.LabelWidget( {
- *          label: 'Help'
- *      } );
- *      $( 'body' ).append( myIcon.$element, iconLabel.$element );
+ *     // Example of a file select widget
+ *     var selectFile = new OO.ui.SelectFileWidget();
+ *     $( 'body' ).append( selectFile.$element );
  *
- * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.TitledElement
- * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.mixin.IconElement
+ * @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
+ * @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.
+ * @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.
  */
-OO.ui.IconWidget = function OoUiIconWidget( config ) {
+OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
+       var dragHandler;
+
        // Configuration initialization
-       config = config || {};
+       config = $.extend( {
+               accept: null,
+               placeholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),
+               notsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),
+               droppable: true
+       }, config );
 
        // Parent constructor
-       OO.ui.IconWidget.super.call( this, config );
-
-       // Mixin constructors
-       OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
-       OO.ui.FlaggedElement.call( this, $.extend( {}, config, { $flagged: this.$element } ) );
-
-       // Initialization
-       this.$element.addClass( 'oo-ui-iconWidget' );
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.FlaggedElement );
+       OO.ui.SelectFileWidget.parent.call( this, config );
 
-/* Static Properties */
+       // Properties (must be set before TabIndexedElement constructor call)
+       this.$handle = $( '<span>' );
 
-OO.ui.IconWidget.static.tagName = '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 } ) );
 
-/**
- * IndicatorWidgets create indicators, which are small graphics that are generally used to draw
- * attention to the status of an item or to clarify the function of a control. For a list of
- * indicators included in the library, please see the [OOjs UI documentation on MediaWiki][1].
- *
- *     @example
- *     // Example of an indicator widget
- *     var indicator1 = new OO.ui.IndicatorWidget( {
- *         indicator: 'alert'
- *     } );
- *
- *     // Create a fieldset layout to add a label
- *     var fieldset = new OO.ui.FieldsetLayout();
- *     fieldset.addItems( [
- *         new OO.ui.FieldLayout( indicator1, { label: 'An alert indicator:' } )
- *     ] );
- *     $( 'body' ).append( fieldset.$element );
- *
- * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
- *
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
-       // Configuration initialization
-       config = config || {};
+       // Properties
+       this.isSupported = this.constructor.static.isSupported();
+       this.currentFile = null;
+       if ( Array.isArray( config.accept ) ) {
+               this.accept = config.accept;
+       } else {
+               this.accept = null;
+       }
+       this.placeholder = config.placeholder;
+       this.notsupported = config.notsupported;
+       this.onFileSelectedHandler = this.onFileSelected.bind( this );
 
-       // Parent constructor
-       OO.ui.IndicatorWidget.super.call( this, config );
+       this.clearButton = new OO.ui.ButtonWidget( {
+               classes: [ 'oo-ui-selectFileWidget-clearButton' ],
+               framed: false,
+               icon: 'remove',
+               disabled: this.disabled
+       } );
 
-       // Mixin constructors
-       OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+       // Events
+       this.$handle.on( {
+               keypress: this.onKeyPress.bind( this )
+       } );
+       this.clearButton.connect( this, {
+               click: 'onClearClick'
+       } );
+       if ( config.droppable ) {
+               dragHandler = this.onDragEnterOrOver.bind( this );
+               this.$handle.on( {
+                       dragenter: dragHandler,
+                       dragover: dragHandler,
+                       dragleave: this.onDragLeave.bind( this ),
+                       drop: this.onDrop.bind( this )
+               } );
+       }
 
        // Initialization
-       this.$element.addClass( 'oo-ui-indicatorWidget' );
+       this.addInput();
+       this.updateUI();
+       this.$label.addClass( 'oo-ui-selectFileWidget-label' );
+       this.$handle
+               .addClass( 'oo-ui-selectFileWidget-handle' )
+               .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' );
+       }
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
-
-/* Static Properties */
+OO.inheritClass( OO.ui.SelectFileWidget, OO.ui.Widget );
+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 );
 
-OO.ui.IndicatorWidget.static.tagName = 'span';
+/* Static properties */
 
 /**
- * InputWidget is the base class for all input widgets, which
- * include {@link OO.ui.TextInputWidget text inputs}, {@link OO.ui.CheckboxInputWidget checkbox inputs},
- * {@link OO.ui.RadioInputWidget radio inputs}, and {@link OO.ui.ButtonInputWidget button inputs}.
- * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
- *
- * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
- *
- * @abstract
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.FlaggedElement
- * @mixins OO.ui.TabIndexedElement
+ * Check if this widget is supported
  *
- * @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 {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
- *  before it is accepted.
+ * @static
+ * @return {boolean}
  */
-OO.ui.InputWidget = function OoUiInputWidget( config ) {
-       // Configuration initialization
-       config = config || {};
-
-       // Parent constructor
-       OO.ui.InputWidget.super.call( this, config );
-
-       // Properties
-       this.$input = this.getInputElement( config );
-       this.value = '';
-       this.inputFilter = config.inputFilter;
-
-       // Mixin constructors
-       OO.ui.FlaggedElement.call( this, config );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
-
-       // Events
-       this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
-
-       // Initialization
-       this.$input
-               .attr( 'name', config.name )
-               .prop( 'disabled', this.isDisabled() );
-       this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input, $( '<span>' ) );
-       this.setValue( config.value );
+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;
+       }
+       return OO.ui.SelectFileWidget.static.isSupportedCache;
 };
 
-/* Setup */
-
-OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.InputWidget, OO.ui.FlaggedElement );
-OO.mixinClass( OO.ui.InputWidget, OO.ui.TabIndexedElement );
+OO.ui.SelectFileWidget.static.isSupportedCache = null;
 
 /* Events */
 
 /**
  * @event change
  *
- * A change event is emitted when the value of the input changes.
+ * A change event is emitted when the on/off state of the toggle changes.
  *
- * @param {string} value
+ * @param {File|null} value New value
  */
 
 /* Methods */
 
 /**
- * Get input element.
- *
- * Subclasses of OO.ui.InputWidget use the `config` parameter to produce different elements in
- * different circumstances. The element must have a `value` property (like form elements).
+ * Get the current value of the field
  *
- * @private
- * @param {Object} config Configuration options
+ * @return {File|null}
+ */
+OO.ui.SelectFileWidget.prototype.getValue = function () {
+       return this.currentFile;
+};
+
+/**
+ * Set the current value of the field
+ *
+ * @param {File|null} file File to select
+ */
+OO.ui.SelectFileWidget.prototype.setValue = function ( file ) {
+       if ( this.currentFile !== file ) {
+               this.currentFile = file;
+               this.updateUI();
+               this.emit( 'change', this.currentFile );
+       }
+};
+
+/**
+ * Update the user interface when a file is selected or unselected
+ *
+ * @protected
+ */
+OO.ui.SelectFileWidget.prototype.updateUI = function () {
+       if ( !this.isSupported ) {
+               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 );
+       }
+
+       if ( this.$input ) {
+               this.$input.attr( 'title', this.getLabel() );
+       }
+};
+
+/**
+ * Add the input to the handle
+ *
+ * @private
+ */
+OO.ui.SelectFileWidget.prototype.addInput = function () {
+       if ( this.$input ) {
+               this.$input.remove();
+       }
+
+       if ( !this.isSupported ) {
+               this.$input = null;
+               return;
+       }
+
+       this.$input = $( '<input type="file">' );
+       this.$input.on( 'change', this.onFileSelectedHandler );
+       this.$input.attr( {
+               tabindex: -1,
+               title: this.getLabel()
+       } );
+       if ( this.accept ) {
+               this.$input.attr( 'accept', this.accept.join( ', ' ) );
+       }
+       this.$handle.append( this.$input );
+};
+
+/**
+ * Determine if we should accept this file
+ *
+ * @private
+ * @param {File} file
+ * @return {boolean}
+ */
+OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
+       var i, mime, mimeTest;
+
+       if ( !this.accept || file.type === '' ) {
+               return true;
+       }
+
+       mime = file.type;
+       for ( i = 0; i < this.accept.length; i++ ) {
+               mimeTest = this.accept[i];
+               if ( mimeTest === mime ) {
+                       return true;
+               } else if ( mimeTest.substr( -2 ) === '/*' ) {
+                       mimeTest = mimeTest.substr( 0, mimeTest.length - 1 );
+                       if ( mime.substr( 0, mimeTest.length ) === mimeTest ) {
+                               return true;
+                       }
+               }
+       }
+
+       return false;
+};
+
+/**
+ * Handle file selection from the input
+ *
+ * @private
+ * @param {jQuery.Event} e
+ */
+OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {
+       var file = null;
+
+       if ( e.target.files && e.target.files[0] ) {
+               file = e.target.files[0];
+               if ( !this.isFileAcceptable( file ) ) {
+                       file = null;
+               }
+       }
+
+       this.setValue( file );
+       this.addInput();
+};
+
+/**
+ * Handle clear button click events.
+ *
+ * @private
+ */
+OO.ui.SelectFileWidget.prototype.onClearClick = function () {
+       this.setValue( null );
+       return false;
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
+       if ( this.isSupported && !this.isDisabled() && this.$input &&
+               ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+       ) {
+               this.$input.click();
+               return false;
+       }
+};
+
+/**
+ * Handle drag enter and over events
+ *
+ * @private
+ * @param {jQuery.Event} e Drag event
+ */
+OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
+       var file = null,
+               dt = e.originalEvent.dataTransfer;
+
+       e.preventDefault();
+       e.stopPropagation();
+
+       if ( this.isDisabled() || !this.isSupported ) {
+               this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
+               dt.dropEffect = 'none';
+               return false;
+       }
+
+       if ( dt && dt.files && dt.files[0] ) {
+               file = dt.files[0];
+               if ( !this.isFileAcceptable( file ) ) {
+                       file = null;
+               }
+       } 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';
+       }
+       if ( file ) {
+               this.$element.addClass( 'oo-ui-selectFileWidget-canDrop' );
+       } else {
+               this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
+               dt.dropEffect = 'none';
+       }
+
+       return false;
+};
+
+/**
+ * Handle drag leave events
+ *
+ * @private
+ * @param {jQuery.Event} e Drag event
+ */
+OO.ui.SelectFileWidget.prototype.onDragLeave = function () {
+       this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
+};
+
+/**
+ * Handle drop events
+ *
+ * @private
+ * @param {jQuery.Event} e Drop event
+ */
+OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
+       var file = null,
+               dt = e.originalEvent.dataTransfer;
+
+       e.preventDefault();
+       e.stopPropagation();
+       this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
+
+       if ( this.isDisabled() || !this.isSupported ) {
+               return false;
+       }
+
+       if ( dt && dt.files && dt.files[0] ) {
+               file = dt.files[0];
+               if ( !this.isFileAcceptable( file ) ) {
+                       file = null;
+               }
+       }
+       if ( file ) {
+               this.setValue( file );
+       }
+
+       return false;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.SelectFileWidget.prototype.setDisabled = function ( state ) {
+       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, state );
+       if ( this.clearButton ) {
+               this.clearButton.setDisabled( state );
+       }
+       return this;
+};
+
+/**
+ * IconWidget is a generic widget for {@link OO.ui.mixin.IconElement icons}. In general, IconWidgets should be used with OO.ui.LabelWidget,
+ * which creates a label that identifies the icon’s function. See the [OOjs UI documentation on MediaWiki] [1]
+ * for a list of icons included in the library.
+ *
+ *     @example
+ *     // An icon widget with a label
+ *     var myIcon = new OO.ui.IconWidget( {
+ *         icon: 'help',
+ *         iconTitle: 'Help'
+ *      } );
+ *      // Create a label.
+ *      var iconLabel = new OO.ui.LabelWidget( {
+ *          label: 'Help'
+ *      } );
+ *      $( 'body' ).append( myIcon.$element, iconLabel.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IconWidget = function OoUiIconWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IconWidget.parent.call( this, config );
+
+       // Mixin constructors
+       OO.ui.mixin.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+       OO.ui.mixin.FlaggedElement.call( this, $.extend( {}, config, { $flagged: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-iconWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.mixin.FlaggedElement );
+
+/* Static Properties */
+
+OO.ui.IconWidget.static.tagName = 'span';
+
+/**
+ * IndicatorWidgets create indicators, which are small graphics that are generally used to draw
+ * attention to the status of an item or to clarify the function of a control. For a list of
+ * indicators included in the library, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example of an indicator widget
+ *     var indicator1 = new OO.ui.IndicatorWidget( {
+ *         indicator: 'alert'
+ *     } );
+ *
+ *     // Create a fieldset layout to add a label
+ *     var fieldset = new OO.ui.FieldsetLayout();
+ *     fieldset.addItems( [
+ *         new OO.ui.FieldLayout( indicator1, { label: 'An alert indicator:' } )
+ *     ] );
+ *     $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.IndicatorWidget.parent.call( this, config );
+
+       // Mixin constructors
+       OO.ui.mixin.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-indicatorWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.mixin.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IndicatorWidget.static.tagName = 'span';
+
+/**
+ * InputWidget is the base class for all input widgets, which
+ * include {@link OO.ui.TextInputWidget text inputs}, {@link OO.ui.CheckboxInputWidget checkbox inputs},
+ * {@link OO.ui.RadioInputWidget radio inputs}, and {@link OO.ui.ButtonInputWidget button inputs}.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
+ *
+ * @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 {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
+ *  before it is accepted.
+ */
+OO.ui.InputWidget = function OoUiInputWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.InputWidget.parent.call( this, config );
+
+       // Properties
+       this.$input = this.getInputElement( config );
+       this.value = '';
+       this.inputFilter = config.inputFilter;
+
+       // Mixin constructors
+       OO.ui.mixin.FlaggedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
+
+       // Events
+       this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
+
+       // Initialization
+       this.$input
+               .attr( 'name', config.name )
+               .prop( 'disabled', this.isDisabled() );
+       this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input, $( '<span>' ) );
+       this.setValue( config.value );
+};
+
+/* Setup */
+
+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 );
+
+/* Static Properties */
+
+OO.ui.InputWidget.static.supportsSimpleLabel = true;
+
+/* Events */
+
+/**
+ * @event change
+ *
+ * A change event is emitted when the value of the input changes.
+ *
+ * @param {string} value
+ */
+
+/* Methods */
+
+/**
+ * Get input element.
+ *
+ * Subclasses of OO.ui.InputWidget use the `config` parameter to produce different elements in
+ * different circumstances. The element must have a `value` property (like form elements).
+ *
+ * @protected
+ * @param {Object} config Configuration options
  * @return {jQuery} Input element
  */
 OO.ui.InputWidget.prototype.getInputElement = function () {
@@ -12243,7 +13181,7 @@ OO.ui.InputWidget.prototype.simulateLabelClick = function () {
  * @inheritdoc
  */
 OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
-       OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
+       OO.ui.InputWidget.parent.prototype.setDisabled.call( this, state );
        if ( this.$input ) {
                this.$input.prop( 'disabled', this.isDisabled() );
        }
@@ -12290,11 +13228,11 @@ OO.ui.InputWidget.prototype.blur = function () {
  *
  * @class
  * @extends OO.ui.InputWidget
- * @mixins OO.ui.ButtonElement
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.mixin.ButtonElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.TitledElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -12312,14 +13250,14 @@ OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
        this.useInputTag = config.useInputTag;
 
        // Parent constructor
-       OO.ui.ButtonInputWidget.super.call( this, config );
+       OO.ui.ButtonInputWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+       OO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
 
        // Initialization
        if ( !config.useInputTag ) {
@@ -12331,21 +13269,23 @@ OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );
-OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.ButtonElement );
-OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.ButtonElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.IconElement );
+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 );
 
 /* Methods */
 
 /**
  * @inheritdoc
- * @private
+ * @protected
  */
 OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
-       var html = '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + config.type + '">';
-       return $( html );
+       var type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ?
+               config.type :
+               'button';
+       return $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + type + '">' );
 };
 
 /**
@@ -12358,7 +13298,7 @@ OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
  * @chainable
  */
 OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
-       OO.ui.LabelElement.prototype.setLabel.call( this, label );
+       OO.ui.mixin.LabelElement.prototype.setLabel.call( this, label );
 
        if ( this.useInputTag ) {
                if ( typeof label === 'function' ) {
@@ -12387,7 +13327,7 @@ OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
  */
 OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
        if ( !this.useInputTag ) {
-               OO.ui.ButtonInputWidget.super.prototype.setValue.call( this, value );
+               OO.ui.ButtonInputWidget.parent.prototype.setValue.call( this, value );
        }
        return this;
 };
@@ -12438,7 +13378,7 @@ OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.CheckboxInputWidget.super.call( this, config );
+       OO.ui.CheckboxInputWidget.parent.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-checkboxInputWidget' );
@@ -12453,7 +13393,7 @@ OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
 
 /**
  * @inheritdoc
- * @private
+ * @protected
  */
 OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
        return $( '<input type="checkbox" />' );
@@ -12509,17 +13449,22 @@ OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
  * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for
  * more information about input widgets.
  *
+ * A DropdownInputWidget always has a value (one of the options is always selected), unless there
+ * are no options. If no `value` configuration option is provided, the first option is selected.
+ * If you need a state representing no value (no option being selected), use a DropdownWidget.
+ *
+ * This and OO.ui.RadioSelectInputWidget support the same configuration options.
+ *
  *     @example
  *     // Example: A DropdownInputWidget with three options
- *     var dropDown = new OO.ui.DropdownInputWidget( {
- *         label: 'Dropdown menu: Select a menu option',
+ *     var dropdownInput = new OO.ui.DropdownInputWidget( {
  *         options: [
- *             { data: 'a', label: 'First' } ,
- *             { data: 'b', label: 'Second'} ,
+ *             { data: 'a', label: 'First' },
+ *             { data: 'b', label: 'Second'},
  *             { data: 'c', label: 'Third' }
  *         ]
  *     } );
- *     $( 'body' ).append( dropDown.$element );
+ *     $( 'body' ).append( dropdownInput.$element );
  *
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
  *
@@ -12538,7 +13483,7 @@ OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
        this.dropdownWidget = new OO.ui.DropdownWidget();
 
        // Parent constructor
-       OO.ui.DropdownInputWidget.super.call( this, config );
+       OO.ui.DropdownInputWidget.parent.call( this, config );
 
        // Events
        this.dropdownWidget.getMenu().connect( this, { select: 'onMenuSelect' } );
@@ -12558,7 +13503,7 @@ OO.inheritClass( OO.ui.DropdownInputWidget, OO.ui.InputWidget );
 
 /**
  * @inheritdoc
- * @private
+ * @protected
  */
 OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
        return $( '<input type="hidden">' );
@@ -12578,8 +13523,9 @@ OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
  * @inheritdoc
  */
 OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
+       value = this.cleanUpValue( value );
        this.dropdownWidget.getMenu().selectItemByData( value );
-       OO.ui.DropdownInputWidget.super.prototype.setValue.call( this, value );
+       OO.ui.DropdownInputWidget.parent.prototype.setValue.call( this, value );
        return this;
 };
 
@@ -12588,7 +13534,7 @@ OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
  */
 OO.ui.DropdownInputWidget.prototype.setDisabled = function ( state ) {
        this.dropdownWidget.setDisabled( state );
-       OO.ui.DropdownInputWidget.super.prototype.setDisabled.call( this, state );
+       OO.ui.DropdownInputWidget.parent.prototype.setDisabled.call( this, state );
        return this;
 };
 
@@ -12599,15 +13545,18 @@ OO.ui.DropdownInputWidget.prototype.setDisabled = function ( state ) {
  * @chainable
  */
 OO.ui.DropdownInputWidget.prototype.setOptions = function ( options ) {
-       var value = this.getValue();
+       var
+               value = this.getValue(),
+               widget = this;
 
        // Rebuild the dropdown menu
        this.dropdownWidget.getMenu()
                .clearItems()
                .addItems( options.map( function ( opt ) {
+                       var optValue = widget.cleanUpValue( opt.data );
                        return new OO.ui.MenuOptionWidget( {
-                               data: opt.data,
-                               label: opt.label !== undefined ? opt.label : opt.data
+                               data: optValue,
+                               label: opt.label !== undefined ? opt.label : optValue
                        } );
                } ) );
 
@@ -12687,7 +13636,7 @@ OO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.RadioInputWidget.super.call( this, config );
+       OO.ui.RadioInputWidget.parent.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-radioInputWidget' );
@@ -12702,7 +13651,7 @@ OO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );
 
 /**
  * @inheritdoc
- * @private
+ * @protected
  */
 OO.ui.RadioInputWidget.prototype.getInputElement = function () {
        return $( '<input type="radio" />' );
@@ -12736,10 +13685,141 @@ OO.ui.RadioInputWidget.prototype.isSelected = function () {
        return this.$input.prop( '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
+ * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for
+ * more information about input widgets.
+ *
+ * This and OO.ui.DropdownInputWidget support the same configuration options.
+ *
+ *     @example
+ *     // Example: A RadioSelectInputWidget with three options
+ *     var radioSelectInput = new OO.ui.RadioSelectInputWidget( {
+ *         options: [
+ *             { data: 'a', label: 'First' },
+ *             { data: 'b', label: 'Second'},
+ *             { data: 'c', label: 'Third' }
+ *         ]
+ *     } );
+ *     $( 'body' ).append( radioSelectInput.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ */
+OO.ui.RadioSelectInputWidget = function OoUiRadioSelectInputWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties (must be done before parent constructor which calls #setDisabled)
+       this.radioSelectWidget = new OO.ui.RadioSelectWidget();
+
+       // Parent constructor
+       OO.ui.RadioSelectInputWidget.parent.call( this, config );
+
+       // Events
+       this.radioSelectWidget.connect( this, { select: 'onMenuSelect' } );
+
+       // Initialization
+       this.setOptions( config.options || [] );
+       this.$element
+               .addClass( 'oo-ui-radioSelectInputWidget' )
+               .append( this.radioSelectWidget.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioSelectInputWidget, OO.ui.InputWidget );
+
+/* Static Properties */
+
+OO.ui.RadioSelectInputWidget.static.supportsSimpleLabel = false;
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ * @protected
+ */
+OO.ui.RadioSelectInputWidget.prototype.getInputElement = function () {
+       return $( '<input type="hidden">' );
+};
+
+/**
+ * Handles menu select events.
+ *
+ * @private
+ * @param {OO.ui.RadioOptionWidget} item Selected menu item
+ */
+OO.ui.RadioSelectInputWidget.prototype.onMenuSelect = function ( item ) {
+       this.setValue( item.getData() );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioSelectInputWidget.prototype.setValue = function ( value ) {
+       value = this.cleanUpValue( value );
+       this.radioSelectWidget.selectItemByData( value );
+       OO.ui.RadioSelectInputWidget.parent.prototype.setValue.call( this, value );
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioSelectInputWidget.prototype.setDisabled = function ( state ) {
+       this.radioSelectWidget.setDisabled( state );
+       OO.ui.RadioSelectInputWidget.parent.prototype.setDisabled.call( this, state );
+       return this;
+};
+
+/**
+ * Set the options available for this input.
+ *
+ * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`
+ * @chainable
+ */
+OO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {
+       var
+               value = this.getValue(),
+               widget = this;
+
+       // Rebuild the radioSelect menu
+       this.radioSelectWidget
+               .clearItems()
+               .addItems( options.map( function ( opt ) {
+                       var optValue = widget.cleanUpValue( opt.data );
+                       return new OO.ui.RadioOptionWidget( {
+                               data: optValue,
+                               label: opt.label !== undefined ? opt.label : optValue
+                       } );
+               } ) );
+
+       // Restore the previous value, or reset to something sensible
+       if ( this.radioSelectWidget.getItemFromData( value ) ) {
+               // Previous value is still available, ensure consistency with the radioSelect
+               this.setValue( value );
+       } else {
+               // No longer valid, reset
+               if ( options.length ) {
+                       this.setValue( options[ 0 ].data );
+               }
+       }
+
+       return this;
+};
+
 /**
  * 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
- * with {@link OO.ui.IconElement icons}, {@link OO.ui.IndicatorElement indicators}, an optional
+ * with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators}, an optional
  * validation-pattern (used to determine if an input value is valid or not) and an input filter,
  * which modifies incoming values rather than validating them.
  * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
@@ -12757,26 +13837,31 @@ OO.ui.RadioInputWidget.prototype.isSelected = function () {
  *
  * @class
  * @extends OO.ui.InputWidget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.PendingElement
- * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.PendingElement
+ * @mixins OO.ui.mixin.LabelElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [type='text'] The value of the HTML `type` attribute
+ * @cfg {string} [type='text'] The value of the HTML `type` attribute: 'text', 'password', 'search',
+ *  'email' or 'url'. Ignored if `multiline` is true.
  * @cfg {string} [placeholder] Placeholder text
  * @cfg {boolean} [autofocus=false] Use an HTML `autofocus` attribute to
  *  instruct the browser to focus this widget.
  * @cfg {boolean} [readOnly=false] Prevent changes to the value of the text input.
  * @cfg {number} [maxLength] Maximum number of characters allowed in the input.
  * @cfg {boolean} [multiline=false] Allow multiple lines of text
+ * @cfg {number} [rows] If multiline, number of visible lines in textarea. If used with `autosize`,
+ *  specifies minimum number of rows to display.
  * @cfg {boolean} [autosize=false] Automatically resize the text input to fit its content.
  *  Use the #maxRows config to specify a maximum number of displayed rows.
- * @cfg {boolean} [maxRows=10] Maximum number of rows to display when #autosize is set to true.
+ * @cfg {boolean} [maxRows] Maximum number of rows to display when #autosize is set to true.
+ *  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} [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'
  *  (the value must contain only numbers); when RegExp, a regular expression that must match the
@@ -12787,24 +13872,24 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Configuration initialization
        config = $.extend( {
                type: 'text',
-               labelPosition: 'after',
-               maxRows: 10
+               labelPosition: 'after'
        }, config );
 
        // Parent constructor
-       OO.ui.TextInputWidget.super.call( this, config );
+       OO.ui.TextInputWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
-       OO.ui.PendingElement.call( this, config );
-       OO.ui.LabelElement.call( this, config );
+       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, config );
 
        // Properties
        this.readOnly = false;
        this.multiline = !!config.multiline;
        this.autosize = !!config.autosize;
-       this.maxRows = config.maxRows;
+       this.minRows = config.rows !== undefined ? config.rows : '';
+       this.maxRows = config.maxRows || Math.max( 2 * ( this.minRows || 0 ), 10 );
        this.validate = null;
 
        // Clone for resizing
@@ -12850,6 +13935,12 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
                this.$input.attr( 'required', 'required' );
                this.$input.attr( 'aria-required', 'true' );
        }
+       if ( config.autocomplete === false ) {
+               this.$input.attr( 'autocomplete', 'off' );
+       }
+       if ( this.multiline && config.rows ) {
+               this.$input.attr( 'rows', config.rows );
+       }
        if ( this.label || config.autosize ) {
                this.installParentChangeDetector();
        }
@@ -12858,10 +13949,10 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.PendingElement );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.IconElement );
+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 */
 
@@ -13060,7 +14151,7 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
        if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
                this.$clone
                        .val( this.$input.val() )
-                       .attr( 'rows', '' )
+                       .attr( 'rows', this.minRows )
                        // Set inline height property to 0 to measure scroll height
                        .css( 'height', 0 );
 
@@ -13102,10 +14193,13 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
 
 /**
  * @inheritdoc
- * @private
+ * @protected
  */
 OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
-       return config.multiline ? $( '<textarea>' ) : $( '<input type="' + config.type + '" />' );
+       var type = [ 'text', 'password', 'search', 'email', 'url' ].indexOf( config.type ) !== -1 ?
+               config.type :
+               'text';
+       return config.multiline ? $( '<textarea>' ) : $( '<input type="' + type + '" />' );
 };
 
 /**
@@ -13320,7 +14414,7 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -13335,13 +14429,13 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ComboBoxWidget.super.call( this, config );
+       OO.ui.ComboBoxWidget.parent.call( this, config );
 
        // Properties (must be set before TabIndexedElement constructor call)
        this.$indicator = this.$( '<span>' );
 
        // Mixin constructors
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$indicator } ) );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$indicator } ) );
 
        // Properties
        this.$overlay = config.$overlay || this.$element;
@@ -13390,7 +14484,7 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ComboBoxWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ComboBoxWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.ComboBoxWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Methods */
 
@@ -13402,6 +14496,14 @@ OO.ui.ComboBoxWidget.prototype.getMenu = function () {
        return this.menu;
 };
 
+/**
+ * Get the combobox's text input widget.
+ * @return {OO.ui.TextInputWidget} Text input widget
+ */
+OO.ui.ComboBoxWidget.prototype.getInput = function () {
+       return this.input;
+};
+
 /**
  * Handle input change events.
  *
@@ -13491,7 +14593,7 @@ OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
  */
 OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
        // Parent method
-       OO.ui.ComboBoxWidget.super.prototype.setDisabled.call( this, disabled );
+       OO.ui.ComboBoxWidget.parent.prototype.setDisabled.call( this, disabled );
 
        if ( this.input ) {
                this.input.setDisabled( this.isDisabled() );
@@ -13535,7 +14637,7 @@ OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.mixin.LabelElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -13547,11 +14649,11 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.LabelWidget.super.call( this, config );
+       OO.ui.LabelWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );
-       OO.ui.TitledElement.call( this, config );
+       OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );
+       OO.ui.mixin.TitledElement.call( this, config );
 
        // Properties
        this.input = config.input;
@@ -13568,8 +14670,8 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.LabelWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.mixin.TitledElement );
 
 /* Static Properties */
 
@@ -13598,8 +14700,8 @@ OO.ui.LabelWidget.prototype.onClick = function () {
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.FlaggedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -13609,12 +14711,12 @@ OO.ui.OptionWidget = function OoUiOptionWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.OptionWidget.super.call( this, config );
+       OO.ui.OptionWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.ItemWidget.call( this );
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.FlaggedElement.call( this, config );
+       OO.ui.mixin.ItemWidget.call( this );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.FlaggedElement.call( this, config );
 
        // Properties
        this.selected = false;
@@ -13625,6 +14727,7 @@ OO.ui.OptionWidget = function OoUiOptionWidget( config ) {
        this.$element
                .data( 'oo-ui-optionWidget', this )
                .attr( 'role', 'option' )
+               .attr( 'aria-selected', 'false' )
                .addClass( 'oo-ui-optionWidget' )
                .append( this.$label );
 };
@@ -13632,9 +14735,9 @@ OO.ui.OptionWidget = function OoUiOptionWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.ItemWidget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.ItemWidget );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.mixin.FlaggedElement );
 
 /* Static Properties */
 
@@ -13768,7 +14871,7 @@ OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
 
 /**
  * DecoratedOptionWidgets are {@link OO.ui.OptionWidget options} that can be configured
- * with an {@link OO.ui.IconElement icon} and/or {@link OO.ui.IndicatorElement indicator}.
+ * with an {@link OO.ui.mixin.IconElement icon} and/or {@link OO.ui.mixin.IndicatorElement indicator}.
  * This class is used with OO.ui.SelectWidget to create a selection of mutually exclusive
  * options. For more information about options and selects, please see the
  * [OOjs UI documentation on MediaWiki][1].
@@ -13795,19 +14898,19 @@ OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
  *
  * @class
  * @extends OO.ui.OptionWidget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.IndicatorElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( config ) {
        // Parent constructor
-       OO.ui.DecoratedOptionWidget.super.call( this, config );
+       OO.ui.DecoratedOptionWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.IconElement.call( this, config );
-       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
 
        // Initialization
        this.$element
@@ -13819,11 +14922,11 @@ OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.DecoratedOptionWidget, OO.ui.OptionWidget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IndicatorElement );
 
 /**
- * ButtonOptionWidget is a special type of {@link OO.ui.ButtonElement button element} that
+ * ButtonOptionWidget is a special type of {@link OO.ui.mixin.ButtonElement button element} that
  * can be selected and configured with data. The class is
  * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the
  * [OOjs UI documentation on MediaWiki] [1] for more information.
@@ -13832,8 +14935,8 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
  *
  * @class
  * @extends OO.ui.DecoratedOptionWidget
- * @mixins OO.ui.ButtonElement
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.ButtonElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -13843,11 +14946,11 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
        config = $.extend( { tabIndex: -1 }, config );
 
        // Parent constructor
-       OO.ui.ButtonOptionWidget.super.call( this, config );
+       OO.ui.ButtonOptionWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.ButtonElement.call( this, config );
-       OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+       OO.ui.mixin.ButtonElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonOptionWidget' );
@@ -13858,8 +14961,8 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
-OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonElement );
-OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Static Properties */
 
@@ -13874,7 +14977,7 @@ OO.ui.ButtonOptionWidget.static.highlightable = false;
  * @inheritdoc
  */
 OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
-       OO.ui.ButtonOptionWidget.super.prototype.setSelected.call( this, state );
+       OO.ui.ButtonOptionWidget.parent.prototype.setSelected.call( this, state );
 
        if ( this.constructor.static.selectable ) {
                this.setActive( state );
@@ -13904,7 +15007,10 @@ OO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {
        this.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );
 
        // Parent constructor
-       OO.ui.RadioOptionWidget.super.call( this, config );
+       OO.ui.RadioOptionWidget.parent.call( this, config );
+
+       // Events
+       this.radio.$input.on( 'focus', this.onInputFocus.bind( this ) );
 
        // Initialization
        this.$element
@@ -13928,11 +15034,20 @@ OO.ui.RadioOptionWidget.static.tagName = 'label';
 
 /* Methods */
 
+/**
+ * @param {jQuery.Event} e Focus event
+ * @private
+ */
+OO.ui.RadioOptionWidget.prototype.onInputFocus = function () {
+       this.radio.$input.blur();
+       this.$element.parent().focus();
+};
+
 /**
  * @inheritdoc
  */
 OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
-       OO.ui.RadioOptionWidget.super.prototype.setSelected.call( this, state );
+       OO.ui.RadioOptionWidget.parent.prototype.setSelected.call( this, state );
 
        this.radio.setSelected( state );
 
@@ -13943,7 +15058,7 @@ OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
  * @inheritdoc
  */
 OO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {
-       OO.ui.RadioOptionWidget.super.prototype.setDisabled.call( this, disabled );
+       OO.ui.RadioOptionWidget.parent.prototype.setDisabled.call( this, disabled );
 
        this.radio.setDisabled( this.isDisabled() );
 
@@ -13968,7 +15083,7 @@ OO.ui.MenuOptionWidget = function OoUiMenuOptionWidget( config ) {
        config = $.extend( { icon: 'check' }, config );
 
        // Parent constructor
-       OO.ui.MenuOptionWidget.super.call( this, config );
+       OO.ui.MenuOptionWidget.parent.call( this, config );
 
        // Initialization
        this.$element
@@ -14024,7 +15139,7 @@ OO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect = true;
  */
 OO.ui.MenuSectionOptionWidget = function OoUiMenuSectionOptionWidget( config ) {
        // Parent constructor
-       OO.ui.MenuSectionOptionWidget.super.call( this, config );
+       OO.ui.MenuSectionOptionWidget.parent.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-menuSectionOptionWidget' );
@@ -14060,7 +15175,7 @@ OO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.OutlineOptionWidget.super.call( this, config );
+       OO.ui.OutlineOptionWidget.parent.call( this, config );
 
        // Properties
        this.level = 0;
@@ -14189,7 +15304,7 @@ OO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.TabOptionWidget.super.call( this, config );
+       OO.ui.TabOptionWidget.parent.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-tabOptionWidget' );
@@ -14224,7 +15339,7 @@ OO.ui.TabOptionWidget.static.highlightable = false;
  *
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.mixin.LabelElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -14257,14 +15372,14 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.PopupWidget.super.call( this, config );
+       OO.ui.PopupWidget.parent.call( this, config );
 
        // Properties (must be set before ClippableElement constructor call)
        this.$body = $( '<div>' );
 
        // Mixin constructors
-       OO.ui.LabelElement.call( this, config );
-       OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$body } ) );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$body } ) );
 
        // Properties
        this.$popup = $( '<div>' );
@@ -14321,8 +15436,8 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.ClippableElement );
 
 /* Methods */
 
@@ -14443,7 +15558,7 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
        var change = show !== this.isVisible();
 
        // Parent method
-       OO.ui.PopupWidget.super.prototype.toggle.call( this, show );
+       OO.ui.PopupWidget.parent.prototype.toggle.call( this, show );
 
        if ( change ) {
                if ( show ) {
@@ -14640,7 +15755,7 @@ OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.ProgressBarWidget.super.call( this, config );
+       OO.ui.ProgressBarWidget.parent.call( this, config );
 
        // Properties
        this.$bar = $( '<div>' );
@@ -14699,7 +15814,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
- * field. Unlike {@link OO.ui.LookupElement lookup menus}, search result menus are always visible to the user.
+ * 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.
  *
@@ -14721,7 +15836,7 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.SearchWidget.super.call( this, config );
+       OO.ui.SearchWidget.parent.call( this, config );
 
        // Properties
        this.query = new OO.ui.TextInputWidget( {
@@ -14907,7 +16022,7 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  * @abstract
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.mixin.GroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -14921,10 +16036,10 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.SelectWidget.super.call( this, config );
+       OO.ui.SelectWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );
+       OO.ui.mixin.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );
 
        // Properties
        this.pressed = false;
@@ -14932,8 +16047,14 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        this.onMouseUpHandler = this.onMouseUp.bind( this );
        this.onMouseMoveHandler = this.onMouseMove.bind( this );
        this.onKeyDownHandler = this.onKeyDown.bind( this );
+       this.onKeyPressHandler = this.onKeyPress.bind( this );
+       this.keyPressBuffer = '';
+       this.keyPressBufferTimer = null;
 
        // Events
+       this.connect( this, {
+               toggle: 'onToggle'
+       } );
        this.$element.on( {
                mousedown: this.onMouseDown.bind( this ),
                mouseover: this.onMouseOver.bind( this ),
@@ -14954,8 +16075,13 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
 OO.inheritClass( OO.ui.SelectWidget, OO.ui.Widget );
 
 // Need to mixin base class as well
-OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupElement );
-OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
+OO.mixinClass( OO.ui.SelectWidget, OO.ui.mixin.GroupElement );
+OO.mixinClass( OO.ui.SelectWidget, OO.ui.mixin.GroupWidget );
+
+/* Static */
+OO.ui.SelectWidget.static.passAllFilter = function () {
+       return true;
+};
 
 /* Events */
 
@@ -15146,11 +16272,13 @@ OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
                                break;
                        case OO.ui.Keys.UP:
                        case OO.ui.Keys.LEFT:
+                               this.clearKeyPressBuffer();
                                nextItem = this.getRelativeSelectableItem( currentItem, -1 );
                                handled = true;
                                break;
                        case OO.ui.Keys.DOWN:
                        case OO.ui.Keys.RIGHT:
+                               this.clearKeyPressBuffer();
                                nextItem = this.getRelativeSelectableItem( currentItem, 1 );
                                handled = true;
                                break;
@@ -15160,6 +16288,7 @@ OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
                                        currentItem.setHighlighted( false );
                                }
                                this.unbindKeyDownListener();
+                               this.unbindKeyPressListener();
                                // Don't prevent tabbing away / defocusing
                                handled = false;
                                break;
@@ -15192,12 +16321,140 @@ OO.ui.SelectWidget.prototype.bindKeyDownListener = function () {
 };
 
 /**
- * Unbind key down listener.
+ * Unbind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
+       this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
+/**
+ * Clear the key-press buffer
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.clearKeyPressBuffer = function () {
+       if ( this.keyPressBufferTimer ) {
+               clearTimeout( this.keyPressBufferTimer );
+               this.keyPressBufferTimer = null;
+       }
+       this.keyPressBuffer = '';
+};
+
+/**
+ * Handle key press events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.SelectWidget.prototype.onKeyPress = function ( e ) {
+       var c, filter, item;
+
+       if ( !e.charCode ) {
+               if ( e.keyCode === OO.ui.Keys.BACKSPACE && this.keyPressBuffer !== '' ) {
+                       this.keyPressBuffer = this.keyPressBuffer.substr( 0, this.keyPressBuffer.length - 1 );
+                       return false;
+               }
+               return;
+       }
+       if ( String.fromCodePoint ) {
+               c = String.fromCodePoint( e.charCode );
+       } else {
+               c = String.fromCharCode( e.charCode );
+       }
+
+       if ( this.keyPressBufferTimer ) {
+               clearTimeout( this.keyPressBufferTimer );
+       }
+       this.keyPressBufferTimer = setTimeout( this.clearKeyPressBuffer.bind( this ), 1500 );
+
+       item = this.getHighlightedItem() || this.getSelectedItem();
+
+       if ( this.keyPressBuffer === c ) {
+               // Common (if weird) special case: typing "xxxx" will cycle through all
+               // the items beginning with "x".
+               if ( item ) {
+                       item = this.getRelativeSelectableItem( item, 1 );
+               }
+       } else {
+               this.keyPressBuffer += c;
+       }
+
+       filter = this.getItemMatcher( this.keyPressBuffer );
+       if ( !item || !filter( item ) ) {
+               item = this.getRelativeSelectableItem( item, 1, filter );
+       }
+       if ( item ) {
+               if ( item.constructor.static.highlightable ) {
+                       this.highlightItem( item );
+               } else {
+                       this.chooseItem( item );
+               }
+               item.scrollElementIntoView();
+       }
+
+       return false;
+};
+
+/**
+ * Get a matcher for the specific string
+ *
+ * @protected
+ * @param {string} s String to match against items
+ * @return {Function} function ( OO.ui.OptionItem ) => boolean
+ */
+OO.ui.SelectWidget.prototype.getItemMatcher = function ( s ) {
+       var re;
+
+       if ( s.normalize ) {
+               s = s.normalize();
+       }
+       re = new RegExp( '^\\s*' + s.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' ).replace( /\s+/g, '\\s+' ), 'i' );
+       return function ( item ) {
+               var l = item.getLabel();
+               if ( typeof l !== 'string' ) {
+                       l = item.$label.text();
+               }
+               if ( l.normalize ) {
+                       l = l.normalize();
+               }
+               return re.test( l );
+       };
+};
+
+/**
+ * Bind key press listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.bindKeyPressListener = function () {
+       this.getElementWindow().addEventListener( 'keypress', this.onKeyPressHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * If you override this, be sure to call this.clearKeyPressBuffer() from your
+ * implementation.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.unbindKeyPressListener = function () {
+       this.getElementWindow().removeEventListener( 'keypress', this.onKeyPressHandler, true );
+       this.clearKeyPressBuffer();
+};
+
+/**
+ * Visibility change handler
  *
  * @protected
+ * @param {boolean} visible
  */
-OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
-       this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+OO.ui.SelectWidget.prototype.onToggle = function ( visible ) {
+       if ( !visible ) {
+               this.clearKeyPressBuffer();
+       }
 };
 
 /**
@@ -15390,13 +16647,19 @@ OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
  *
  * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.
  * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward
+ * @param {Function} filter Only consider items for which this function returns
+ *  true. Function takes an OO.ui.OptionWidget and returns a boolean.
  * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select
  */
-OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction ) {
+OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction, filter ) {
        var currentIndex, nextIndex, i,
                increase = direction > 0 ? 1 : -1,
                len = this.items.length;
 
+       if ( !$.isFunction( filter ) ) {
+               filter = OO.ui.SelectWidget.static.passAllFilter;
+       }
+
        if ( item instanceof OO.ui.OptionWidget ) {
                currentIndex = $.inArray( item, this.items );
                nextIndex = ( currentIndex + increase + len ) % len;
@@ -15408,7 +16671,7 @@ OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direct
 
        for ( i = 0; i < len; i++ ) {
                item = this.items[ nextIndex ];
-               if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
+               if ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {
                        return item;
                }
                nextIndex = ( nextIndex + increase + len ) % len;
@@ -15446,7 +16709,7 @@ OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
  */
 OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
        // Mixin method
-       OO.ui.GroupWidget.prototype.addItems.call( this, items, index );
+       OO.ui.mixin.GroupWidget.prototype.addItems.call( this, items, index );
 
        // Always provide an index, even if it was omitted
        this.emit( 'add', items, index === undefined ? this.items.length - items.length - 1 : index );
@@ -15475,7 +16738,7 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
        }
 
        // Mixin method
-       OO.ui.GroupWidget.prototype.removeItems.call( this, items );
+       OO.ui.mixin.GroupWidget.prototype.removeItems.call( this, items );
 
        this.emit( 'remove', items );
 
@@ -15494,7 +16757,7 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
        var items = this.items.slice();
 
        // Mixin method
-       OO.ui.GroupWidget.prototype.clearItems.call( this );
+       OO.ui.mixin.GroupWidget.prototype.clearItems.call( this );
 
        // Clear selection
        this.selectItem( null );
@@ -15540,17 +16803,17 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
  *
  * @class
  * @extends OO.ui.SelectWidget
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
        // Parent constructor
-       OO.ui.ButtonSelectWidget.super.call( this, config );
+       OO.ui.ButtonSelectWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.TabIndexedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
 
        // Events
        this.$element.on( {
@@ -15565,7 +16828,7 @@ OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
-OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.mixin.TabIndexedElement );
 
 /**
  * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio
@@ -15573,6 +16836,9 @@ OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
  * an interface for adding, removing and selecting options.
  * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
  *
+ * If you want to use this within a HTML form, such as a OO.ui.FormLayout, use
+ * OO.ui.RadioSelectInputWidget instead.
+ *
  *     @example
  *     // A RadioSelectWidget with RadioOptions.
  *     var option1 = new OO.ui.RadioOptionWidget( {
@@ -15599,17 +16865,17 @@ OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
  *
  * @class
  * @extends OO.ui.SelectWidget
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
        // Parent constructor
-       OO.ui.RadioSelectWidget.super.call( this, config );
+       OO.ui.RadioSelectWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.TabIndexedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
 
        // Events
        this.$element.on( {
@@ -15624,13 +16890,13 @@ OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );
-OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.mixin.TabIndexedElement );
 
 /**
  * MenuSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains options and
  * is used together with OO.ui.MenuOptionWidget. It is designed be used as part of another widget.
  * See {@link OO.ui.DropdownWidget DropdownWidget}, {@link OO.ui.ComboBoxWidget ComboBoxWidget},
- * and {@link OO.ui.LookupElement LookupElement} for examples of widgets that contain menus.
+ * and {@link OO.ui.mixin.LookupElement LookupElement} for examples of widgets that contain menus.
  * MenuSelectWidgets themselves are not instantiated directly, rather subclassed
  * and customized to be opened, closed, and displayed as needed.
  *
@@ -15649,15 +16915,17 @@ OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.TabIndexedElement );
  *
  * @class
  * @extends OO.ui.SelectWidget
- * @mixins OO.ui.ClippableElement
+ * @mixins OO.ui.mixin.ClippableElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @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.LookupElement LookupElement}
- * @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.
+ *  and {@link OO.ui.mixin.LookupElement LookupElement}
+ * @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.
  */
 OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
@@ -15665,10 +16933,10 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        config = config || {};
 
        // Parent constructor
-       OO.ui.MenuSelectWidget.super.call( this, config );
+       OO.ui.MenuSelectWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
+       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
 
        // Properties
        this.newItems = null;
@@ -15692,7 +16960,7 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.MenuSelectWidget, OO.ui.SelectWidget );
-OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.ClippableElement );
+OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.mixin.ClippableElement );
 
 /* Methods */
 
@@ -15723,7 +16991,7 @@ OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
                        case OO.ui.Keys.RIGHT:
                                // Do nothing if a text field is associated, arrow keys will be handled natively
                                if ( !this.$input ) {
-                                       OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+                                       OO.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );
                                }
                                break;
                        case OO.ui.Keys.ESCAPE:
@@ -15739,7 +17007,7 @@ OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
                                }
                                break;
                        default:
-                               OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+                               OO.ui.MenuSelectWidget.parent.prototype.onKeyDown.call( this, e );
                                return;
                }
        }
@@ -15752,7 +17020,7 @@ OO.ui.MenuSelectWidget.prototype.bindKeyDownListener = function () {
        if ( this.$input ) {
                this.$input.on( 'keydown', this.onKeyDownHandler );
        } else {
-               OO.ui.MenuSelectWidget.super.prototype.bindKeyDownListener.call( this );
+               OO.ui.MenuSelectWidget.parent.prototype.bindKeyDownListener.call( this );
        }
 };
 
@@ -15763,7 +17031,27 @@ OO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {
        if ( this.$input ) {
                this.$input.off( 'keydown', this.onKeyDownHandler );
        } else {
-               OO.ui.MenuSelectWidget.super.prototype.unbindKeyDownListener.call( this );
+               OO.ui.MenuSelectWidget.parent.prototype.unbindKeyDownListener.call( this );
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.bindKeyPressListener = function () {
+       if ( !this.$input ) {
+               OO.ui.MenuSelectWidget.parent.prototype.bindKeyPressListener.call( this );
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () {
+       if ( this.$input ) {
+               this.clearKeyPressBuffer();
+       } else {
+               OO.ui.MenuSelectWidget.parent.prototype.unbindKeyPressListener.call( this );
        }
 };
 
@@ -15778,7 +17066,7 @@ OO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {
  * @chainable
  */
 OO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {
-       OO.ui.MenuSelectWidget.super.prototype.chooseItem.call( this, item );
+       OO.ui.MenuSelectWidget.parent.prototype.chooseItem.call( this, item );
        this.toggle( false );
        return this;
 };
@@ -15790,7 +17078,7 @@ OO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {
        var i, len, item;
 
        // Parent method
-       OO.ui.MenuSelectWidget.super.prototype.addItems.call( this, items, index );
+       OO.ui.MenuSelectWidget.parent.prototype.addItems.call( this, items, index );
 
        // Auto-initialize
        if ( !this.newItems ) {
@@ -15818,7 +17106,7 @@ OO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {
  */
 OO.ui.MenuSelectWidget.prototype.removeItems = function ( items ) {
        // Parent method
-       OO.ui.MenuSelectWidget.super.prototype.removeItems.call( this, items );
+       OO.ui.MenuSelectWidget.parent.prototype.removeItems.call( this, items );
 
        // Reevaluate clipping
        this.clip();
@@ -15831,7 +17119,7 @@ OO.ui.MenuSelectWidget.prototype.removeItems = function ( items ) {
  */
 OO.ui.MenuSelectWidget.prototype.clearItems = function () {
        // Parent method
-       OO.ui.MenuSelectWidget.super.prototype.clearItems.call( this );
+       OO.ui.MenuSelectWidget.parent.prototype.clearItems.call( this );
 
        // Reevaluate clipping
        this.clip();
@@ -15849,11 +17137,12 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
                change = visible !== this.isVisible();
 
        // Parent method
-       OO.ui.MenuSelectWidget.super.prototype.toggle.call( this, visible );
+       OO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible );
 
        if ( change ) {
                if ( visible ) {
                        this.bindKeyDownListener();
+                       this.bindKeyPressListener();
 
                        if ( this.newItems && this.newItems.length ) {
                                for ( i = 0, len = this.newItems.length; i < len; i++ ) {
@@ -15871,6 +17160,7 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
                        }
                } else {
                        this.unbindKeyDownListener();
+                       this.unbindKeyPressListener();
                        this.getElementDocument().removeEventListener(
                                'mousedown', this.onDocumentMouseDownHandler, true
                        );
@@ -15906,7 +17196,7 @@ OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputW
        config = config || {};
 
        // Parent constructor
-       OO.ui.TextInputMenuSelectWidget.super.call( this, config );
+       OO.ui.TextInputMenuSelectWidget.parent.call( this, config );
 
        // Properties
        this.inputWidget = inputWidget;
@@ -15949,7 +17239,7 @@ OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
        }
 
        // Parent method
-       OO.ui.TextInputMenuSelectWidget.super.prototype.toggle.call( this, visible );
+       OO.ui.TextInputMenuSelectWidget.parent.prototype.toggle.call( this, visible );
 
        if ( change ) {
                if ( this.isVisible() ) {
@@ -15989,21 +17279,21 @@ OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
  * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}
  * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.
  *
- * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
+ * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**
  *
  * @class
  * @extends OO.ui.SelectWidget
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
        // Parent constructor
-       OO.ui.OutlineSelectWidget.super.call( this, config );
+       OO.ui.OutlineSelectWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.TabIndexedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
 
        // Events
        this.$element.on( {
@@ -16018,26 +17308,26 @@ OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
-OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.mixin.TabIndexedElement );
 
 /**
  * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}
  *
- * ####Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.####
+ * **Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.**
  *
  * @class
  * @extends OO.ui.SelectWidget
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {
        // Parent constructor
-       OO.ui.TabSelectWidget.super.call( this, config );
+       OO.ui.TabSelectWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.TabIndexedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
 
        // Events
        this.$element.on( {
@@ -16052,7 +17342,365 @@ OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );
-OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.mixin.TabIndexedElement );
+
+/**
+ * NumberInputWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value
+ * can be entered manually) and two {@link OO.ui.ButtonWidget button widgets}
+ * (to adjust the value in increments) to allow the user to enter a number.
+ *
+ *     @example
+ *     // Example: A NumberInputWidget.
+ *     var numberInput = new OO.ui.NumberInputWidget( {
+ *         label: 'NumberInputWidget',
+ *         input: { value: 5, min: 1, max: 10 }
+ *     } );
+ *     $( 'body' ).append( numberInput.$element );
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [input] Configuration options to pass to the {@link OO.ui.TextInputWidget text input widget}.
+ * @cfg {Object} [minusButton] Configuration options to pass to the {@link OO.ui.ButtonWidget decrementing button widget}.
+ * @cfg {Object} [plusButton] Configuration options to pass to the {@link OO.ui.ButtonWidget incrementing button widget}.
+ * @cfg {boolean} [isInteger=false] Whether the field accepts only integer values.
+ * @cfg {number} [min=-Infinity] Minimum allowed value
+ * @cfg {number} [max=Infinity] Maximum allowed value
+ * @cfg {number} [step=1] Delta when using the buttons or up/down arrow keys
+ * @cfg {number|null} [pageStep] Delta when using the page-up/page-down keys. Defaults to 10 times #step.
+ */
+OO.ui.NumberInputWidget = function OoUiNumberInputWidget( config ) {
+       // Configuration initialization
+       config = $.extend( {
+               isInteger: false,
+               min: -Infinity,
+               max: Infinity,
+               step: 1,
+               pageStep: null
+       }, config );
+
+       // Parent constructor
+       OO.ui.NumberInputWidget.parent.call( this, config );
+
+       // Properties
+       this.input = new OO.ui.TextInputWidget( $.extend(
+               {
+                       disabled: this.isDisabled()
+               },
+               config.input
+       ) );
+       this.minusButton = new OO.ui.ButtonWidget( $.extend(
+               {
+                       disabled: this.isDisabled(),
+                       tabIndex: -1
+               },
+               config.minusButton,
+               {
+                       classes: [ 'oo-ui-numberInputWidget-minusButton' ],
+                       label: '−'
+               }
+       ) );
+       this.plusButton = new OO.ui.ButtonWidget( $.extend(
+               {
+                       disabled: this.isDisabled(),
+                       tabIndex: -1
+               },
+               config.plusButton,
+               {
+                       classes: [ 'oo-ui-numberInputWidget-plusButton' ],
+                       label: '+'
+               }
+       ) );
+
+       // Events
+       this.input.connect( this, {
+               change: this.emit.bind( this, 'change' ),
+               enter: this.emit.bind( this, 'enter' )
+       } );
+       this.input.$input.on( {
+               keydown: this.onKeyDown.bind( this ),
+               'wheel mousewheel DOMMouseScroll': this.onWheel.bind( this )
+       } );
+       this.plusButton.connect( this, {
+               click: [ 'onButtonClick', +1 ]
+       } );
+       this.minusButton.connect( this, {
+               click: [ 'onButtonClick', -1 ]
+       } );
+
+       // Initialization
+       this.setIsInteger( !!config.isInteger );
+       this.setRange( config.min, config.max );
+       this.setStep( config.step, config.pageStep );
+
+       this.$field = $( '<div>' ).addClass( 'oo-ui-numberInputWidget-field' )
+               .append(
+                       this.minusButton.$element,
+                       this.input.$element,
+                       this.plusButton.$element
+               );
+       this.$element.addClass( 'oo-ui-numberInputWidget' ).append( this.$field );
+       this.input.setValidation( this.validateNumber.bind( this ) );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.NumberInputWidget, OO.ui.Widget );
+
+/* Events */
+
+/**
+ * A `change` event is emitted when the value of the input changes.
+ *
+ * @event change
+ */
+
+/**
+ * An `enter` event is emitted when the user presses 'enter' inside the text box.
+ *
+ * @event enter
+ */
+
+/* Methods */
+
+/**
+ * Set whether only integers are allowed
+ * @param {boolean} flag
+ */
+OO.ui.NumberInputWidget.prototype.setIsInteger = function ( flag ) {
+       this.isInteger = !!flag;
+       this.input.setValidityFlag();
+};
+
+/**
+ * Get whether only integers are allowed
+ * @return {boolean} Flag value
+ */
+OO.ui.NumberInputWidget.prototype.getIsInteger = function () {
+       return this.isInteger;
+};
+
+/**
+ * Set the range of allowed values
+ * @param {number} min Minimum allowed value
+ * @param {number} max Maximum allowed value
+ */
+OO.ui.NumberInputWidget.prototype.setRange = function ( min, max ) {
+       if ( min > max ) {
+               throw new Error( 'Minimum (' + min + ') must not be greater than maximum (' + max + ')' );
+       }
+       this.min = min;
+       this.max = max;
+       this.input.setValidityFlag();
+};
+
+/**
+ * Get the current range
+ * @return {number[]} Minimum and maximum values
+ */
+OO.ui.NumberInputWidget.prototype.getRange = function () {
+       return [ this.min, this.max ];
+};
+
+/**
+ * Set the stepping deltas
+ * @param {number} step Normal step
+ * @param {number|null} pageStep Page step. If null, 10 * step will be used.
+ */
+OO.ui.NumberInputWidget.prototype.setStep = function ( step, pageStep ) {
+       if ( step <= 0 ) {
+               throw new Error( 'Step value must be positive' );
+       }
+       if ( pageStep === null ) {
+               pageStep = step * 10;
+       } else if ( pageStep <= 0 ) {
+               throw new Error( 'Page step value must be positive' );
+       }
+       this.step = step;
+       this.pageStep = pageStep;
+};
+
+/**
+ * Get the current stepping values
+ * @return {number[]} Step and page step
+ */
+OO.ui.NumberInputWidget.prototype.getStep = function () {
+       return [ this.step, this.pageStep ];
+};
+
+/**
+ * Get the current value of the widget
+ * @return {string}
+ */
+OO.ui.NumberInputWidget.prototype.getValue = function () {
+       return this.input.getValue();
+};
+
+/**
+ * Get the current value of the widget as a number
+ * @return {number} May be NaN, or an invalid number
+ */
+OO.ui.NumberInputWidget.prototype.getNumericValue = function () {
+       return +this.input.getValue();
+};
+
+/**
+ * Set the value of the widget
+ * @param {string} value Invalid values are allowed
+ */
+OO.ui.NumberInputWidget.prototype.setValue = function ( value ) {
+       this.input.setValue( value );
+};
+
+/**
+ * Adjust the value of the widget
+ * @param {number} delta Adjustment amount
+ */
+OO.ui.NumberInputWidget.prototype.adjustValue = function ( delta ) {
+       var n, v = this.getNumericValue();
+
+       delta = +delta;
+       if ( isNaN( delta ) || !isFinite( delta ) ) {
+               throw new Error( 'Delta must be a finite number' );
+       }
+
+       if ( isNaN( v ) ) {
+               n = 0;
+       } else {
+               n = v + delta;
+               n = Math.max( Math.min( n, this.max ), this.min );
+               if ( this.isInteger ) {
+                       n = Math.round( n );
+               }
+       }
+
+       if ( n !== v ) {
+               this.setValue( n );
+       }
+};
+
+/**
+ * Validate input
+ * @private
+ * @param {string} value Field value
+ * @return {boolean}
+ */
+OO.ui.NumberInputWidget.prototype.validateNumber = function ( value ) {
+       var n = +value;
+       if ( isNaN( n ) || !isFinite( n ) ) {
+               return false;
+       }
+
+       /*jshint bitwise: false */
+       if ( this.isInteger && ( n | 0 ) !== n ) {
+               return false;
+       }
+       /*jshint bitwise: true */
+
+       if ( n < this.min || n > this.max ) {
+               return false;
+       }
+
+       return true;
+};
+
+/**
+ * Handle mouse click events.
+ *
+ * @private
+ * @param {number} dir +1 or -1
+ */
+OO.ui.NumberInputWidget.prototype.onButtonClick = function ( dir ) {
+       this.adjustValue( dir * this.step );
+};
+
+/**
+ * Handle mouse wheel events.
+ *
+ * @private
+ * @param {jQuery.Event} event
+ */
+OO.ui.NumberInputWidget.prototype.onWheel = function ( event ) {
+       var delta = 0;
+
+       // Standard 'wheel' event
+       if ( event.originalEvent.deltaMode !== undefined ) {
+               this.sawWheelEvent = true;
+       }
+       if ( event.originalEvent.deltaY ) {
+               delta = -event.originalEvent.deltaY;
+       } else if ( event.originalEvent.deltaX ) {
+               delta = event.originalEvent.deltaX;
+       }
+
+       // Non-standard events
+       if ( !this.sawWheelEvent ) {
+               if ( event.originalEvent.wheelDeltaX ) {
+                       delta = -event.originalEvent.wheelDeltaX;
+               } else if ( event.originalEvent.wheelDeltaY ) {
+                       delta = event.originalEvent.wheelDeltaY;
+               } else if ( event.originalEvent.wheelDelta ) {
+                       delta = event.originalEvent.wheelDelta;
+               } else if ( event.originalEvent.detail ) {
+                       delta = -event.originalEvent.detail;
+               }
+       }
+
+       if ( delta ) {
+               delta = delta < 0 ? -1 : 1;
+               this.adjustValue( delta * this.step );
+       }
+
+       return false;
+};
+
+/**
+ * Handle key down events.
+ *
+ *
+ * @private
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.NumberInputWidget.prototype.onKeyDown = function ( e ) {
+       if ( !this.isDisabled() ) {
+               switch ( e.which ) {
+                       case OO.ui.Keys.UP:
+                               this.adjustValue( this.step );
+                               return false;
+                       case OO.ui.Keys.DOWN:
+                               this.adjustValue( -this.step );
+                               return false;
+                       case OO.ui.Keys.PAGEUP:
+                               this.adjustValue( this.pageStep );
+                               return false;
+                       case OO.ui.Keys.PAGEDOWN:
+                               this.adjustValue( -this.pageStep );
+                               return false;
+               }
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.NumberInputWidget.prototype.setDisabled = function ( disabled ) {
+       // Parent method
+       OO.ui.NumberInputWidget.parent.prototype.setDisabled.call( this, disabled );
+
+       if ( this.input ) {
+               this.input.setDisabled( this.isDisabled() );
+       }
+       if ( this.minusButton ) {
+               this.minusButton.setDisabled( this.isDisabled() );
+       }
+       if ( this.plusButton ) {
+               this.plusButton.setDisabled( this.isDisabled() );
+       }
+
+       return this;
+};
 
 /**
  * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean
@@ -16078,7 +17726,7 @@ OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
  *
  * @class
  * @extends OO.ui.ToggleWidget
- * @mixins OO.ui.TabIndexedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -16087,10 +17735,10 @@ OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
  */
 OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
        // Parent constructor
-       OO.ui.ToggleSwitchWidget.super.call( this, config );
+       OO.ui.ToggleSwitchWidget.parent.call( this, config );
 
        // Mixin constructors
-       OO.ui.TabIndexedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
 
        // Properties
        this.dragging = false;
@@ -16117,7 +17765,7 @@ OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
-OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.TabIndexedElement );
+OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Methods */
 
@@ -16147,4 +17795,104 @@ OO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {
        }
 };
 
+/*!
+ * Deprecated aliases for classes in the `OO.ui.mixin` namespace.
+ */
+
+/**
+ * @inheritdoc OO.ui.mixin.ButtonElement
+ * @deprecated Use {@link OO.ui.mixin.ButtonElement} instead.
+ */
+OO.ui.ButtonElement = OO.ui.mixin.ButtonElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.ClippableElement
+ * @deprecated Use {@link OO.ui.mixin.ClippableElement} instead.
+ */
+OO.ui.ClippableElement = OO.ui.mixin.ClippableElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.DraggableElement
+ * @deprecated Use {@link OO.ui.mixin.DraggableElement} instead.
+ */
+OO.ui.DraggableElement = OO.ui.mixin.DraggableElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.DraggableGroupElement
+ * @deprecated Use {@link OO.ui.mixin.DraggableGroupElement} instead.
+ */
+OO.ui.DraggableGroupElement = OO.ui.mixin.DraggableGroupElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.FlaggedElement
+ * @deprecated Use {@link OO.ui.mixin.FlaggedElement} instead.
+ */
+OO.ui.FlaggedElement = OO.ui.mixin.FlaggedElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.GroupElement
+ * @deprecated Use {@link OO.ui.mixin.GroupElement} instead.
+ */
+OO.ui.GroupElement = OO.ui.mixin.GroupElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.GroupWidget
+ * @deprecated Use {@link OO.ui.mixin.GroupWidget} instead.
+ */
+OO.ui.GroupWidget = OO.ui.mixin.GroupWidget;
+
+/**
+ * @inheritdoc OO.ui.mixin.IconElement
+ * @deprecated Use {@link OO.ui.mixin.IconElement} instead.
+ */
+OO.ui.IconElement = OO.ui.mixin.IconElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.IndicatorElement
+ * @deprecated Use {@link OO.ui.mixin.IndicatorElement} instead.
+ */
+OO.ui.IndicatorElement = OO.ui.mixin.IndicatorElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.ItemWidget
+ * @deprecated Use {@link OO.ui.mixin.ItemWidget} instead.
+ */
+OO.ui.ItemWidget = OO.ui.mixin.ItemWidget;
+
+/**
+ * @inheritdoc OO.ui.mixin.LabelElement
+ * @deprecated Use {@link OO.ui.mixin.LabelElement} instead.
+ */
+OO.ui.LabelElement = OO.ui.mixin.LabelElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.LookupElement
+ * @deprecated Use {@link OO.ui.mixin.LookupElement} instead.
+ */
+OO.ui.LookupElement = OO.ui.mixin.LookupElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.PendingElement
+ * @deprecated Use {@link OO.ui.mixin.PendingElement} instead.
+ */
+OO.ui.PendingElement = OO.ui.mixin.PendingElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.PopupElement
+ * @deprecated Use {@link OO.ui.mixin.PopupElement} instead.
+ */
+OO.ui.PopupElement = OO.ui.mixin.PopupElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.TabIndexedElement
+ * @deprecated Use {@link OO.ui.mixin.TabIndexedElement} instead.
+ */
+OO.ui.TabIndexedElement = OO.ui.mixin.TabIndexedElement;
+
+/**
+ * @inheritdoc OO.ui.mixin.TitledElement
+ * @deprecated Use {@link OO.ui.mixin.TitledElement} instead.
+ */
+OO.ui.TitledElement = OO.ui.mixin.TitledElement;
+
 }( OO ) );
index 95e8358..ceb3199 100644 (file)
@@ -17,7 +17,7 @@
                "link": { "file": "images/icons/link.svg" },
                "linkExternal": { "file": {
                        "ltr": "images/icons/external-link-ltr.svg",
-                       "rtl":  "images/icons/external-link-rtl.svg"
+                       "rtl": "images/icons/external-link-rtl.svg"
                } },
                "linkSecure": { "file": "images/icons/secure-link.svg" }
        }
index 29e5dba..85e39fe 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="add">
-        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+        <path id="plus" d="M13 8h-2v3H8v2h3v3h2v-3h3v-2h-3z"/>
     </g>
 </svg>
index 514ff1d..9732802 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 201b4d7..5b72d10 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.869 13.476c.079-.482.131-.972.131-1.476s-.052-.994-.131-1.476l-2.463-.259c-.149-.556-.367-1.082-.648-1.57l1.558-1.924c-.576-.806-1.281-1.511-2.087-2.087l-1.924 1.558c-.488-.281-1.015-.499-1.57-.648l-.259-2.463c-.482-.079-.972-.131-1.476-.131s-.994.052-1.476.131l-.259 2.463c-.555.149-1.081.367-1.57.648l-1.924-1.557c-.805.576-1.51 1.281-2.086 2.086l1.558 1.924c-.281.488-.499 1.015-.648 1.57l-2.463.259c-.08.482-.132.972-.132 1.476s.052.994.131 1.476l2.463.259c.149.556.367 1.082.648 1.57l-1.558 1.924c.576.806 1.281 1.511 2.087 2.087l1.924-1.558c.488.281 1.015.499 1.57.648l.259 2.463c.482.079.972.131 1.476.131s.994-.052 1.476-.131l.259-2.463c.556-.149 1.082-.367 1.57-.648l1.924 1.558c.806-.576 1.511-1.281 2.087-2.087l-1.558-1.924c.281-.488.499-1.015.648-1.57l2.463-.259zm-8.869 2.522c-2.209 0-3.998-1.789-3.998-3.998s1.789-3.998 3.998-3.998 3.998 1.789 3.998 3.998-1.789 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-.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"/>
     </g>
 </svg>
index f0c6522..42a4bf6 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="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
-        <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <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"/>
     </g>
 </svg>
index 887c2f6..4697eb9 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="align-center">
-        <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+        <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0-12h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
     </g>
 </svg>
index ce9761e..1c95377 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="align-float-left">
-        <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM13.5 9h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 12h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 15h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+        <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 3h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 3h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm-10-9h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 12h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
     </g>
 </svg>
index 557692a..2467f7f 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="align-float-right">
-        <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zM10.5 9h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 12h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 15h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 6h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 18h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
+        <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 3h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 3h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm10-9h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 12h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
     </g>
 </svg>
index 88db108..3737ef8 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 8a670ef..ba80ed0 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.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 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.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"/>
     </g>
 </svg>
index 0afcbfa..83a1c23 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png differ
index 01fc216..9a7dbe6 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-rtl">
-        <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
+        <path id="arrow" d="M13.4 8.542c-2.813-.027-4.548.978-5.512 1.823l-1.48-2.33-2.39 6.902 6.78.01-1.473-2.32c.668-.584 1.945-1.504 3.675-1.79 4.172-.69 6.925 1.948 6.925 1.948S18.288 8.588 13.4 8.542z"/>
     </g>
 </svg>
index b07621e..a0097cb 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="g4">
-        <path d="M16 12h-10c-1.7 0-3 1.3-3 3h13v3l5-4.5-5-4.5v3z" id="path6"/>
+        <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z" id="path6"/>
     </g>
 </svg>
index a018928..54d6d25 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>
-        <path d="M8 12h10c1.7 0 3 1.3 3 3h-13v3l-5-4.5 5-4.5v3z"/>
+        <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
     </g>
 </svg>
index 94ec670..6d95fc6 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">
-  <path d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z" id="a"/>
-  <g id="up">
-    <path id="arrow" d="M15.5 9h7l-3.5-6z"/>
-  </g>
+    <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+    <g id="up">
+        <path id="arrow" d="M15.5 9h7L19 3z"/>
+    </g>
 </svg>
index b2a6c13..807cdd9 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">
-  <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
-  <g id="up">
-    <path id="arrow" d="M1.5 9h7L5 3z"/>
-  </g>
+    <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+    <g id="up">
+        <path id="arrow" d="M1.5 9h7L5 3z"/>
+    </g>
 </svg>
index 0ddd1d4..6299c30 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 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z" id="path4"/>
 </svg>
index 3d9cfd7..f6d5486 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="g66">
-        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z" id="path68"/>
     </g>
 </svg>
index 8f80759..d0ddde0 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="g66">
-        <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+        <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z" id="path68"/>
     </g>
 </svg>
index 4b82877..d5cee05 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-a">
-        <path d="M16 18h3l-5-12h-3l-5 12h3l1.25-3h4.5l1.25 3zm-4.917-5l1.417-3.4 1.417 3.4h-2.834z"/>
+        <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
     </g>
 </svg>
index 871da47..c2addd8 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 f96cebc..ad6b3e4 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.349 1.386 2.101 4.159 2.258l2.187-.029.318.044c-.03.127-.251.345-.665.652l-.089.066c-1.236.929-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.711-.99-.65-.66-.975-1.559-.975-2.698.005-1.354.566-2.573 1.684-3.658v-.044l-.606-.55c-.148-.181-.222-.391-.222-.63 0-.489.239-1.109.717-1.862.65-1.046 1.303-1.566 1.958-1.561.886.005 1.618.42 2.194 1.246.325.479-.03.552-1.064.22-.842-.327-1.527-.051-2.054.828l.015.073 1.123.865.052.007c1.404-.498 2.418-.74 3.043-.726-.059.117-.14.362-.244.733-.103.357-.204.684-.303.982l-.126.374-.384.051c-1.743.239-2.992.716-3.745 1.429-.463.464-.697.973-.702 1.525"/>
+        <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"/>
     </g>
 </svg>
index ad6f342..ed491f3 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 f04c6aa..27108e2 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.411 8.232l-1.676-.665.694-1.567 1.688.64-.707 1.592m.775 3.078c-.509-.286-1-.427-1.476-.423-.471 0-.982.205-1.532.616l-.506.379.006.025c1.084.066 1.934.099 2.551.099h.313c.567-.021.992-.064 1.276-.131-.067-.17-.275-.359-.625-.566h-.006m-6.803 3.296c-.017-.904-.329-1.87-.938-2.898l1.294-1.729.119.149c.267.336.504.924.713 1.766l.063.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.679-.601 1.282-.902 1.807-.902.383.004.848.195 1.394.572.55.377.884.696 1 .958.063.149.094.386.094.709 0 .696-.11 1.229-.331 1.598-.192.311-.473.555-.844.734-.438.207-1.549.311-3.333.311-.8 0-1.795-.021-2.983-.062l-.144.429c-.254.672-.463 1.113-.625 1.324-.725.937-1.786 1.405-3.183 1.405-1.705-.008-2.557-.922-2.557-2.742.004-.941.279-1.814.825-2.618.15-.216.298-.367.444-.454.225-.133.288-.091.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-.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"/>
     </g>
 </svg>
index c4af66e..718accb 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 4dbec6d..b55042a 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-.058.257-.15.367-.274.114-.13.205-.302.273-.516.073-.213.11-.48.11-.797V13h-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.218.175.395.29.53.12.136.247.232.383.29.14.05.276.077.406.077m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.343-.242.78-.242 1.312V18H6v-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.348.49.738.64 1.17.15.433.226 1.094.226 1.61h1.353v2.04H17.78v1.6c0 .58-.103 1.092-.31 1.54-.21.442-.49.815-.845 1.117-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.078-1.46-.234-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.105-1.182.32-1.64c.213-.46.497-.685.85-.977.355-.297.76-.513 1.22-.648.458-.14.935-.21 1.43-.21h1.132c-.01-.49-.04-1.043-.242-1.36-.198-.323-.453-.58-.766-.766-.312-.193-.598-.332-.984-.426-.374-.09-.577-.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-.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"/>
     </g>
 </svg>
index 4f64820..1806709 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-b">
-        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.011-1.975-1.989-3 2-.975 1.989-1.935 1.989-3 0-2-2-3-4-3h-6v12zm7-8c0 1.001 0 1-2 1h-2v-3h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
     </g>
 </svg>
index dc31051..07a721b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.png differ
index 279466d..5c6f8c0 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.649c.893 0 1.633.109 2.22.327.588.218 1.088.622 1.502 1.211.419.589.629 1.187.629 1.978 0 .813-.21 1.398-.629 1.977-.419.578-.898.974-1.437 1.187-.533.213-1.295.319-2.286.319h-5.649m4.767-2c.751 0 1.279-.049 1.584-.12.305-.076.569-.246.792-.508.229-.262.343-.473.343-.855 0-.557-.199-.868-.596-1.119-.392-.256-1.064-.398-2.016-.398h-1.873v3"/>
+        <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"/>
     </g>
 </svg>
index fdeeb6c..63aee3e 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-te">
-        <path id="te" d="M11 18v-10h-4v-2h11v2h-4v10"/>
+        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
     </g>
 </svg>
index 3084fef..cfe0009 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 5996c81..d26bdf6 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-.181.705-.447.168-.266.401-.873.698-1.821.39-1.241.789-2.033 1.197-2.374.403-.336 1.075-.504 2.014-.504l.386-.008v1.78l-.386-.008c-.399 0-.691.062-.878.187-.186.119-.337.304-.452.553-.115.249-.286.762-.512 1.537-.12.412-.25.756-.392 1.033-.137.276-.383.537-.738.78.439.157.8.466 1.084.927.288.455.603 1.103.944 1.943l1.33 3.268h-2.314l-1.17-3.081-.113-.252-.239-.561c-.248-.569-.452-.932-.612-1.089-.16-.157-.317-.236-.552-.236v5.22h-2v-5.22c-.226 0-.382.076-.546.228-.164.152-.368.518-.612 1.098l-.246.561-.113.252-1.17 3.081h-2.314l1.33-3.268c.328-.808.636-1.447.924-1.919.293-.477.663-.794 1.11-.951-.355-.244-.603-.501-.745-.772-.137-.276-.268-.623-.392-1.041-.222-.759-.39-1.266-.505-1.52-.111-.255-.261-.444-.452-.569-.186-.125-.492-.187-.917-.187l-.352.008v-1.78l.386.008c.953 0 1.631.171 2.034.512.399.347.791 1.136 1.177 2.366.301.954.534 1.564.698 1.829.168.26.377.406.705.439v-5.154"/>
+        <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"/>
     </g>
 </svg>
index 357d2e5..89061f1 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-f">
-        <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
     </g>
 </svg>
index e30e1fe..ceb792b 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 e032542..dd6e27a 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.259-.941.359-1.896.538-2.864.538-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.257-2.282.77-3.222.513-.939 1.265-1.66 2.255-2.161.754-.385 1.693-.578 2.816-.578 1.46 0 2.6.303 3.418.91.824.602 1.353 1.435 1.589 2.501l-2.359.435c-.166-.57-.479-1.018-.939-1.346-.455-.332-1.024-.499-1.709-.499-1.038 0-1.864.325-2.479.974-.61.649-.915 1.612-.915 2.889 0 1.377.31 2.412.931 3.103.62.686 1.433 1.029 2.439 1.029.497 0 .995-.095 1.492-.285.503-.195 1.332-.571 1.691-.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.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"/>
     </g>
 </svg>
index 814eff8..d6dcb5d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-geor-man.png differ
index b211bf7..deb95b7 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-geor-man">
-        <path id="geor-man" d="M13.832 14.061c0-1.715-.394-2.573-1.182-2.573-.868 0-1.302.779-1.302 2.338-.01 1.624.421 2.436 1.295 2.436.793 0 1.189-.734 1.189-2.201m2.168 0c0 2.626-1.116 3.939-3.349 3.939-2.434 0-3.651-1.386-3.651-4.159 0-2.738 1.217-4.106 3.651-4.106.841 0 1.182.63 1.182.63v-1.579c0-.789-.449-1.184-1.347-1.184-.572 0-.858.374-.858 1.123h-2.341c.005-1.817 1.064-2.725 3.176-2.725 2.368 0 3.548.946 3.538 2.839"/>
+        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
     </g>
 </svg>
index 1679793..7695623 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-l">
-        <path id="l" d="M8 18v-12h3v10h5v2"/>
+        <path id="l" d="M8 18V6h3v10h5v2"/>
     </g>
 </svg>
index 73ad019..62f66a2 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-n">
-        <path id="n" d="M7 18v-12h3l4 8v-8h3v12h-3l-4-8v8h-3"/>
+        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
     </g>
 </svg>
index 146943a..027db27 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-v">
-        <path id="v" d="M10.5 18l-4.5-12h3l3 8 3-8h3l-4.5 12"/>
+        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
     </g>
 </svg>
index 51a33ff..76b87e4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/cancel.png and b/resources/lib/oojs-ui/themes/apex/images/icons/cancel.png differ
index bfc1b44..00c8051 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="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+        <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"/>
     </g>
 </svg>
index a42aaa5..d90b371 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/caret-ltr.png differ
index f31ec09..44d2d1a 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="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8l-8.8 8.9z"/>
+    <path d="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8L7 13.1z"/>
 </svg>
index 02b4e38..88c7c73 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="M16.5 13.1l-8.9 8.9c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+    <path d="M16.5 13.1L7.6 22c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
 </svg>
index a04ca57..27cb080 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 16l8.9-8.9c-.8-.8-2-.8-2.8 0l-6.1 6.1-6.1-6c-.8-.8-2-.8-2.8 0l8.9 8.8z" id="path4"/>
+    <path d="M12 16l8.9-8.9c-.8-.8-2-.8-2.8 0L12 13.2l-6.1-6c-.8-.8-2-.8-2.8 0L12 16z" id="path4"/>
 </svg>
index 5591095..efd2356 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png and b/resources/lib/oojs-ui/themes/apex/images/icons/caretUp.png differ
index d0e0c28..1d63093 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 6.5l8.9 8.9c-.8.8-2 .8-2.8 0l-6.1-6.1-6.1 6c-.8.8-2 .8-2.8 0l8.9-8.8z" id="path4"/>
+    <path d="M12 6.5l8.9 8.9c-.8.8-2 .8-2.8 0L12 9.3l-6.1 6c-.8.8-2 .8-2.8 0L12 6.5z" id="path4"/>
 </svg>
index e30bf2d..e924c44 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 824790c..3f0a3a5 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="M 7.53125,7 4,17 l 2.0625,0 0.71875,-2.40625 3.625,0 L 11.125,17 13.1875,17 9.65625,7 7.53125,7 z M 8.59375,8.53125 9.9375,13 7.25,13 8.59375,8.53125 z" />
-        <path id="lower-case" d="m 18.548697,17 -0.183254,-1.035072 -0.05451,0 c -0.349771,0.440361 -0.710892,0.746796 -1.083366,0.919307 -0.367941,0.167972 -0.849436,0.251959 -1.444489,0.251959 -0.564328,0 -0.954665,-0.20883 -1.377109,-0.626492 -0.417903,-0.417659 -0.626854,-1.012371 -0.626853,-1.784137 -1e-6,-0.80808 0.281628,-1.402791 0.844889,-1.784137 0.567801,-0.385878 1.193222,-0.607062 2.208372,-0.640111 l 1.321843,-0.04086 0,-0.333674 c 0,-0.771759 -0.395195,-1.15764 -1.185571,-1.157647 -0.608688,7e-6 -1.324118,0.183867 -2.146293,0.551584 L 14.134181,9.9184512 c 0.876685,-0.4585114 1.848761,-0.6877705 2.916233,-0.6877783 1.022038,7.8e-6 1.586855,0.2224573 2.131951,0.6673492 C 19.727448,10.342928 20,11.019356 20,11.927309 l 0,5.073215 -1.451303,0 m -0.394476,-3.527417 -0.804008,0.02724 c -0.604145,0.01816 -1.053844,0.127119 -1.349098,0.326866 -0.29526,0.199753 -0.442889,0.503919 -0.442886,0.912498 -3e-6,0.585634 0.336136,0.878451 1.008417,0.878449 0.481492,2e-6 0.865326,-0.138462 1.151503,-0.415391 0.29071,-0.276925 0.436067,-0.644648 0.436072,-1.103169 l 0,-0.626491" />
+        <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"/>
     </g>
 </svg>
index 9a2c9db..7ecd312 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/check.png and b/resources/lib/oojs-ui/themes/apex/images/icons/check.png differ
index 03e3660..02c9bd8 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.901 1.902 4.81-6.952 1.657 1.148-6.26 8.852z"/>
+        <path d="M7.105 13.473l1.422-1.423 1.9 1.902L15.238 7l1.658 1.148L10.635 17z"/>
     </g>
 </svg>
index 436259e..18133cc 100644 (file)
@@ -1,2 +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"><circle cx="12" cy="12" r="6"></circle></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <circle cx="12" cy="12" r="6"/>
+</svg>
index 1345e86..f05a965 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.414-5.303 5.303-5.303-5.303-1.414 1.414 5.303 5.303-5.303 5.303 1.414 1.414 5.303-5.303 5.303 5.303 1.414-1.414-5.303-5.303z"/>
+        <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"/>
     </g>
 </svg>
index 32f140d..6e32d78 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-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <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"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index 353ac79..4dad20f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png and b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png differ
index 55aa8f8..645bfda 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="collapse">
-        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
     </g>
 </svg>
index 0ae7e63..c52ce1c 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="comment">
-        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+        <path id="speech-bubble" d="M15 6H9C7.343 6 6 7.344 6 9v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3V9c0-1.656-1.343-3-3-3z"/>
     </g>
 </svg>
index 7bc1c22..e1fb989 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 18l8-10h-16z"/>
+    <path d="M12 18l8-10H4z"/>
 </svg>
index 3972e07..4cd6cda 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="Layer_3">
-        <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+        <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
     </g>
 </svg>
index 4750795..4755937 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/edit-rtl.png differ
index 978b2fd..932997b 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="Layer_3">
-        <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+        <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
     </g>
 </svg>
index fe8631e..e3dc95a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-ltr.png differ
index f346874..05778cd 100644 (file)
@@ -2,10 +2,10 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g196">
         <g id="g198">
-            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
         </g>
     </g>
     <g id="g204">
-        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
     </g>
 </svg>
index ca5596e..6dd8b46 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/editUndo-rtl.png differ
index 5b59d45..ac03c05 100644 (file)
@@ -2,10 +2,10 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g196">
         <g id="g198">
-            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
         </g>
     </g>
     <g id="g204">
-        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z" id="path206"/>
     </g>
 </svg>
index 7666b41..84b9e0a 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="expand">
-        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
     </g>
 </svg>
index 827bc1b..e836361 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">
     <g id="external">
-        <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
-        <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+        <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"/>
     </g>
 </svg>
index c375ca0..60e6a0c 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">
     <g id="external">
-        <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
-        <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+        <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"/>
     </g>
 </svg>
index 4336892..4625881 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 f8578cf..e97230c 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="m 13.65625,11 c -1.921,0 -3.5,1.54775 -3.5,3.46875 0,1.92 1.579,3.5 3.5,3.5 0.749,0 1.432,-0.25225 2,-0.65625 l 0.09375,0.15625 2.375,2.375 c 0.19,0.189 0.53425,0.15325 0.78125,-0.09375 0.247,-0.247 0.314,-0.59125 0.125,-0.78125 l -2.375,-2.375 L 16.46875,16.5 C 16.87175,15.934 17.125,15.21775 17.125,14.46875 17.124,12.54875 15.57525,11 13.65625,11 z m 0,1.65625 c 1.011306,0 1.8125,0.801194 1.8125,1.8125 0,1.011306 -0.801194,1.84375 -1.8125,1.84375 -1.011306,0 -1.84375,-0.832444 -1.84375,-1.84375 0,-1.011306 0.832444,-1.8125 1.84375,-1.8125 z" />
-        <path id="text" d="M 6,5 6,7 16,7 16,5 6,5 z m 0,3 0,2 11,0 0,-2 -11,0 z m 0,3 0,2 3.53125,0 c 0.2825289,-0.797203 0.786096,-1.486208 1.4375,-2 L 6,11 z m 0,3 0,2 3.53125,0 C 9.3537004,15.520243 9.25,15.010236 9.25,14.46875 9.25,14.309811 9.2962033,14.154621 9.3125,14 L 6,14 z" />
+        <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="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 f492c79..ed8eea0 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 2a1e9c6..ca03754 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="m 11.343828,11.000025 c 1.921,0 3.5,1.54775 3.5,3.46875 0,1.92 -1.579,3.5 -3.5,3.5 -0.749,0 -1.432,-0.25225 -2,-0.65625 l -0.09375,0.15625 -2.375,2.375 c -0.19,0.189 -0.53425,0.15325 -0.78125,-0.09375 -0.247,-0.247 -0.314,-0.59125 -0.125,-0.78125 l 2.375,-2.375 0.1875,-0.09375 c -0.403,-0.566 -0.65625,-1.28225 -0.65625,-2.03125 10e-4,-1.92 1.54975,-3.46875 3.46875,-3.46875 z m 0,1.65625 c -1.011306,0 -1.8125,0.801194 -1.8125,1.8125 0,1.011306 0.801194,1.84375 1.8125,1.84375 1.011306,0 1.84375,-0.832444 1.84375,-1.84375 0,-1.011306 -0.832444,-1.8125 -1.84375,-1.8125 z" />
-        <path id="text" d="M 19,5 19,7 9,7 9,5 z m 0,3 0,2 -11,0 0,-2 z m 0,3 0,2 -3.53125,0 c -0.282529,-0.797203 -0.786096,-1.486208 -1.4375,-2 z m 0,3 0,2 -3.53125,0 C 15.6463,15.520243 15.75,15.010236 15.75,14.46875 15.75,14.309811 15.703797,14.154621 15.6875,14 z" />
+        <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="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 6e81d2b..bcd728e 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="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z" id="path216"/>
 </svg>
index 4b743aa..3a93b6f 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 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+    <path d="M11 6.5V5c1.4-1.5 5.2-1.2 6 0V4h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V13c-1.2 1.5-4.3 1.2-5 0V6c.7.7 2.7.9 4 .5z" id="path216"/>
 </svg>
index fff89fe..6f84122 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/flagUndo-ltr.png differ
index 49cdb7a..87245de 100644 (file)
@@ -2,14 +2,14 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g2990">
         <g id="Layer_1">
-            <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+            <path id="path227" d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
         </g>
         <g id="Layer_2">
             <g id="g230">
-                <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+                <path id="path232" d="M17.997 1.99l.99.99-15.98 15.98-.99-.99z"/>
             </g>
             <g id="g234">
-                <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+                <path id="path236" d="M17 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
             </g>
         </g>
     </g>
index e470de4..06da23a 100644 (file)
@@ -2,14 +2,14 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g2990">
         <g id="Layer_1">
-            <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+            <path id="path227" d="M11 6.5V5c1.4-1.5 5.2-1.2 6 0V4h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V13c-1.2 1.5-4.3 1.2-5 0V6c.7.7 2.7.9 4 .5z"/>
         </g>
         <g id="Layer_2">
             <g id="g230">
-                <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+                <path id="path232" d="M7.003 1.99l-.99.99 15.98 15.98.99-.99z"/>
             </g>
             <g id="g234">
-                <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+                <path id="path236" d="M8 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
             </g>
         </g>
     </g>
index b80df00..4428ef3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.png differ
index bb2545c..e5eb877 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="help">
-        <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 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.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"/>
         <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+            <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"/>
         </g>
     </g>
index 62f3d21..e6ab21b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.png differ
index 99c7f84..bf4f537 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="help">
-        <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 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.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"/>
         <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+            <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"/>
         </g>
     </g>
index f5a7d36..e9bbf95 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 35f15af..019e558 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="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+        <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"/>
     </g>
 </svg>
index e95d40d..87da9ef 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="indent-list-ltr">
-        <path id="arrow" d="M5 15.079l4.794-3.527-4.704-3.599-.01 2.047h-2.08v3h2z"/>
-        <path id="bottom_line" d="M20 17h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+        <path id="arrow" d="M5 15.08l4.794-3.528-4.704-3.6L5.08 10H3v3h2z"/>
+        <path id="bottom_line" d="M20 17H4c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
         <path id="middle_line" d="M20 10h-7c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h7c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
-        <path id="top_line" d="M20 3h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+        <path id="top_line" d="M20 3H4c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1V4c0-.553-.447-1-1-1z"/>
     </g>
 </svg>
index cca3ad3..77cc212 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="indent-list-rtl">
-        <path id="arrow" d="M19 15.079l-4.794-3.527 4.704-3.599.01 2.047h2.08v3h-2z"/>
-        <path id="bottom_line" d="M4 17h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
-        <path id="middle_line" d="M4 10h7c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-7c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
-        <path id="top_line_5_" d="M4 3h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="arrow" d="M19 15.08l-4.794-3.528 4.704-3.6.01 2.048H21v3h-2z"/>
+        <path id="bottom_line" d="M4 17h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="middle_line" d="M4 10h7c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="top_line_5_" d="M4 3h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1V4c0-.553.447-1 1-1z"/>
     </g>
 </svg>
index eb0fb46..f021189 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/info.png and b/resources/lib/oojs-ui/themes/apex/images/icons/info.png differ
index 9c0d1cb..3147340 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="info">
-        <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+        <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>
 </svg>
index 0833f84..d1e9ba3 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="insert">
-        <path d="M13 5h-2v6h-6v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+        <path d="M13 5h-2v6H5v2h6v6h2v-6h6v-2h-6z" id="plus"/>
     </g>
 </svg>
index a0e66bf..a3a11c6 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-a">
-        <path id="a" d="M14.667 6h-1.372l-7 12h1.705l2.333-4h4l.667 4h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
+        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
     </g>
 </svg>
index 7cf774f..f94928b 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 d4bff1b..1c4aeb7 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.299-.774.712-.875 1.125-.064.263-.035.572.063.781.189.405.539.574.844.813l.094-.125.531.625c.14.164.343.513.469.938.137.463.08.725 0 1.125h-3.438c-.338 0-.592.007-.766-.02-.339-.053-.256-.208-.234-.34.332-.127.564-.173.938-.141.29-.494.593-.885.906-1.313-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.357.026-.768.239-1.031.719-.246.448-.434.839-.656 1.281l.75-.469c.23-.142.484-.227.719-.219.157.005.275.054.406.094-.231.205-.509.402-.719.563-.301.26-.702.688-.906 1-.403.615-.694 1.084-.875 1.781-.179.689.004 1.339.469 1.75.426.376.846.519 1.281.563.65.065 1.205.093 2-.188.657-.231 1.021-.553 1.5-.969-.883.11-1.817.089-2.531.031-.871-.07-1.268-.384-1.469-.594-.271-.283-.307-.64-.156-1.219.036-.141.097-.323.25-.531.168-.228.364-.435.594-.656.451-.436 1.011-.737 1.461-.938-.045.206-.107.443-.055.688.049.229.248.379.438.469.259.122.506.155.688.156 1.421.011 2.862 0 4.281 0 .247 0 .452-.163.594-.375.139-.208.249-.481.344-.844.131-.499.094-1.062-.094-1.625-.182-.543-.418-1.009-.719-1.406-.335-.443-.674-.829-1-1.219 1.257-.815 2.716-1.239 3.969-1.688.121-.452.224-.926.313-1.313zm-9.469 8.438c-.262.394-.584.691-.875 1 .375.286.748.556 1.094.813.335-.303.626-.674.875-.969-.39-.268-.771-.588-1.094-.844z"/>
+        <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"/>
     </g>
 </svg>
index e8f2b62..a963197 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 bfbc9bf..7b2670f 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.729l-.93 2.19h-4.663c-.479 0-.857.122-1.135.367l-.061.11c-.184 2.016-.502 3.558-.955 4.627-.272.641-.633 1.252-1.082 1.833-.177.226-.219.186-.126-.119l.142-.504.17-.669.234-.87.002-.009.202-1.045.258-1.411.353-1.906c.191-.312.424-.638.699-.98.276-.342.589-.706.94-1.09.129-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.011-.241-.054-.394-.043-.153-.12-.327-.231-.522-.22-.428-.438-.641-.654-.641-.294 0-.915.269-1.864.806-.359.208-.376.125-.051-.247 1.558-1.71 2.708-2.566 3.45-2.566.383 0 .671.131.863.394.135.195.25.599.344 1.21l.203 1.2c.106.586.242.895.409.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.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"/>
     </g>
 </svg>
index 4d4178a..e4f1bda 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 63de0f6..67283c8 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.586 6h1.724c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.324 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.038-.356-.057-.576-.057-.583 0-1.137.095-1.663.284-.524.19-1 .46-1.425.812-.42.35-.777.78-1.072 1.283-.294.504-.504 1.074-.63 1.71-.242 1.255-.152 2.21.268 2.868.426.652 1.19.978 2.294.978.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.026-1.214 1.425-.488.394-1.053.7-1.694.922-.642.215-1.343.323-2.105.323-.767 0-1.434-.113-2-.34-.568-.225-1.025-.553-1.372-.984-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.567.697-1.066 1.144-1.496.445-.436.944-.794 1.496-1.072.55-.284 1.13-.475 1.733-.575l-.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-.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"/>
     </g>
 </svg>
index fc6133c..1ba8613 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 b468dea..0ef7345 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.481.214c-.468 1.34-1.15 2.354-2.046 3.04-.896.686-1.901 1.029-3.015 1.029-1.359 0-2.438-.43-3.237-1.29-.794-.86-1.191-2.092-1.191-3.697 0-2.09.606-3.818 1.817-5.185 1.079-1.219 2.42-1.828 4.023-1.828 1.186 0 2.145.33 2.878.989.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.839-.453-1.464-.916-1.876-.458-.417-1.051-.625-1.779-.625-1.369 0-2.476.631-3.321 1.892-.733 1.087-1.099 2.377-1.099 3.871 0 1.193.282 2.103.847 2.731.565.628 1.3.942 2.206.942.774 0 1.473-.261 2.099-.784.626-.522 1.081-1.261 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.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"/>
     </g>
 </svg>
index 1711ef9..39b09a2 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 92a834d..6ac99ab 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 18l2.462-12h3.557c.853 0 1.505.063 1.955.188.644.169 1.194.472 1.65.909.456.431.799.971 1.03 1.621.231.649.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.791-.66 1.49-1.127 2.095-.461.6-.947 1.072-1.456 1.416-.504.338-1.102.589-1.794.753-.526.126-1.172.188-1.939.188h-4.249m1.859-1.359h1.867c.842 0 1.591-.079 2.245-.237.408-.098.756-.243 1.046-.434.381-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.247-.688.37-1.468.37-2.341 0-.971-.166-1.716-.499-2.235-.333-.524-.756-.87-1.271-1.04-.381-.126-.974-.188-1.778-.188h-1.85l-1.907 9.274"/>
+        <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"/>
     </g>
 </svg>
index f5b44d9..882a535 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-e.png differ
index 66a5ef5..72df8bb 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 18l2.474-12h8.526l-.282 1.367h-6.947l-.75 3.633h6.09l-.282 1.367h-6.09l-.877 4.274h7.438l-.282 1.359h-9.018"/>
+        <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"/>
     </g>
 </svg>
index e728cd7..3ab33f2 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 3398904..a1a93dc 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.663c-.441 2.225-1.834 3.337-4.178 3.337-1.919 0-2.879-.787-2.879-2.36 0-.298.036-.624.108-.977.083-.431.245-.836.488-1.217l1.241.605-.207.613c-.055.259-.083.497-.083.712 0 .972.521 1.458 1.564 1.458 1.307 0 2.101-.723 2.383-2.17l.058-.331c.044-.221.066-.425.066-.613 0-.928-.546-1.391-1.638-1.391h-1.117l.248-1.259h1.117c1.202-.005 1.908-.552 2.118-1.64.039-.182.058-.356.058-.522 0-1.143-.899-1.714-2.697-1.714l.232-1.193c2.708 0 4.062.875 4.062 2.625 0 .248-.028.516-.083.803-.204 1.093-1.051 1.825-2.54 2.195l-.033.166c1.23.199 1.845.823 1.845 1.872 0 .21-.025.433-.074.671l-.058.331"/>
+        <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"/>
     </g>
 </svg>
index 3c6b3c1..28aab44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-i.png differ
index 93bec5a..e670e9b 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-i">
-        <path id="i" d="M12.5 17.999l.249-.994h-1.5l2.509-10.037h1.5l.242-.967h-5l-.242.967h1.5l-2.509 10.037h-1.5l-.249.994z"/>
+        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
     </g>
 </svg>
index d483154..38bcd73 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-k">
-        <path id="k" d="M12.018 10.652l4.982-4.652h-2l-5.309 5.234 1.309-5.234h-1.5l-3 12h1.5l1.173-4.693 1.54-1.438c.287 4.131 3.287 6.131 3.287 6.131h2s-4-2-3.982-7.348z"/>
+        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
     </g>
 </svg>
index 4fc10c5..aafa618 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 4f6364c..56e457b 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.589l-.302 1.526c-.522-.279-1.041-.488-1.557-.628-.511-.145-1.007-.217-1.487-.217-.935 0-1.679.204-2.231.612-.553.408-.829.95-.829 1.627 0 .372.101.658.302.86.207.196.733.408 1.58.635l.937.232c1.059.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.379 2.851-.914.733-2.12 1.1-3.618 1.1-.615 0-1.232-.062-1.852-.186-.62-.119-1.242-.302-1.867-.55l.318-1.611c.573.356 1.147.625 1.72.806.578.181 1.154.271 1.728.271.976 0 1.759-.217 2.347-.651.589-.434.883-.999.883-1.697 0-.465-.119-.816-.356-1.054-.232-.243-.736-.462-1.511-.658l-.937-.24c-1.069-.279-1.8-.599-2.192-.961-.387-.367-.581-.878-.581-1.534 0-1.152.442-2.094 1.325-2.828.888-.739 2.043-1.108 3.463-1.108.553 0 1.1.049 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.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"/>
     </g>
 </svg>
index c864384..ebd11a2 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 081e49a..549c303 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.271-.59 1.041.407-.18.363c.661.271 1.101.468 1.312.589.331.211.618.514.86.905.211.393.316.846.316 1.358 0 .786-.302 1.479-.905 2.083-.604.634-1.66 1.057-3.169 1.268-.121-.361-.258-.679-.408-.95.965-.151 1.645-.333 2.037-.545.454-.21.785-.481.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.269-.331-.331-.8-.589-1.402-.77-.333.634-.649 1.117-.951 1.449-.242.332-.694.906-1.358 1.721.09.393.181.709.272.951l-1.042.362-.091-.498c-.423.361-.801.617-1.133.77-.361.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.301-.362-.68-.362-1.132 0-.604.136-1.147.407-1.63.241-.453.603-.89 1.086-1.313.272-.241.725-.528 1.359-.86 0-.271.03-.799.09-1.585-.514.03-.921.045-1.222.045-.393 0-.711-.015-.951-.045l-.046-1.041c.725.091 1.494.135 2.31.135 0-.149.075-.738.227-1.766l1.177.183c-.151.542-.256 1.041-.316 1.493.242-.029.543-.075.906-.136.362-.061.573-.091.634-.091s.648-.15 1.766-.453l.046 1.041c-.967.243-2.145.439-3.532.591-.062.663-.092 1.086-.092 1.266.663-.151 1.284-.225 1.857-.225zm-2.672 3.893c-.061-.481-.136-1.252-.227-2.31-.573.424-1.041.86-1.403 1.313-.303.423-.452.875-.452 1.358 0 .241.044.438.136.588.09.092.195.137.316.137.363.001.907-.361 1.63-1.086zm.771-2.763c0 .483.029 1.088.09 1.811.604-.905 1.057-1.599 1.359-2.082-.574.06-1.058.151-1.449.271z"/>
-        <path id="english" d="M9.497 15.981h1.851l-3.084-8.949h-1.85l-3.081 8.949h1.85l.557-1.981h3.209l.548 1.981zm-3.489-3.377l1.331-3.782 1.344 3.782h-2.675z"/>
+        <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="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 47e71b3..c3be66c 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="layout-ltr">
-        <path id="text" d="M5 19v-14h6v8h8v6h-14z"/>
-        <path id="float" d="M13 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
     </g>
 </svg>
index fe9ee61..ce7feb8 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="layout-rtl">
-        <path id="text" d="M5 19v-6h8v-8h6v14h-14z"/>
-        <path id="float" d="M5 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
     </g>
 </svg>
index 2a087a4..0b87983 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/link.png and b/resources/lib/oojs-ui/themes/apex/images/icons/link.png differ
index dbae341..f1ac1e3 100644 (file)
@@ -1,8 +1,8 @@
 <?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 12.001c0 1.1-.891 2.015-1.988 2.015l-4.195-.015c.538 1.088.963 1.999 1.997 1.999h3c1.656 0 2.998-2.343 2.998-4s-1.342-4-2.998-4h-3c-1.034 0-1.459.911-1.998 1.999l4.195-.015c1.098 0 1.989.917 1.989 2.017z"/>
-        <path id="center" d="M8 12c0 .535.42 1 .938 1h6.109c.518 0 .938-.465.938-1 0-.534-.42-1-.938-1h-6.109c-.518 0-.938.466-.938 1z"/>
-        <path id="left" d="M4.816 11.999c0-1.1.891-2.015 1.988-2.015l4.196.015c-.539-1.088-.964-1.999-1.998-1.999h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.459-.911 1.998-1.999l-4.195.015c-1.098 0-1.989-.917-1.989-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.097 0 1.988.917 1.988 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>
 </svg>
index 5a43f5c..d60fc88 100644 (file)
@@ -1,11 +1,11 @@
 <?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="bullet-list-ltr">
-        <path id="bottom_dot" d="M5 10h-1c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
-        <path id="middle_dot" d="M5 17h-1c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
-        <path id="top_dot" d="M5 3h-1c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
-        <path id="bottom_line" d="M20 17h-11c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
-        <path id="middle_line" d="M20 10h-11c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
-        <path id="top_line" d="M20 3h-11c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+        <path id="bottom_dot" d="M5 10H4c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+        <path id="middle_dot" d="M5 17H4c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+        <path id="top_dot" d="M5 3H4c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1V4c0-.553-.448-1-1-1z"/>
+        <path id="bottom_line" d="M20 17H9c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+        <path id="middle_line" d="M20 10H9c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+        <path id="top_line" d="M20 3H9c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1V4c0-.553-.448-1-1-1z"/>
     </g>
 </svg>
index fb6e956..4818cbb 100644 (file)
@@ -3,9 +3,9 @@
     <g id="bullet-list-rtl">
         <path id="bottom_dot_1_" d="M19 10h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
         <path id="middle_dot_1_" d="M19 17h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
-        <path id="top_dot_1_" d="M19 3h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
-        <path id="bottom_line_7_" d="M4 17h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-11c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
-        <path id="middle_line_7_" d="M4 10h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-11c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
-        <path id="top_line_7_" d="M4 3h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-11c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+        <path id="top_dot_1_" d="M19 3h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1V4c0-.553.448-1 1-1z"/>
+        <path id="bottom_line_7_" d="M4 17h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1H4c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+        <path id="middle_line_7_" d="M4 10h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1H4c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+        <path id="top_line_7_" d="M4 3h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1H4c-.552 0-1-.447-1-1V4c0-.553.448-1 1-1z"/>
     </g>
 </svg>
index 62838e1..bec80ef 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-ltr.png differ
index e929dae..173e5db 100644 (file)
@@ -1,11 +1,11 @@
 <?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="number-list-ltr">
-        <path id="bottom_dot" d="M3 16v1h1.993l.03 1h-1.023v1h1v1h-2v1h2.023l.977-1.002v-1l-.955-.531.955-.5v-.969l-1.007-.998z"/>
-        <path id="middle_dot" d="M3 9v1h2.117l-2.117 2.187v1.811l3-.062v-.936h-2.118l2.118-2.188v-1.032l-.668-.78z"/>
-        <path id="top_dot" d="M4.993 2h-.648l-1.327 1.391.031.609h1.025l-.068 2h-1.006v1h3v-1h-1.037z"/>
-        <path id="bottom_line" d="M20.002 17h-11.002c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.551 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
-        <path id="middle_line" d="M20.002 10h-11.002c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.551 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
-        <path id="top_line" d="M20.002 3h-11.002c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.551 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
+        <path id="bottom_dot" d="M3 16v1h1.993l.03 1H4v1h1v1H3v1h2.023L6 19.998v-1l-.955-.53.955-.5v-.97L4.993 16z"/>
+        <path id="middle_dot" d="M3 9v1h2.117L3 12.187v1.81l3-.06V13H3.882L6 10.812V9.78L5.332 9z"/>
+        <path id="top_dot" d="M4.993 2h-.648L3.018 3.39l.03.61h1.026l-.068 2H3v1h3V6H4.963z"/>
+        <path id="bottom_line" d="M20.002 17H9c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.55 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
+        <path id="middle_line" d="M20.002 10H9c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.55 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
+        <path id="top_line" d="M20.002 3H9c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.55 0 .998-.447.998-1V4c0-.553-.447-1-.998-1z"/>
     </g>
 </svg>
index 9605026..d807f9e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/listNumbered-rtl.png differ
index bbfa92f..9e7894e 100644 (file)
@@ -1,11 +1,11 @@
 <?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="number-list-rtl">
-        <path id="bottom_dot" d="M18 16v1h1.993l.03 1h-1.023v1h1v1h-2v1h2.023l.977-1.002v-1l-.956-.531.956-.5v-.969l-1.007-.998z"/>
-        <path id="middle_dot" d="M18 9v1h2.116l-2.116 2.187v1.811l3-.062v-.936h-2.118l2.118-2.188v-1.032l-.669-.78z"/>
-        <path id="top_dot" d="M19.993 2h-.648l-1.328 1.391.031.609h1.026l-.069 2h-1.005v1h3v-1h-1.038z"/>
-        <path id="bottom_line" d="M3.999 17h11.002c.552 0 .999.447.999 1v1c0 .553-.447 1-.999 1h-11.002c-.552 0-.999-.447-.999-1v-1c0-.553.447-1 .999-1z"/>
-        <path id="middle_line" d="M3.999 10h11.002c.552 0 .999.447.999 1v1c0 .553-.447 1-.999 1h-11.002c-.552 0-.999-.447-.999-1v-1c0-.553.447-1 .999-1z"/>
-        <path id="top_line" d="M3.999 3h11.002c.552 0 .999.447.999 1v1c0 .553-.447 1-.999 1h-11.002c-.552 0-.999-.447-.999-1v-1c0-.553.447-1 .999-1z"/>
+        <path id="bottom_dot" d="M18 16v1h1.993l.03 1H19v1h1v1h-2v1h2.023L21 19.998v-1l-.956-.53.956-.5v-.97L19.993 16z"/>
+        <path id="middle_dot" d="M18 9v1h2.116L18 12.187v1.81l3-.06V13h-2.118L21 10.812V9.78L20.33 9z"/>
+        <path id="top_dot" d="M19.993 2h-.648l-1.328 1.39.03.61h1.027l-.07 2H18v1h3V6h-1.038z"/>
+        <path id="bottom_line" d="M4 17h11c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="middle_line" d="M4 10h11c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="top_line" d="M4 3h11c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1V4c0-.553.447-1 1-1z"/>
     </g>
 </svg>
index 76328f3..a7b7ae8 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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"/>
-       </g>
+        <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"/>
+    </g>
 </svg>
index 50ac8a3..ce25178 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="menu">
-        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
+        <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H6c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1H6c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1H6c-.553 0-1 .447-1 1z"/>
     </g>
 </svg>
index 51e6611..670d84d 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-ltr">
-        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
     </g>
 </svg>
index bcee09d..00583b4 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.414-6.716 6.716 6.716 6.717z"/>
+        <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"/>
     </g>
 </svg>
index 9063bd4..b04ecdd 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 11l-4-3v2h-3v-3h2l-3-4-3 4h2v3h-3v-2l-4 3 4 3v-2h3v3h-2l3 4 3-4h-2v-3h3v2z"/>
+    <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
 </svg>
index d4b638a..9e7c67f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/newline-ltr.png differ
index dad5f51..1d654eb 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="line_return">
-    <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3h-5.1v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
-  </g>
+    <g id="line_return">
+        <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
+    </g>
 </svg>
index fd758cc..63e5aa1 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="line_return">
-    <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
-  </g>
+    <g id="line_return">
+        <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
+    </g>
 </svg>
index 601428e..e0e4fc0 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>
-        <path d="M16 14l2 2v-11h-4v2h2zm0 2l-7-7-2-2-1-1-1-1-3-3-1 1 2 2h-1v14h4v-2h-2v-10h1l2 2v10h4v-2h-2v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9v-2h-4l2 2zm8-2v2h2v10h-2l2 2h2v-14z"/>
+        <path d="M16 14l2 2V5h-4v2h2zm0 2L9 9 7 7 6 6 5 5 2 2 1 3l2 2H2v14h4v-2H4V7h1l2 2v10h4v-2H9v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9V5H7l2 2zm8-2v2h2v10h-2l2 2h2V5z"/>
     </g>
 </svg>
index 31785a3..a7be5ab 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="g484">
-        <path d="M8 14l-2 2v-11h4v2h-2zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2v-10h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2h-3l-4 4-1-1 4-4zm5-9v-2h4l-2 2zm-8-2v2h-2v10h2l-2 2h-2v-14z" id="path486"/>
+        <path d="M8 14l-2 2V5h4v2H8zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2V7h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2H7l-4 4-1-1 4-4zm5-9V5h4l-2 2zM5 5v2H3v10h2l-2 2H1V5z" id="path486"/>
     </g>
 </svg>
index 344b761..30b1db6 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="outdent-list-ltr">
-        <path id="arrow" d="M8 13h2v-3h-2.052l-.031-2.06-4.712 3.585 4.795 3.554z"/>
-        <path id="bottom_line" d="M20 17h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+        <path id="arrow" d="M8 13h2v-3H7.948l-.03-2.06-4.713 3.585L8 15.08z"/>
+        <path id="bottom_line" d="M20 17H4c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
         <path id="middle_line" d="M20 10h-7c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h7c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
-        <path id="top_line" d="M20 3h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+        <path id="top_line" d="M20 3H4c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1V4c0-.553-.447-1-1-1z"/>
     </g>
 </svg>
index 31e92c5..471fe23 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="outdent-list-rtl">
-        <path id="arrow" d="M16 13h-2v-3h2.052l.031-2.06 4.712 3.585-4.795 3.554z"/>
-        <path id="bottom_line" d="M4 17h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
-        <path id="middle_line" d="M4 10h7c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-7c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
-        <path id="top_line" d="M4 3h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="arrow" d="M16 13h-2v-3h2.052l.03-2.06 4.713 3.585L16 15.08z"/>
+        <path id="bottom_line" d="M4 17h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="middle_line" d="M4 10h7c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+        <path id="top_line" d="M4 3h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1H4c-.553 0-1-.447-1-1V4c0-.553.447-1 1-1z"/>
     </g>
 </svg>
index 9c0ea59..44c1591 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="outline-ltr">
-        <path id="text" d="M5 13h14v6h-14v-6z"/>
-        <path id="float" d="M5 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+        <path id="text" d="M5 13h14v6H5v-6z"/>
+        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
     </g>
 </svg>
index 2a3428e..c5b19c8 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="outline-rtl">
-        <path id="text" d="M19 19h-14v-6h14v6z"/>
-        <path id="float" d="M13 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+        <path id="text" d="M19 19H5v-6h14v6z"/>
+        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
     </g>
 </svg>
index 7400bca..24d7315 100644 (file)
@@ -1,8 +1,8 @@
 <?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="picture">
-        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
-        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
-        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+        <path id="frame" d="M18 4H6c-2-.007-3 .993-3 2.993L3.014 16C3 18 4 18.988 6 19h12c2-.012 2.994-1 3-3.006v-9c-.006-2-1-3-3-2.994zm1 13H5V6h14v11z"/>
+        <path id="mountains" d="M6 13.5L9.5 10l2.328 2.312-1.312 1.094.875 1.032L15.5 11l2.5 2v3H6z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172L15.5 9l2.5 2V7H6z"/>
     </g>
 </svg>
index f6a9c86..47dad2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-ltr.png differ
index 97b77bb..0ea25d7 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="M18 9.9c-.7 0-1.4.3-1.8.9v-4.8h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2h-4.4v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1v3.6h4.9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
+    <path d="M18 9.9c-.7 0-1.4.3-1.8.9V6h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2H4.1v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1V18H9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
 </svg>
index 03050e1..51c40db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/puzzle-rtl.png differ
index 0ad5f37..e606425 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="M6.3 9.9c.7 0 1.4.3 1.8.9v-4.8h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1v3.6h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8h-4.5v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
+    <path d="M6.3 9.9c.7 0 1.4.3 1.8.9V6h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1V18h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8H8.1v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
 </svg>
index 7060db7..6c571ce 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotes-ltr.png differ
index dc1c06f..062d2d9 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>
-        <path d="M19.9 8.7c.3-.1.6-.3.8-.6s.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.9.5-1.6 1.1-2.2 1.8s-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5zm-14.4-.1c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6s.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8z"/>
+        <path d="M19.9 8.7c.3-.1.6-.3.8-.6s.3-.7.3-1.1V6c-1.3.2-1.9.2-3.3.8-.9.5-1.6 1.1-2.2 1.8S13 12 13 16v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5zM5.5 8.6C4.9 9.3 3 12 3 16v4h6c1.1 0 2-.9 2-2v-6H7s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6s.3-.7.3-1.1V6c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8z"/>
     </g>
 </svg>
index df0facf..fc46c93 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotes-rtl.png differ
index 3a8b701..1057ffc 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="g552">
-        <path d="M4.1 8.7c-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.9.5 1.6 1.1 2.2 1.8.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5zm14.4-.1c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8z" id="path554"/>
+        <path d="M4.1 8.7c-.3-.1-.6-.3-.8-.6C3.1 7.8 3 7.4 3 7V6c1.3.2 1.9.2 3.3.8.9.5 1.6 1.1 2.2 1.8.6.7 2.5 3.4 2.5 7.4v4H5c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8C5.6 9.5 4.9 9 4.1 8.7zm14.4-.1c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1V6c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8z" id="path554"/>
     </g>
 </svg>
index b04ec74..7fd4754 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-ltr.png differ
index 24fca8f..bacec22 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="g4">
-        <path d="M3.5 8.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zm15.5-3.6v-4h-2v4h-4v2h4v4h2v-4h4v-2zm-4 7s.1-.9.8-1.8l.2-.2v-2h-1.9l-.6.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
+        <path d="M3.5 8.6C2.9 9.3 1 12 1 16v4h6c1.1 0 2-.9 2-2v-6H5s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1V6c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zM19 5V1h-2v4h-4v2h4v4h2V7h4V5zm-4 7s.1-.9.8-1.8l.2-.2V8h-1.9l-.6.6C12.9 9.3 11 12 11 16v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
     </g>
 </svg>
index 9e91202..e305696 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/quotesAdd-rtl.png differ
index 736f2a6..9aed41d 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="g4">
-        <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zm-15.5-3.6v-4h2v4h4v2h-4v4h-2v-4h-4v-2zm4 7s-.1-.9-.8-1.8l-.2-.2v-2h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
+        <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1V6c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zM5 5V1h2v4h4v2H7v4H5V7H1V5zm4 7s-.1-.9-.8-1.8L8 10V8h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4H7c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
     </g>
 </svg>
index 3bca20f..18ceb35 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/redirect-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/redirect-ltr.png differ
index 884d40d..be25d43 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="create_redirect">
         <g>
-            <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4h-12.1v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6h-6.2v-1.4h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1v-10.5c.1-.5-.1-.9-.3-1.1zm-5.2 1.6h3v4.5h-3v-4.5zm-6.1 0h4v1.6h-4v-1.6zm0 3h4v1.5h-4v-1.5zm0 3h9v1.5h-9v-1.5zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+            <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4H4.4v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6H6.4V16h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1V3.5c.1-.5-.1-.9-.3-1.1zM12.5 4h3v4.5h-3V4zM6.4 4h4v1.6h-4V4zm0 3h4v1.5h-4V7zm0 3h9v1.5h-9V10zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
         </g>
     </g>
 </svg>
index a07e836..a41d178 100644 (file)
@@ -2,8 +2,8 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="create_redirect">
         <g id="g3264">
-            <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7h-10.2c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2v-1.4h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1v-10.5c-.1-.5.1-.9.3-1.1zm5.2 1.6h-3v4.5h3v-4.5zm6.1 0h-4v1.6h4v-1.6zm0 3h-4v1.5h4v-1.5zm0 3h-9v1.5h9v-1.5z" id="path3266"/>
-            <path d="M4.9 13.1l-4.9 3.8 4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
+            <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7H7.8c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2V16h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1V3.5c-.1-.5.1-.9.3-1.1zM11.5 4h-3v4.5h3V4zm6.1 0h-4v1.6h4V4zm0 3h-4v1.5h4V7zm0 3h-9v1.5h9V10z" id="path3266"/>
+            <path d="M4.9 13.1L0 16.9l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
         </g>
     </g>
 </svg>
index 4643928..68bb9d7 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 7b67261..e9594a1 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="m 3,12.044797 c -5e-7,-0.989171 0.150394,-1.914889 0.451184,-2.7771612 C 3.7558785,8.4053812 4.1933899,7.6495032 4.7637193,7 L 6.2286026,7 C 5.6778034,7.7204251 5.261777,8.511764 4.9805221,9.3740188 4.6992623,10.236291 4.5586337,11.122815 4.5586357,12.033598 c -2e-6,0.914522 0.1425798,1.799179 0.427746,2.653974 C 5.2754491,15.538635 5.6856161,16.309444 6.2168835,17 L 4.7637193,17 C 4.1894835,16.365435 3.7519721,15.624488 3.451184,14.777158 3.150394,13.929828 3,13.019042 3,12.044797" />
-        <path id="dot" d="m 10,16 c 0,0.552285 -0.4477153,1 -1,1 -0.5522847,0 -1,-0.447715 -1,-1 0,-0.552285 0.4477153,-1 1,-1 0.5522847,0 1,0.447715 1,1 z" />
-        <path id="star" d="m 14.250652,7.0127142 -0.240235,2.15625 2.185547,-0.609375 0.193359,1.4765618 -1.992187,0.140625 1.306641,1.740234 -1.330079,0.708985 -0.914062,-1.833985 -0.802734,1.822266 -1.382813,-0.697266 1.294922,-1.740234 -1.980469,-0.152343 0.228516,-1.4648438 2.138672,0.609375 -0.240235,-2.15625 1.535157,0" />
-        <path id="right-bracket" d="m 21,12.044797 c -3e-6,0.981711 -0.152351,1.896229 -0.457043,2.743558 C 20.241767,15.635686 19.806209,16.3729 19.235883,17 l -1.453164,0 c 0.527356,-0.686824 0.93557,-1.455766 1.224642,-2.306829 0.289069,-0.854795 0.433604,-1.741318 0.433606,-2.659573 -2e-6,-0.910783 -0.140631,-1.797307 -0.421886,-2.6595792 C 18.737821,8.511764 18.321795,7.7204251 17.771,7 l 1.464883,0 c 0.574232,0.653236 1.011744,1.4128466 1.312536,2.2788341 0.300785,0.8622719 0.45118,1.7842569 0.451183,2.7659629" />
+        <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="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"/>
     </g>
 </svg>
index 6ad7917..ef5f97b 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="remove">
-        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0H9v6h1v-6zm4 0h-1v6h1v-6zm0-4V5H9v1H6v3h1v7.966l1 1.03v-.073V18h6.984l.016-.018v.015l1-1.03V9h1V6h-3zm1 11H8V9h7v8zm1-9H7V7h9v1z"/>
     </g>
 </svg>
index 208d44b..e683c01 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.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 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.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"/>
     </g>
 </svg>
index 918b3d7..a2eba48 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png and b/resources/lib/oojs-ui/themes/apex/images/icons/secure-link.png differ
index a9c7d27..9a75454 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.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+        <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"/>
     </g>
 </svg>
index 9fa0a4b..7ec6263 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="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+        <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>
 </svg>
index e8b427b..82d16af 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">
-  <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-  <g id="down">
-    <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
-  </g>
+    <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    <g id="down">
+        <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
+    </g>
 </svg>
index e5e9519..7466f48 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">
-  <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-  <g id="down">
-    <path id="arrow" d="M9 3L5.5 9 2 3z"/>
-  </g>
+    <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    <g id="down">
+        <path id="arrow" d="M9 3L5.5 9 2 3z"/>
+    </g>
 </svg>
index 51ccb89..2f38ecc 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 4d60128..c2ffd48 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-.311.366-.531.808-.66 1.327-.128.513-.192 1.08-.192 1.699 0 .513.058 1 .174 1.46.122.46.311.87.568 1.23.629.863 1.155 1.139 2.011 1.363l.247 3.035h-5v-3h.605l.531 1.354.394.053.605.044.751.035.456.009h.66l-.092-.894c-.629-.094-.811-.268-1.336-.522-.525-.26-.98-.59-1.365-.991-.379-.401-.675-.867-.889-1.398-.214-.537-.321-1.13-.321-1.779 0-.82.131-1.537.394-2.15.269-.619.656-1.133 1.163-1.54.507-.407 1.133-.711 1.878-.912.745-.206 1.6-.31 2.565-.31.959 0 1.811.103 2.556.31.751.201 1.38.504 1.887.912.507.407.892.92 1.154 1.54.269.614.403 1.33.403 2.15 0 .649-.107 1.242-.321 1.779-.214.531-.513.997-.898 1.398-.379.401-.831.732-1.356.991-.525.254-.707.428-1.336.522l-.092.894h.66l.447-.009.751-.035.605-.044.403-.053.531-1.354h.605v3h-5l.247-3.035c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.619-.064-1.186-.192-1.699-.128-.519-.348-.962-.66-1.327-.311-.372-.73-.661-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-.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"/>
     </g>
 </svg>
index ea8c26c..54ba77a 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 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </svg>
index 480189f..070d785 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="strikethrough-a">
-        <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
-        <path id="a" d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z"/>
+        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
     </g>
 </svg>
index 8aafe3f..1bcb55b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.png differ
index d57b652..6408d01 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="strikethrough-s">
-        <path id="strikethrough" d="M6 12h12v1h-12v-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 .889.221 1.602.719 2.13.498.528 1.279.91 2.312 1.14l.812.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.531 1.26-.358.291-.894.45-1.625.45-.477 0-.969-.074-1.469-.24-.502-.166-1.031-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.143.417 1.688.54.549.121 1.07.18 1.562.18 1.286 0 2.297-.293 3-.9.709-.605 1.062-1.486 1.062-2.608 0-.943-.256-1.726-.781-2.312-.521-.592-1.305-1-2.344-1.229l-.812-.181c-.716-.148-1.204-.352-1.406-.539-.205-.203-.312-.485-.312-.935 0-.533.162-.899.5-1.17.342-.271.836-.42 1.531-.42.395 0 .818.052 1.25.181.433.127.908.333 1.406.6l.375.18v-2.041s-1.188-.383-1.688-.479c-.499-.098-.984-.151-1.468-.151z"/>
+        <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"/>
     </g>
 </svg>
index a0065cb..5b1c1fd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png and b/resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-y.png differ
index 8409dc1..2fdbc87 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="strikethrough-y">
-        <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
-        <path id="a" d="M7 6h1.724l3.288 4.935 3.264-4.935h1.724l-4.194 6.285v5.715h-1.612v-5.715l-4.194-6.285"/>
+        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
     </g>
 </svg>
index b7507da..fbb0c3c 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">
-       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-       <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
 </svg>
index 9fe5325..91a71ec 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">
-       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-       <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
 </svg>
index 39f30a7..45abfda 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">
-       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-       <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
 </svg>
index eabab21..33b5814 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">
-       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-       <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
 </svg>
index 15bb06a..6b7edc6 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="table-caption">
-      <path id="caption" d="M6 6h12v3H6z"/>
-      <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
+        <path id="caption" d="M6 6h12v3H6z"/>
+        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
     </g>
 </svg>
index 798ee4a..a67ed20 100644 (file)
@@ -1,11 +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="table-insert-column-ltr">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 5,5 2,0 0,14 -2,0 z"
-         id="column" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 5h2v14H5z" id="column"/>
     </g>
 </svg>
index dfa33a0..dee782e 100644 (file)
@@ -1,11 +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="table-insert-column-rtl">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 17,5 2,0 0,14 -2,0 z"
-         id="column" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M17 5h2v14h-2z" id="column"/>
     </g>
 </svg>
index 91d0664..ad9d86d 100644 (file)
@@ -1,11 +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="table-insert-row-after">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 5,17 14,0 0,2 -14,0 z"
-         id="row" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 17h14v2H5z" id="row"/>
     </g>
 </svg>
index 4b71f2a..e9dfe04 100644 (file)
@@ -1,11 +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="table-insert-row-before">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 5,5 14,0 0,2 -14,0 z"
-         id="row" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 5h14v2H5z" id="row"/>
     </g>
 </svg>
index 6a8b77d..3ffb9e5 100644 (file)
@@ -1,10 +1,10 @@
 <?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="table-merge-cells">
-    <g id="merge-cell-left">
-      <path id="cell-border" d="m 4,7 0,9 7,0 0,-3 -1,0.834 L 10,15 5,15 5,8 10,8 10,9.167 11,10 11,7 z" />
-      <path id="arrow" d="m 8,9 0,2 -2,0 0,1 2,0 0,2 3,-2.5 z" />
+    <g id="table-merge-cells">
+        <g id="merge-cell-left">
+            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+        </g>
+        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
     </g>
-    <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1,0,0,1,24,0)" />
-  </g>
 </svg>
index 1ba8c44..3c901f7 100644 (file)
@@ -1,7 +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="table-insert">
-        <path id="table" d="M4 5v13h16v-13zm2 2h5v4h-5zm7 0h5v4h-5zm-7 5h5v4h-5zm7 0h5v4h-5z"/>
+        <path id="table" d="M4 5v13h16V5zm2 2h5v4H6zm7 0h5v4h-5zm-7 5h5v4H6zm7 0h5v4h-5z"/>
     </g>
 </svg>
index 8e100fc..15de70b 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 534824c..8e517bf 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
index 6b594b2..13b1fc7 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>
-        <path d="M24 6h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+        <path d="M24 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
     </g>
-    <path d="M19 13v7h-16c-1.1 0-2-.9-2-2v-11h12v-1h-13v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
+    <path d="M19 13v7H3c-1.1 0-2-.9-2-2V7h12V6H0v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
 </svg>
index 36b25a3..d44c3a4 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="g690">
-        <path d="M0 6h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path692"/>
+        <path d="M0 6h4V2h2v4h4v2H6v4H4V8H0z" id="path692"/>
     </g>
-    <path d="M5 13v7h16c1.1 0 2-.9 2-2v-11h-12v-1h13v12c0 1.7-1.3 3-3 3h-17v-8h1z" id="path694"/>
+    <path d="M5 13v7h16c1.1 0 2-.9 2-2V7H11V6h13v12c0 1.7-1.3 3-3 3H4v-8h1z" id="path694"/>
 </svg>
index 62526a0..7dbff91 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="text-dir-ltr">
-        <path d="M7 7h-2v-1h2l.469.5.531-.5h2v1h-2v10h2v1h-2l-.5-.531-.5.531h-2v-1h2zM13.976 16v-2h-2.976v-4h2.976v-1.956l6.024 3.978z"/>
+        <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
     </g>
 </svg>
index 913bbfd..76933a6 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="text-dir-rtl">
-        <path d="M17 17h2v1h-2l-.469-.5-.531.5h-2v-1h2v-10h-2v-1h2l.5.531.5-.531h2v1h-2zM10.024 8v2h2.976v4h-2.976v1.956l-6.024-3.978z"/>
+        <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
     </g>
 </svg>
index 4484496..a2f48be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/text-style.png and b/resources/lib/oojs-ui/themes/apex/images/icons/text-style.png differ
index 0198c35..d9ff340 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.789l-1.14-12h-2.789l-8.156 12h2.789l2.039-3h4.183l.285 3zm-3.109-5l2.311-3.4.323 3.4h-2.634z"/>
-        <path id="underline" d="M6 19h12v1h-12v-1z"/>
+        <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="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index 7740e43..8954a21 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.1 13.1c-1.8-2.1-2.7-4.3-3-5.1h4.7l.7-2h-5.5v-3h-2v3h-5v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2l-4.6-14h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
+    <path d="M11.1 13.1C9.3 11 8.4 8.8 8.1 8h4.7l.7-2H8V3H6v3H1v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2L18 6h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
 </svg>
index 17f543c..38066d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/translation-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/translation-rtl.png differ
index c78e622..44ba971 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.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7l-.7-2h5.5v-3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zm-1.4 6.9l-1.3-4h-5.3l-1.3 4h-2.2l4.6-14h3l4.7 14h-2.2zm-4-12l-2 6h4l-2-6z" id="path704"/>
+    <path d="M12.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7L10 6h5.5V3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zM11 20l-1.3-4H4.4l-1.3 4H.9L5.5 6h3l4.7 14H11zM7 8l-2 6h4L7 8z" id="path704"/>
 </svg>
index f591431..76502dc 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="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </svg>
index 0731f05..071bd32 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>
-        <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+        <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
     </g>
 </svg>
index 2a92cbe..69c17b4 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="g714">
-        <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+        <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
     </g>
 </svg>
index 8f261a8..c7fce47 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.png differ
index 66c024a..6f3da1e 100644 (file)
@@ -1,4 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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"/>
+    <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"/>
+    </g>
 </svg>
index e683c52..63ec5cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.png differ
index 07cecbf..96305a6 100644 (file)
@@ -1,4 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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"/>
+    <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"/>
+    </g>
 </svg>
index dd6dde3..ea7350b 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 16h2.076l-3.463-10h-2.077l-3.46 10h2.077l.627-2h3.604l.616 2zm-3.921-3.623l1.496-4.379 1.511 4.379h-3z"/>
-        <path id="underline" d="M7 17h10v1h-10v-1z"/>
+        <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="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index c4eb2a2..2504e66 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png and b/resources/lib/oojs-ui/themes/apex/images/icons/underline-u.png differ
index fbd7c14..d07129f 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.959c-.104 1.707.695 2.002 2 2.041 1.777.062 2.002-.879 2-2.041v-5.959h2v6.123c0 1.279-.338 2.245-1.016 2.898-.672.651-1.666.979-2.98.979-1.32 0-2.319-.326-2.996-.979-.672-.653-1.008-1.619-1.008-2.898v-6.123"/>
-        <path id="underline" d="M7 17h10v1h-10v-1z"/>
+        <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="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 9e5e72f..9f0efc5 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 8l8 10h-16z"/>
+    <path d="M12 8l8 10H4z"/>
 </svg>
index eebd9b1..ded0fe1 100644 (file)
@@ -7,9 +7,9 @@
         <path d="M18 5h-4v2h2v10h-2v2h4z"/>
     </g>
     <g>
-        <path d="M2 5h4v2h-2v10h2v2h-4z"/>
+        <path d="M2 5h4v2H4v10h2v2H2z"/>
     </g>
     <g>
-        <path d="M7 5h4v2h-2v10h2v2h-4z"/>
+        <path d="M7 5h4v2H9v10h2v2H7z"/>
     </g>
 </svg>
index cd3b76c..093c822 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="window">
-        <path id="title" d="M7 10h10v1h-10z"/>
-        <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+        <path id="title" d="M7 10h10v1H7z"/>
+        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
     </g>
 </svg>
index d9dc6a8..cddc0db 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="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 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+        <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"/>
     </g>
 </svg>
index bfa8ef0..5ce25ba 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="down">
-        <path id="arrow" d="M2 3l3.5 6 3.5-6z"/>
+        <path id="arrow" d="M2 3l3.5 6L9 3z"/>
     </g>
 </svg>
index aeca27a..c4f7998 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="ltr">
-        <path id="arrow" d="M3 9v-7l6 3.5z"/>
+        <path id="arrow" d="M3 9V2l6 3.5z"/>
     </g>
 </svg>
index eba0099..b49613e 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="rtl">
-        <path id="arrow" d="M3 5.5l6 3.5v-7z"/>
+        <path id="arrow" d="M3 5.5L9 9V2z"/>
     </g>
 </svg>
index 4b01bb0..7a250f5 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="up">
-        <path id="arrow" d="M5.5 2l-3.5 6h7z"/>
+        <path id="arrow" d="M5.5 2L2 8h7z"/>
     </g>
 </svg>
index 969fa2d..051ed5f 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="required">
-        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+        <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"/>
     </g>
 </svg>
index df1c61e..cc1f377 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 266349e..9b49c4b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+        <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"/>
     </g>
 </svg>
index c9443d7..5564b42 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 5368fd7..3847af2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+        <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"/>
     </g>
 </svg>
index 63a0b57..e413e75 100644 (file)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
-       <g id="transparency">
-               <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
-               <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
-               <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
-               <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
-       </g>
+<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"/>
+    </g>
 </svg>
index 5fbf34d..701166a 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "bell": { "file": "images/icons/bell.svg" },
                "bellOn": { "file": {
index 29681c0..18c8dd5 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "article": { "file": {
                        "ltr": "images/icons/article-ltr.svg",
index 8fdc505..0e1a8a1 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "alignCentre": { "file": "images/icons/align-center.svg" },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
index 490f8fa..cfd4abc 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "indent": { "file": {
                        "ltr": "images/icons/indent-ltr.svg",
index 65fbc21..03aeb51 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "bigger": { "file": {
                        "ltr": "images/icons/bigger-ltr.svg",
index 497a301..02dfffa 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "beta": { "file": "images/icons/beta.svg" },
                "betaLaunch": { "file": "images/icons/betaLaunch.svg" },
index 9eec19b..0ecc2e1 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "map": { "file": {
                        "ltr": "images/icons/map-ltr.svg",
index 960079b..1c6da5a 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "image": { "file": {
                        "ltr": "images/icons/image-ltr.svg",
index 1f12f2a..fb1deb1 100644 (file)
                        "ltr": "images/icons/lock-ltr.svg",
                        "rtl": "images/icons/lock-rtl.svg"
                }, "variants": [ "destructive" ] },
-               "star": { "file": "images/icons/star.svg" },
+               "ongoingConversation": {
+                       "file": {
+                               "ltr": "images/icons/ongoingConversation-ltr.svg",
+                               "rtl": "images/icons/ongoingConversation-rtl.svg"
+                       },
+                       "variants": [ "progressive" ]
+               },
+               "star": { "file": "images/icons/star.svg", "variants": [ "constructive" ] },
                "trash": { "file": "images/icons/trash.svg" },
                "trashUndo": { "file": {
                        "ltr": "images/icons/trashUndo-ltr.svg",
@@ -47,6 +54,6 @@
                        "ltr": "images/icons/unLock-ltr.svg",
                        "rtl": "images/icons/unLock-rtl.svg"
                }, "variants": [ "destructive" ] },
-               "unStar": { "file": "images/icons/unStar.svg" }
+               "unStar": { "file": "images/icons/unStar.svg", "variants": [ "constructive" ] }
        }
 }
index 9aa1b80..8305580 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "arrowNext": { "file": {
                        "ltr": "images/icons/arrow-ltr.svg",
index 2bda575..e2b2c82 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "userActive": { "file": {
                        "ltr": "images/icons/userActive-ltr.svg",
index fd13c95..911eb6f 100644 (file)
@@ -1,6 +1,12 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
+       "variants": {
+               "invert": {
+                       "color": "#FFFFFF",
+                       "global": true
+               }
+       },
        "images": {
                "logoCC": { "file": "images/icons/logo-cc.svg" },
                "logoWikimediaCommons": { "file": "images/icons/logo-wikimediaCommons.svg" },
index d385eb1..a311de0 100644 (file)
@@ -25,7 +25,7 @@
                "advanced": { "file": "images/icons/advanced.svg" },
                "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
                "cancel": { "file": "images/icons/cancel.svg" },
-               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive" ] },
+               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] },
                "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
                "close": { "file": {
                        "ltr": "images/icons/close-ltr.svg",
index 0d37afa..ef2ac5c 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="add">
-        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+        <path id="plus" d="M13 8h-2v3H8v2h3v3h2v-3h3v-2h-3z"/>
     </g>
 </svg>
index 93a1c6e..2ad5f60 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="add">
-        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+        <path id="plus" d="M13 8h-2v3H8v2h3v3h2v-3h3v-2h-3z"/>
     </g>
 </svg>
index 29e5dba..85e39fe 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="add">
-        <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+        <path id="plus" d="M13 8h-2v3H8v2h3v3h2v-3h3v-2h-3z"/>
     </g>
 </svg>
index 733c3f9..74cf62b 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 fe3dc5b..855b7b8 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 14.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5 1.1c-.5-.3-1-.5-1.4-.6l-.2-1.8h-2.9l-.3 1.8c-.5.1-.9.3-1.4.6l-1.5-1.1-2.1 2.1 1 1.5c-.3.5-.4.9-.6 1.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6 1.4l-1 1.5 2.1 2.1 1.5-1c.4.2.9.4 1.4.6l.3 1.8h3l.3-1.8c.5-.1.9-.3 1.4-.6l1.5 1.1 2.1-2.1-1.1-1.5c.3-.5.5-1 .6-1.4l1.5-.3zm-8 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"/>
+    <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"/>
 </svg>
index 7dab898..c486b98 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 b4629bf..cdf07b2 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 14.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5 1.1c-.5-.3-1-.5-1.4-.6l-.2-1.8h-2.9l-.3 1.8c-.5.1-.9.3-1.4.6l-1.5-1.1-2.1 2.1 1 1.5c-.3.5-.4.9-.6 1.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6 1.4l-1 1.5 2.1 2.1 1.5-1c.4.2.9.4 1.4.6l.3 1.8h3l.3-1.8c.5-.1.9-.3 1.4-.6l1.5 1.1 2.1-2.1-1.1-1.5c.3-.5.5-1 .6-1.4l1.5-.3zm-8 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"/>
+    <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"/>
 </svg>
index 715a3f5..d743519 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="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
-        <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <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"/>
     </g>
 </svg>
index 6928cab..1daa91f 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: #FF5D00 }</style>
     <g id="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
-        <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <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"/>
     </g>
 </svg>
index f0c6522..42a4bf6 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="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
-        <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
-        <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png
new file mode 100644 (file)
index 0000000..0cdfef9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center-invert.svg
new file mode 100644 (file)
index 0000000..939962c
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="align-center">
+        <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0-12h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+    </g>
+</svg>
index 887c2f6..4697eb9 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="align-center">
-        <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+        <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H9c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm-5.5 9h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0-12h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png
new file mode 100644 (file)
index 0000000..a2338b9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left-invert.svg
new file mode 100644 (file)
index 0000000..aba4fbf
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="align-float-left">
+        <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 3h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 3h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm-10-9h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 12h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+    </g>
+</svg>
index ce9761e..1c95377 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="align-float-left">
-        <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM13.5 9h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 12h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 15h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+        <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1H4c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zm9.5 0h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 3h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 3h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm-10-9h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm0 12h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png
new file mode 100644 (file)
index 0000000..80d5f6b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right-invert.svg
new file mode 100644 (file)
index 0000000..9f6eca8
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="align-float-right">
+        <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 3h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 3h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm10-9h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 12h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
+    </g>
+</svg>
index 557692a..2467f7f 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="align-float-right">
-        <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zM10.5 9h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 12h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 15h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 6h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 18h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
+        <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zm-9.5 0h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 3h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 3h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm10-9h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zm0 12h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
     </g>
 </svg>
index 9aca415..5b29c98 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>\r
-</svg>\r
+<?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>
index 049f21e..20835d2 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
-<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>\r
-</svg>\r
+<?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>
index 11fffcb..6f69940 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>\r
-</svg>\r
+<?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>
index 20875f3..e919d37 100644 (file)
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
-<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>\r
-</svg>\r
+<?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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png
new file mode 100644 (file)
index 0000000..15b0e44
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr-invert.svg
new file mode 100644 (file)
index 0000000..e3e4b98
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g4">
+        <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z" id="path6"/>
+    </g>
+</svg>
index b07621e..a0097cb 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="g4">
-        <path d="M16 12h-10c-1.7 0-3 1.3-3 3h13v3l5-4.5-5-4.5v3z" id="path6"/>
+        <path d="M16 12H6c-1.7 0-3 1.3-3 3h13v3l5-4.5L16 9v3z" id="path6"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png
new file mode 100644 (file)
index 0000000..bef0ab4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl-invert.svg
new file mode 100644 (file)
index 0000000..1e9cdab
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
+    </g>
+</svg>
index a018928..54d6d25 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>
-        <path d="M8 12h10c1.7 0 3 1.3 3 3h-13v3l-5-4.5 5-4.5v3z"/>
+        <path d="M8 12h10c1.7 0 3 1.3 3 3H8v3l-5-4.5L8 9v3z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png
new file mode 100644 (file)
index 0000000..764b7c0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr-invert.svg
new file mode 100644 (file)
index 0000000..aec5f50
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
+    </g>
+</svg>
index b719946..e8a1ad3 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>
-        <path d="M12 10h4v-5h-4v5zm-5 2h9v-1h-9v1zm0 2h9v-1h-9v1zm0 2h9v-1h-9v1zm4-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0-4h-4v1h4v-1zm-6-2h13v16h-10c-1.7 0-3-1.3-3-3v-13z"/>
+        <path d="M12 10h4V5h-4v5zm-5 2h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zM5 3h13v16H8c-1.7 0-3-1.3-3-3V3z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png
new file mode 100644 (file)
index 0000000..b701339
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl-invert.svg
new file mode 100644 (file)
index 0000000..87cb725
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g16">
+        <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z" id="path18"/>
+    </g>
+</svg>
index f14dfbd..ab4398e 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="g16">
-        <path d="M11 10h-4v-5h4v5zm5 2h-9v-1h9v1zm0 2h-9v-1h9v1zm0 2h-9v-1h9v1zm-4-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0-4h4v1h-4v-1zm6-2h-13v16h10c1.7 0 3-1.3 3-3v-13z" id="path18"/>
+        <path d="M11 10H7V5h4v5zm5 2H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zm6-2H5v16h10c1.7 0 3-1.3 3-3V3z" id="path18"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png
new file mode 100644 (file)
index 0000000..f67ac4a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr-invert.svg
new file mode 100644 (file)
index 0000000..81e2add
--- /dev/null
@@ -0,0 +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>
+        <g>
+            <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
+        </g>
+        <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
+    </g>
+</svg>
index 7711971..08afca2 100644 (file)
@@ -4,6 +4,6 @@
         <g>
             <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
         </g>
-        <path d="M17 14v-11h-13v13c0 1.7 1.3 3 3 3h5l-3-3h-3v-1h2.6l1-1h-3.6v-1h9v1h-2l1 1h2l1-1zm-11-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0 2h4v1h-4v-1zm9 3h-9v-1h9v1zm-4-2v-5h4v5h-4z"/>
+        <path d="M17 14V3H4v13c0 1.7 1.3 3 3 3h5l-3-3H6v-1h2.6l1-1H6v-1h9v1h-2l1 1h2l1-1zM6 5h4v1H6V5zm0 2h4v1H6V7zm0 2h4v1H6V9zm9 3H6v-1h9v1zm-4-2V5h4v5h-4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png
new file mode 100644 (file)
index 0000000..1db4c2e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f9ec5b6
--- /dev/null
@@ -0,0 +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="g28">
+        <g id="g30">
+            <path d="M5 11l6 7 4-4 1 1-5 5-7-8z" id="path32"/>
+        </g>
+        <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z" id="path34"/>
+    </g>
+</svg>
index 771b3ff..e405ff5 100644 (file)
@@ -4,6 +4,6 @@
         <g id="g30">
             <path d="M5 11l6 7 4-4 1 1-5 5-7-8z" id="path32"/>
         </g>
-        <path d="M9 14v-11h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1h3.6v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0 2h-4v1h4v-1zm-9 3h9v-1h-9v1zm4-2v-5h-4v5h4z" id="path34"/>
+        <path d="M9 14V3h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1H20v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm-9 3h9v-1h-9v1zm4-2V5h-4v5h4z" id="path34"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png
new file mode 100644 (file)
index 0000000..7f7b0a3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5398dc8
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
+    </g>
+</svg>
index e54c0c4..fcbe4ee 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>
-        <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zm-4.2-5.2c.3-.4.6-.7 1-1h-5.8v-1h9s1.2 0 2 .6v-8.6h-13v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3h-3.8v-1h3.9l.3-1h-4.2v-1h4.8zm.2-8h4v5h-4v-5zm-5 0h4v1h-4v-1zm0 2h4v1h-4v-1zm0 2h4v1h-4v-1z"/>
+        <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zM11.8 13c.3-.4.6-.7 1-1H7v-1h9s1.2 0 2 .6V3H5v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3H7v-1h3.9l.3-1H7v-1h4.8zm.2-8h4v5h-4V5zM7 5h4v1H7V5zm0 2h4v1H7V7zm0 2h4v1H7V9z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png
new file mode 100644 (file)
index 0000000..dafab9b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl-invert.svg
new file mode 100644 (file)
index 0000000..33bcf2a
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g44">
+        <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z" id="path46"/>
+    </g>
+</svg>
index 31134f1..7ded232 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="g44">
-        <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7-1.1-1.1 2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6v-8.6h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4v-5zm5 0h-4v1h4v-1zm0 2h-4v1h4v-1zm0 2h-4v1h4v-1z" id="path46"/>
+        <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7L5 21.2l2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6V3h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4V5zm5 0h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9z" id="path46"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png
new file mode 100644 (file)
index 0000000..16d67ef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell-invert.svg
new file mode 100644 (file)
index 0000000..13f6ede
--- /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="M17.5 14V9c0-3-2.3-5-5.5-5S6.5 6 6.5 9v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 20H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+</svg>
index df08800..787ed14 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="M17.5 14v-5c0-3-2.3-5-5.5-5s-5.5 2-5.5 5v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zm-5.5 6h-3c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+    <path d="M17.5 14V9c0-3-2.3-5-5.5-5S6.5 6 6.5 9v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zM12 20H9c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png
new file mode 100644 (file)
index 0000000..e59b49d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr-invert.svg
new file mode 100644 (file)
index 0000000..7dfcb1c
--- /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="M17.8 14.7l1.7-4.7c1-2.8-.5-5.5-3.5-6.6s-5.9 0-6.9 2.8l-1.7 4.7c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 19.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+</svg>
index 4450e69..9572f43 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png differ
index f419e79..f68a8e0 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="M17.8 14.7l1.7-4.7c1-2.8-.5-5.5-3.5-6.6s-5.9 0-6.9 2.8l-1.7 4.7c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zm-5.8 5.1l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+    <path d="M17.8 14.7l1.7-4.7c1-2.8-.5-5.5-3.5-6.6s-5.9 0-6.9 2.8l-1.7 4.7c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zM12 19.8l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png
new file mode 100644 (file)
index 0000000..114d215
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl-invert.svg
new file mode 100644 (file)
index 0000000..03874c8
--- /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="M6.21 14.7L4.51 10c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z" id="path56"/>
+</svg>
index b236b99..6e71a86 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png differ
index e4c3a3f..ae03529 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="M6.209 14.7l-1.7-4.7c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z" id="path56"/>
+    <path d="M6.21 14.7L4.51 10c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z" id="path56"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png
new file mode 100644 (file)
index 0000000..7d23df2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta-invert.svg
new file mode 100644 (file)
index 0000000..4d8c673
--- /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="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 12l-3-2-1 4-1-4-3 2 2-3-4-1 4-1-2-3 3 2 1-4 1 4 3-2-2 3 4 1-4 1 2 3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png
new file mode 100644 (file)
index 0000000..d620367
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch-invert.svg
new file mode 100644 (file)
index 0000000..5058629
--- /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="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+</svg>
index a693b59..c3f99d6 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="M15.3 14.7c.8-3.8-.6-10.7-3.3-10.7-2.7 0-4.2 6.7-3.4 10.5l-1.6 3.5h2.7l.3 1h4c.2-.3.1-.5.3-1h2.7l-1.7-3.3zm-3.3-4.7c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+    <path d="M15.3 14.7C16.1 10.9 14.7 4 12 4c-2.7 0-4.2 6.7-3.4 10.5L7 18h2.7l.3 1h4c.2-.3.1-.5.3-1H17l-1.7-3.3zM12 10c-.8 0-1.5-.7-1.5-1.5S11.2 7 12 7s1.5.7 1.5 1.5S12.8 10 12 10zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png
new file mode 100644 (file)
index 0000000..867a1d8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr-invert.svg
new file mode 100644 (file)
index 0000000..9b3cdeb
--- /dev/null
@@ -0,0 +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>
+    <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+    <g id="up">
+        <path id="arrow" d="M15.5 9h7L19 3z"/>
+    </g>
+</svg>
index 94ec670..6d95fc6 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">
-  <path d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z" id="a"/>
-  <g id="up">
-    <path id="arrow" d="M15.5 9h7l-3.5-6z"/>
-  </g>
+    <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+    <g id="up">
+        <path id="arrow" d="M15.5 9h7L19 3z"/>
+    </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png
new file mode 100644 (file)
index 0000000..2575108
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl-invert.svg
new file mode 100644 (file)
index 0000000..3d00d67
--- /dev/null
@@ -0,0 +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>
+    <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+    <g id="up">
+        <path id="arrow" d="M1.5 9h7L5 3z"/>
+    </g>
+</svg>
index b2a6c13..807cdd9 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">
-  <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
-  <g id="up">
-    <path id="arrow" d="M1.5 9h7L5 3z"/>
-  </g>
+    <path d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+    <g id="up">
+        <path id="arrow" d="M1.5 9h7L5 3z"/>
+    </g>
 </svg>
index c850e65..1447b77 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 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z" id="path4"/>
 </svg>
index 289ef4f..db7d0f7 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 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z" id="path4"/>
 </svg>
index 0ddd1d4..6299c30 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 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+    <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9H7v-2h10v2z" id="path4"/>
 </svg>
index 9408937..6a542dc 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="g66">
-        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z" id="path68"/>
     </g>
 </svg>
index 3d9cfd7..f6d5486 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="g66">
-        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+        <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4L13 11h4zM4 4L3 5l2.4 2.4C4.5 8.7 4 10.3 4 12c0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4L19 21l1-1L4 4zm3 9v-2h2l2 2H7z" id="path68"/>
     </g>
 </svg>
index ba48235..4080e8d 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="g66">
-        <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+        <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z" id="path68"/>
     </g>
 </svg>
index 8f80759..d0ddde0 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="g66">
-        <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+        <path d="M7 11v2h2l-3.6 3.6C4.5 15.3 4 13.7 4 12c0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4L11 11H7zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4L5 21l-1-1L20 4zm-3 9v-2h-2l-2 2h4z" id="path68"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png
new file mode 100644 (file)
index 0000000..7d531fe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a-invert.svg
new file mode 100644 (file)
index 0000000..77d0c23
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-a">
+        <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
+    </g>
+</svg>
index 4b82877..d5cee05 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-a">
-        <path d="M16 18h3l-5-12h-3l-5 12h3l1.25-3h4.5l1.25 3zm-4.917-5l1.417-3.4 1.417 3.4h-2.834z"/>
+        <path d="M16 18h3L14 6h-3L6 18h3l1.25-3h4.5L16 18zm-4.917-5L12.5 9.6l1.417 3.4h-2.834z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png
new file mode 100644 (file)
index 0000000..d46c11a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg
new file mode 100644 (file)
index 0000000..da076ed
--- /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"><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"/>
+    </g>
+</svg>
index 871da47..c2addd8 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 f96cebc..ad6b3e4 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.349 1.386 2.101 4.159 2.258l2.187-.029.318.044c-.03.127-.251.345-.665.652l-.089.066c-1.236.929-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.711-.99-.65-.66-.975-1.559-.975-2.698.005-1.354.566-2.573 1.684-3.658v-.044l-.606-.55c-.148-.181-.222-.391-.222-.63 0-.489.239-1.109.717-1.862.65-1.046 1.303-1.566 1.958-1.561.886.005 1.618.42 2.194 1.246.325.479-.03.552-1.064.22-.842-.327-1.527-.051-2.054.828l.015.073 1.123.865.052.007c1.404-.498 2.418-.74 3.043-.726-.059.117-.14.362-.244.733-.103.357-.204.684-.303.982l-.126.374-.384.051c-1.743.239-2.992.716-3.745 1.429-.463.464-.697.973-.702 1.525"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png
new file mode 100644 (file)
index 0000000..eb0121d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg
new file mode 100644 (file)
index 0000000..6493657
--- /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"><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"/>
+    </g>
+</svg>
index ad6f342..ed491f3 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 f04c6aa..27108e2 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.411 8.232l-1.676-.665.694-1.567 1.688.64-.707 1.592m.775 3.078c-.509-.286-1-.427-1.476-.423-.471 0-.982.205-1.532.616l-.506.379.006.025c1.084.066 1.934.099 2.551.099h.313c.567-.021.992-.064 1.276-.131-.067-.17-.275-.359-.625-.566h-.006m-6.803 3.296c-.017-.904-.329-1.87-.938-2.898l1.294-1.729.119.149c.267.336.504.924.713 1.766l.063.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.679-.601 1.282-.902 1.807-.902.383.004.848.195 1.394.572.55.377.884.696 1 .958.063.149.094.386.094.709 0 .696-.11 1.229-.331 1.598-.192.311-.473.555-.844.734-.438.207-1.549.311-3.333.311-.8 0-1.795-.021-2.983-.062l-.144.429c-.254.672-.463 1.113-.625 1.324-.725.937-1.786 1.405-3.183 1.405-1.705-.008-2.557-.922-2.557-2.742.004-.941.279-1.814.825-2.618.15-.216.298-.367.444-.454.225-.133.288-.091.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-.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png
new file mode 100644 (file)
index 0000000..4dcdaa2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg
new file mode 100644 (file)
index 0000000..6396571
--- /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"><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"/>
+    </g>
+</svg>
index c4af66e..718accb 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 4dbec6d..b55042a 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-.058.257-.15.367-.274.114-.13.205-.302.273-.516.073-.213.11-.48.11-.797V13h-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.218.175.395.29.53.12.136.247.232.383.29.14.05.276.077.406.077m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.343-.242.78-.242 1.312V18H6v-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.348.49.738.64 1.17.15.433.226 1.094.226 1.61h1.353v2.04H17.78v1.6c0 .58-.103 1.092-.31 1.54-.21.442-.49.815-.845 1.117-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.078-1.46-.234-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.105-1.182.32-1.64c.213-.46.497-.685.85-.977.355-.297.76-.513 1.22-.648.458-.14.935-.21 1.43-.21h1.132c-.01-.49-.04-1.043-.242-1.36-.198-.323-.453-.58-.766-.766-.312-.193-.598-.332-.984-.426-.374-.09-.577-.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-.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png
new file mode 100644 (file)
index 0000000..1f96ddf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b-invert.svg
new file mode 100644 (file)
index 0000000..78ab202
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-b">
+        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+    </g>
+</svg>
index 4f64820..1806709 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-b">
-        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.011-1.975-1.989-3 2-.975 1.989-1.935 1.989-3 0-2-2-3-4-3h-6v12zm7-8c0 1.001 0 1-2 1h-2v-3h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+        <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.01-1.975-1.99-3 2-.975 1.99-1.935 1.99-3 0-2-2-3-4-3H7v12zm7-8c0 1 0 1-2 1h-2V8h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png
new file mode 100644 (file)
index 0000000..7ea9092
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg
new file mode 100644 (file)
index 0000000..92aff6d
--- /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"><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"/>
+    </g>
+</svg>
index dc31051..07a721b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png differ
index 279466d..5c6f8c0 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.649c.893 0 1.633.109 2.22.327.588.218 1.088.622 1.502 1.211.419.589.629 1.187.629 1.978 0 .813-.21 1.398-.629 1.977-.419.578-.898.974-1.437 1.187-.533.213-1.295.319-2.286.319h-5.649m4.767-2c.751 0 1.279-.049 1.584-.12.305-.076.569-.246.792-.508.229-.262.343-.473.343-.855 0-.557-.199-.868-.596-1.119-.392-.256-1.064-.398-2.016-.398h-1.873v3"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png
new file mode 100644 (file)
index 0000000..82835f6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te-invert.svg
new file mode 100644 (file)
index 0000000..740dcee
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-cyrl-te">
+        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
+    </g>
+</svg>
index fdeeb6c..63aee3e 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-te">
-        <path id="te" d="M11 18v-10h-4v-2h11v2h-4v10"/>
+        <path id="te" d="M11 18V8H7V6h11v2h-4v10"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png
new file mode 100644 (file)
index 0000000..b9154e5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg
new file mode 100644 (file)
index 0000000..98f4b55
--- /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"><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"/>
+    </g>
+</svg>
index 3084fef..cfe0009 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 5996c81..d26bdf6 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-.181.705-.447.168-.266.401-.873.698-1.821.39-1.241.789-2.033 1.197-2.374.403-.336 1.075-.504 2.014-.504l.386-.008v1.78l-.386-.008c-.399 0-.691.062-.878.187-.186.119-.337.304-.452.553-.115.249-.286.762-.512 1.537-.12.412-.25.756-.392 1.033-.137.276-.383.537-.738.78.439.157.8.466 1.084.927.288.455.603 1.103.944 1.943l1.33 3.268h-2.314l-1.17-3.081-.113-.252-.239-.561c-.248-.569-.452-.932-.612-1.089-.16-.157-.317-.236-.552-.236v5.22h-2v-5.22c-.226 0-.382.076-.546.228-.164.152-.368.518-.612 1.098l-.246.561-.113.252-1.17 3.081h-2.314l1.33-3.268c.328-.808.636-1.447.924-1.919.293-.477.663-.794 1.11-.951-.355-.244-.603-.501-.745-.772-.137-.276-.268-.623-.392-1.041-.222-.759-.39-1.266-.505-1.52-.111-.255-.261-.444-.452-.569-.186-.125-.492-.187-.917-.187l-.352.008v-1.78l.386.008c.953 0 1.631.171 2.034.512.399.347.791 1.136 1.177 2.366.301.954.534 1.564.698 1.829.168.26.377.406.705.439v-5.154"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png
new file mode 100644 (file)
index 0000000..e695e7e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f-invert.svg
new file mode 100644 (file)
index 0000000..14884f7
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-f">
+        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
+    </g>
+</svg>
index 357d2e5..89061f1 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-f">
-        <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+        <path id="f" d="M16 8V6H8v12h3v-5h4v-2h-4V8z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png
new file mode 100644 (file)
index 0000000..37fd2b3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg
new file mode 100644 (file)
index 0000000..0efd55a
--- /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"><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"/>
+    </g>
+</svg>
index e30e1fe..ceb792b 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 e032542..dd6e27a 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.259-.941.359-1.896.538-2.864.538-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.257-2.282.77-3.222.513-.939 1.265-1.66 2.255-2.161.754-.385 1.693-.578 2.816-.578 1.46 0 2.6.303 3.418.91.824.602 1.353 1.435 1.589 2.501l-2.359.435c-.166-.57-.479-1.018-.939-1.346-.455-.332-1.024-.499-1.709-.499-1.038 0-1.864.325-2.479.974-.61.649-.915 1.612-.915 2.889 0 1.377.31 2.412.931 3.103.62.686 1.433 1.029 2.439 1.029.497 0 .995-.095 1.492-.285.503-.195 1.332-.571 1.691-.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.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png
new file mode 100644 (file)
index 0000000..e699abb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man-invert.svg
new file mode 100644 (file)
index 0000000..391127f
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-geor-man">
+        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
+    </g>
+</svg>
index 814eff8..d6dcb5d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png differ
index b211bf7..deb95b7 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-geor-man">
-        <path id="geor-man" d="M13.832 14.061c0-1.715-.394-2.573-1.182-2.573-.868 0-1.302.779-1.302 2.338-.01 1.624.421 2.436 1.295 2.436.793 0 1.189-.734 1.189-2.201m2.168 0c0 2.626-1.116 3.939-3.349 3.939-2.434 0-3.651-1.386-3.651-4.159 0-2.738 1.217-4.106 3.651-4.106.841 0 1.182.63 1.182.63v-1.579c0-.789-.449-1.184-1.347-1.184-.572 0-.858.374-.858 1.123h-2.341c.005-1.817 1.064-2.725 3.176-2.725 2.368 0 3.548.946 3.538 2.839"/>
+        <path id="geor-man" d="M13.832 14.06c0-1.714-.394-2.572-1.182-2.572-.868 0-1.302.78-1.302 2.338-.01 1.624.42 2.436 1.295 2.436.793 0 1.19-.734 1.19-2.2m2.167 0C16 16.686 14.884 18 12.65 18 10.218 18 9 16.614 9 13.84c0-2.737 1.217-4.105 3.65-4.105.842 0 1.183.63 1.183.63v-1.58c0-.788-.45-1.183-1.347-1.183-.572 0-.858.374-.858 1.123h-2.34C9.29 6.908 10.35 6 12.462 6 14.83 6 16.01 6.946 16 8.84"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png
new file mode 100644 (file)
index 0000000..45a84ab
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l-invert.svg
new file mode 100644 (file)
index 0000000..2041445
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-l">
+        <path id="l" d="M8 18V6h3v10h5v2"/>
+    </g>
+</svg>
index 1679793..7695623 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-l">
-        <path id="l" d="M8 18v-12h3v10h5v2"/>
+        <path id="l" d="M8 18V6h3v10h5v2"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png
new file mode 100644 (file)
index 0000000..13b5b72
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n-invert.svg
new file mode 100644 (file)
index 0000000..667bec4
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-n">
+        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
+    </g>
+</svg>
index 73ad019..62f66a2 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-n">
-        <path id="n" d="M7 18v-12h3l4 8v-8h3v12h-3l-4-8v8h-3"/>
+        <path id="n" d="M7 18V6h3l4 8V6h3v12h-3l-4-8v8H7"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png
new file mode 100644 (file)
index 0000000..ea7e7fd
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v-invert.svg
new file mode 100644 (file)
index 0000000..cb1dd89
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="bold-v">
+        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
+    </g>
+</svg>
index 146943a..027db27 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-v">
-        <path id="v" d="M10.5 18l-4.5-12h3l3 8 3-8h3l-4.5 12"/>
+        <path id="v" d="M10.5 18L6 6h3l3 8 3-8h3l-4.5 12"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png
new file mode 100644 (file)
index 0000000..8f8feb6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr-invert.svg
new file mode 100644 (file)
index 0000000..9ff43d3
--- /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="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
+</svg>
index 7a058ed..6a9a748 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="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3h-6v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6v-13h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9c0-1.4 1.1-2.5 2.5-2.5h4.5v11z"/>
+    <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3H3v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6V7h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9C13 9.1 14.1 8 15.5 8H20v11z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png
new file mode 100644 (file)
index 0000000..573fc84
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl-invert.svg
new file mode 100644 (file)
index 0000000..9390146
--- /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="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z" id="path78"/>
+</svg>
index 6ae47ec..b192ea6 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="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2h-6v-13h6zm-5 12h5c1.7 0 2 .4 2 .4v-8.9c0-1.4-1.1-2.5-2.5-2.5h-4.5v11z" id="path78"/>
+    <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2H3V7h6zM4 19h5c1.7 0 2 .4 2 .4v-8.9C11 9.1 9.9 8 8.5 8H4v11z" id="path78"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png
new file mode 100644 (file)
index 0000000..008246c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr-invert.svg
new file mode 100644 (file)
index 0000000..bf39564
--- /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="M15 5H8c-1.1 0-2 .9-2 2v3h3v11l4-3 4 3V7c0-1.1-.9-2-2-2zM9 9H7V7c0-.6.4-1 1-1h1v3z"/>
+</svg>
index d803d6b..ba3ff91 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="M15 5h-7c-1.1 0-2 .9-2 2v3h3v11l4-3 4 3v-14c0-1.1-.9-2-2-2zm-6 4h-2v-2c0-.6.4-1 1-1h1v3z"/>
+    <path d="M15 5H8c-1.1 0-2 .9-2 2v3h3v11l4-3 4 3V7c0-1.1-.9-2-2-2zM9 9H7V7c0-.6.4-1 1-1h1v3z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png
new file mode 100644 (file)
index 0000000..deff3f6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f665223
--- /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="M8 5h7c1.1 0 2 .9 2 2v3h-3v11l-4-3-4 3V7c0-1.1.9-2 2-2zm6 4h2V7c0-.6-.4-1-1-1h-1v3z" id="path88"/>
+</svg>
index 744d0f4..ba0be74 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="M8 5h7c1.1 0 2 .9 2 2v3h-3v11l-4-3-4 3v-14c0-1.1.9-2 2-2zm6 4h2v-2c0-.6-.4-1-1-1h-1v3z" id="path88"/>
+    <path d="M8 5h7c1.1 0 2 .9 2 2v3h-3v11l-4-3-4 3V7c0-1.1.9-2 2-2zm6 4h2V7c0-.6-.4-1-1-1h-1v3z" id="path88"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png
new file mode 100644 (file)
index 0000000..4632447
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr-invert.svg
new file mode 100644 (file)
index 0000000..762e641
--- /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="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
+</svg>
index 7bd0425..e7be7e5 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="M3 6v11c0 1.7 1.3 3 3 3h15v-14h-18zm2.5 1c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5zm14.5 12h-14c-1.1 0-2-.9-2-2v-6h16v8z"/>
+    <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png
new file mode 100644 (file)
index 0000000..5a3df4b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b6d0f5c
--- /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 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z" id="path98"/>
+</svg>
index 84b18da..080e237 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="M21 6v11c0 1.7-1.3 3-3 3h-15v-14h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5 1.5-.7 1.5-1.5-.7-1.5-1.5-1.5zm-14.5 12h14c1.1 0 2-.9 2-2v-6h-16v8z" id="path98"/>
+    <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z" id="path98"/>
 </svg>
index 5668e12..70dcb87 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png differ
index 8a9d3d4..0858177 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="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+        <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"/>
     </g>
 </svg>
index 51a33ff..76b87e4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png differ
index bfc1b44..00c8051 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="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png
new file mode 100644 (file)
index 0000000..80488fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr-invert.svg
new file mode 100644 (file)
index 0000000..b9b6b3a
--- /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="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8L7 13.1z"/>
+</svg>
index a42aaa5..d90b371 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png differ
index f31ec09..44d2d1a 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="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8l-8.8 8.9z"/>
+    <path d="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8L7 13.1z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png
new file mode 100644 (file)
index 0000000..69eba72
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl-invert.svg
new file mode 100644 (file)
index 0000000..bf6087c
--- /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="M16.5 13.1L7.6 22c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+</svg>
index 02b4e38..88c7c73 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="M16.5 13.1l-8.9 8.9c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+    <path d="M16.5 13.1L7.6 22c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png
new file mode 100644 (file)
index 0000000..eea3f84
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown-invert.svg
new file mode 100644 (file)
index 0000000..dc5d7a1
--- /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="M12 16l8.9-8.9c-.8-.8-2-.8-2.8 0L12 13.2l-6.1-6c-.8-.8-2-.8-2.8 0L12 16z" id="path4"/>
+</svg>
index a04ca57..27cb080 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 16l8.9-8.9c-.8-.8-2-.8-2.8 0l-6.1 6.1-6.1-6c-.8-.8-2-.8-2.8 0l8.9 8.8z" id="path4"/>
+    <path d="M12 16l8.9-8.9c-.8-.8-2-.8-2.8 0L12 13.2l-6.1-6c-.8-.8-2-.8-2.8 0L12 16z" id="path4"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png
new file mode 100644 (file)
index 0000000..7386e14
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp-invert.svg
new file mode 100644 (file)
index 0000000..4ca2d5e
--- /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="M12 6.5l8.9 8.9c-.8.8-2 .8-2.8 0L12 9.3l-6.1 6c-.8.8-2 .8-2.8 0L12 6.5z" id="path4"/>
+</svg>
index 5591095..efd2356 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png differ
index d0e0c28..1d63093 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 6.5l8.9 8.9c-.8.8-2 .8-2.8 0l-6.1-6.1-6.1 6c-.8.8-2 .8-2.8 0l8.9-8.8z" id="path4"/>
+    <path d="M12 6.5l8.9 8.9c-.8.8-2 .8-2.8 0L12 9.3l-6.1 6c-.8.8-2 .8-2.8 0L12 6.5z" id="path4"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png
new file mode 100644 (file)
index 0000000..b6dd780
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg
new file mode 100644 (file)
index 0000000..d100b44
--- /dev/null
@@ -0,0 +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"/>
+    </g>
+</svg>
index e30bf2d..e924c44 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 824790c..3f0a3a5 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="M 7.53125,7 4,17 l 2.0625,0 0.71875,-2.40625 3.625,0 L 11.125,17 13.1875,17 9.65625,7 7.53125,7 z M 8.59375,8.53125 9.9375,13 7.25,13 8.59375,8.53125 z" />
-        <path id="lower-case" d="m 18.548697,17 -0.183254,-1.035072 -0.05451,0 c -0.349771,0.440361 -0.710892,0.746796 -1.083366,0.919307 -0.367941,0.167972 -0.849436,0.251959 -1.444489,0.251959 -0.564328,0 -0.954665,-0.20883 -1.377109,-0.626492 -0.417903,-0.417659 -0.626854,-1.012371 -0.626853,-1.784137 -1e-6,-0.80808 0.281628,-1.402791 0.844889,-1.784137 0.567801,-0.385878 1.193222,-0.607062 2.208372,-0.640111 l 1.321843,-0.04086 0,-0.333674 c 0,-0.771759 -0.395195,-1.15764 -1.185571,-1.157647 -0.608688,7e-6 -1.324118,0.183867 -2.146293,0.551584 L 14.134181,9.9184512 c 0.876685,-0.4585114 1.848761,-0.6877705 2.916233,-0.6877783 1.022038,7.8e-6 1.586855,0.2224573 2.131951,0.6673492 C 19.727448,10.342928 20,11.019356 20,11.927309 l 0,5.073215 -1.451303,0 m -0.394476,-3.527417 -0.804008,0.02724 c -0.604145,0.01816 -1.053844,0.127119 -1.349098,0.326866 -0.29526,0.199753 -0.442889,0.503919 -0.442886,0.912498 -3e-6,0.585634 0.336136,0.878451 1.008417,0.878449 0.481492,2e-6 0.865326,-0.138462 1.151503,-0.415391 0.29071,-0.276925 0.436067,-0.644648 0.436072,-1.103169 l 0,-0.626491" />
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png
new file mode 100644 (file)
index 0000000..9577504
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg
new file mode 100644 (file)
index 0000000..7e09e65
--- /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"><style>* { fill: #D11D13 }</style>
+    <g id="check">
+        <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+    </g>
+</svg>
index 085e667..f1291f9 100644 (file)
@@ -1,2 +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: #00AF89 }</style><circle cx="12" cy="12" r="6"></circle></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
+    <circle cx="12" cy="12" r="6"/>
+</svg>
index f5285c7..7cae5db 100644 (file)
@@ -1,2 +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><circle cx="12" cy="12" r="6"></circle></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <circle cx="12" cy="12" r="6"/>
+</svg>
index 436259e..18133cc 100644 (file)
@@ -1,2 +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"><circle cx="12" cy="12" r="6"></circle></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <circle cx="12" cy="12" r="6"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png
new file mode 100644 (file)
index 0000000..08a5fe1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr-invert.svg
new file mode 100644 (file)
index 0000000..bdb3823
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
+    </g>
+</svg>
index 28ba0cb..d997cf2 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>
-        <path d="M7 12h9v-1h-9v1zm0 2h9v-1h-9v1zm0 2h9v-1h-9v1zm4-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0-4h-4v1h4v-1zm5-2h2v16h-10c-1.7 0-3-1.3-3-3v-13h8v7l1.5-2 1.5 2v-7z"/>
+        <path d="M7 12h9v-1H7v1zm0 2h9v-1H7v1zm0 2h9v-1H7v1zm4-9H7v1h4V7zm0 2H7v1h4V9zm0-4H7v1h4V5zm5-2h2v16H8c-1.7 0-3-1.3-3-3V3h8v7l1.5-2 1.5 2V3z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png
new file mode 100644 (file)
index 0000000..af33ec0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl-invert.svg
new file mode 100644 (file)
index 0000000..1957477
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g128">
+        <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z" id="path130"/>
+    </g>
+</svg>
index 7625307..688bd1b 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="g128">
-        <path d="M16 12h-9v-1h9v1zm0 2h-9v-1h9v1zm0 2h-9v-1h9v1zm-4-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0-4h4v1h-4v-1zm-5-2h-2v16h10c1.7 0 3-1.3 3-3v-13h-8v7l-1.5-2-1.5 2v-7z" id="path130"/>
+        <path d="M16 12H7v-1h9v1zm0 2H7v-1h9v1zm0 2H7v-1h9v1zm-4-9h4v1h-4V7zm0 2h4v1h-4V9zm0-4h4v1h-4V5zM7 3H5v16h10c1.7 0 3-1.3 3-3V3h-8v7L8.5 8 7 10V3z" id="path130"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png
new file mode 100644 (file)
index 0000000..d8b538e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.svg
new file mode 100644 (file)
index 0000000..0738205
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="clear">
+        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
+    </g>
+</svg>
index 55a26c9..8689e77 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="clear">
-    <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-  </g>
+    <g id="clear">
+        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
+    </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png
new file mode 100644 (file)
index 0000000..2ac138b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock-invert.svg
new file mode 100644 (file)
index 0000000..9682626
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <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-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+    </g>
+</svg>
index 1cf7267..6d8f75e 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>
-        <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-8zm3 12l-4-3v-6h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+        <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-8zm3 12l-4-3V8h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
     </g>
 </svg>
index ec44c92..89c5e25 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="M18.4 8.1c.8-.8.8-2 0-2.8l-6.4 6.5-5.6-5.6-1.4 1.4 5.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"/>
+    <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"/>
 </svg>
index 4f0f64e..4dfa16a 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="M18.4 8.1c.8-.8.8-2 0-2.8l-6.4 6.5-5.6-5.6-1.4 1.4 5.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"/>
+    <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"/>
 </svg>
index b5ae392..d20fff1 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="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6 1.4 1.4-5.6 5.6 5 5c.8.8.8 2 0 2.8l-6.4-6.4-5.6 5.6-1.4-1.4 5.6-5.6-5-5.1z" id="path140"/>
+    <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"/>
 </svg>
index d9829d0..3666a34 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="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6 1.4 1.4-5.6 5.6 5 5c.8.8.8 2 0 2.8l-6.4-6.4-5.6 5.6-1.4-1.4 5.6-5.6-5-5.1z" id="path140"/>
+    <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"/>
 </svg>
index bc4ae94..a816be8 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-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <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"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index 32f140d..6e32d78 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-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+        <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"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index a9d0d33..3e7e993 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png differ
index 451e0fe..926f98d 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="collapse">
-        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
     </g>
 </svg>
index 353ac79..4dad20f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png differ
index 55aa8f8..645bfda 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="collapse">
-        <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+        <path id="arrow" d="M6.697 15.714L12 10.412l5.303 5.302 1.414-1.414L12 7.583 5.283 14.3z"/>
     </g>
 </svg>
index b6152fe..3b58d71 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="comment">
-        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+        <path id="speech-bubble" d="M15 6H9C7.343 6 6 7.344 6 9v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3V9c0-1.656-1.343-3-3-3z"/>
     </g>
 </svg>
index 0ae7e63..c52ce1c 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="comment">
-        <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+        <path id="speech-bubble" d="M15 6H9C7.343 6 6 7.344 6 9v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3V9c0-1.656-1.343-3-3-3z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png
new file mode 100644 (file)
index 0000000..add46d4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr-invert.svg
new file mode 100644 (file)
index 0000000..8bac842
--- /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="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+</svg>
index eb4c360..2571d4d 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="M16 5h-12v12c0 1.6 1.3 3 3 3h12v-12c0-1.7-1.4-3-3-3zm-8.5 12c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+    <path d="M16 5H4v12c0 1.6 1.3 3 3 3h12V8c0-1.7-1.4-3-3-3zM7.5 17c-.8 0-1.5-.7-1.5-1.5S6.7 14 7.5 14s1.5.7 1.5 1.5S8.3 17 7.5 17zm0-6C6.7 11 6 10.3 6 9.5S6.7 8 7.5 8 9 8.7 9 9.5 8.3 11 7.5 11zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5S14.7 8 15.5 8s1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png
new file mode 100644 (file)
index 0000000..2ecf913
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl-invert.svg
new file mode 100644 (file)
index 0000000..d6a74cf
--- /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="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z" id="path150"/>
+</svg>
index e929fdb..1b4a6ca 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="M7 5h12v12c0 1.6-1.3 3-3 3h-12v-12c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5z" id="path150"/>
+    <path d="M7 5h12v12c0 1.6-1.3 3-3 3H4V8c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5S16.3 8 15.5 8 14 8.7 14 9.5s.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5S8.3 14 7.5 14 6 14.7 6 15.5 6.7 17 7.5 17zm0-6c.8 0 1.5-.7 1.5-1.5S8.3 8 7.5 8 6 8.7 6 9.5 6.7 11 7.5 11z" id="path150"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png
new file mode 100644 (file)
index 0000000..b87c977
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle-invert.svg
new file mode 100644 (file)
index 0000000..d18ef8b
--- /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="M12 18l8-10H4z"/>
+</svg>
index 7bc1c22..e1fb989 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 18l8-10h-16z"/>
+    <path d="M12 18l8-10H4z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png
new file mode 100644 (file)
index 0000000..1e2f6c9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr-invert.svg
new file mode 100644 (file)
index 0000000..e23e773
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+    </g>
+</svg>
index d0d5bb5..ba37848 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>
-        <path d="M16 11h-3v-7c-1.7 0-3 1.3-3 3v4h-3l4.5 5 4.5-5zm1 2v5h-10c-.6 0-1-.4-1-1v-4h-2v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+        <path d="M16 11h-3V4c-1.7 0-3 1.3-3 3v4H7l4.5 5 4.5-5zm1 2v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png
new file mode 100644 (file)
index 0000000..167fd8d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl-invert.svg
new file mode 100644 (file)
index 0000000..6409631
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g160">
+        <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z" id="path162"/>
+    </g>
+</svg>
index 9abb2ae..544c3c8 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="g160">
-        <path d="M7 11h3v-7c1.7 0 3 1.3 3 3v4h3l-4.5 5-4.5-5zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3h-12v-7h2z" id="path162"/>
+        <path d="M7 11h3V4c1.7 0 3 1.3 3 3v4h3l-4.5 5L7 11zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z" id="path162"/>
     </g>
 </svg>
index add25a4..fbae9d2 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="Layer_3">
-        <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+        <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
     </g>
 </svg>
index bceb7c1..d27c3a5 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="Layer_3">
-        <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+        <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
     </g>
 </svg>
index 3972e07..4cd6cda 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="Layer_3">
-        <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+        <path d="M17 2L5 14l-1 5 5-1L21 6c0-2-2-4-4-4zM7.2 15.5c-.3-.3-.7-.6-1-.8C8.5 12.4 17.5 3.3 17.5 3.3c.4.1.7.3 1 .7L7.2 15.5z"/>
     </g>
 </svg>
index 2b311a9..c66c5fd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png differ
index 339c830..42c9f2c 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="Layer_3">
-        <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+        <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
     </g>
 </svg>
index 8d36fa8..ef6c949 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png differ
index d526fb4..b4db76b 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="Layer_3">
-        <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+        <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
     </g>
 </svg>
index 4750795..4755937 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png differ
index 978b2fd..932997b 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="Layer_3">
-        <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+        <path d="M8 2l12 12 1 5-5-1L4 6c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8C16.5 12.4 7.5 3.3 7.5 3.3c-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
     </g>
 </svg>
index 3952442..1977477 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png differ
index cc8b61f..5d720f4 100644 (file)
@@ -2,10 +2,10 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="g196">
         <g id="g198">
-            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
         </g>
     </g>
     <g id="g204">
-        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
     </g>
 </svg>
index fe8631e..e3dc95a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png differ
index f346874..05778cd 100644 (file)
@@ -2,10 +2,10 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g196">
         <g id="g198">
-            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+            <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3L8 3l1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
         </g>
     </g>
     <g id="g204">
-        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+        <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8H9.1L5 15l-1 5 5-1 7.8-7.8-1.6-.1zM20.6 6c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
     </g>
 </svg>
index 53469ce..9070cab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png differ
index 82018f0..8323c2f 100644 (file)
@@ -2,10 +2,10 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="g196">
         <g id="g198">
-            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
         </g>
     </g>
     <g id="g204">
-        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z" id="path206"/>
     </g>
 </svg>
index ca5596e..6dd8b46 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png differ
index 5b59d45..ac03c05 100644 (file)
@@ -2,10 +2,10 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g196">
         <g id="g198">
-            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+            <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3L17 3l-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
         </g>
     </g>
     <g id="g204">
-        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+        <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8L20 15l1 5-5-1-7.8-7.8 1.6-.1zM4.4 6c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3L8 11 4 7c0-.3.1-.7.2-1h.2z" id="path206"/>
     </g>
 </svg>
index a3cadb4..21f80da 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="expand">
-        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
     </g>
 </svg>
index 7666b41..84b9e0a 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="expand">
-        <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+        <path id="arrow" d="M17.303 8.283L12 13.586 6.697 8.283 5.283 9.697 12 16.414l6.717-6.717z"/>
     </g>
 </svg>
index c1bad9e..99ded02 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>
     <g id="external">
-        <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
-        <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+        <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"/>
     </g>
 </svg>
index 827bc1b..e836361 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">
     <g id="external">
-        <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
-        <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+        <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"/>
     </g>
 </svg>
index f448c87..fa3ffe0 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>
     <g id="external">
-        <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
-        <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+        <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"/>
     </g>
 </svg>
index c375ca0..60e6a0c 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">
     <g id="external">
-        <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
-        <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png
new file mode 100644 (file)
index 0000000..84a838b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye-invert.svg
new file mode 100644 (file)
index 0000000..352e7b9
--- /dev/null
@@ -0,0 +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="g4">
+        <path d="M12 8C7 8 1 14 1 14s6 6 11 6l11-6s-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path6"/>
+        <circle cx="12" cy="14" r="2" id="circle8"/>
+    </g>
+</svg>
index 26accd8..f851591 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png differ
index fa3bc3c..09d783b 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="g4">
-        <path d="M12 8c-5 0-11 6-11 6s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path6"/>
+        <path d="M12 8C7 8 1 14 1 14s6 6 11 6l11-6s-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path6"/>
         <circle cx="12" cy="14" r="2" id="circle8"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png
new file mode 100644 (file)
index 0000000..7b4bb15
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed-invert.svg
new file mode 100644 (file)
index 0000000..d8f7dff
--- /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="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+</svg>
index 301bf8c..f350b57 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png differ
index fa1167d..d17f2c8 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.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6h-1.5c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+    <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6H2.2c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png
new file mode 100644 (file)
index 0000000..77778d8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg
new file mode 100644 (file)
index 0000000..4951ac6
--- /dev/null
@@ -0,0 +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="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 4336892..4625881 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 f8578cf..e97230c 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="m 13.65625,11 c -1.921,0 -3.5,1.54775 -3.5,3.46875 0,1.92 1.579,3.5 3.5,3.5 0.749,0 1.432,-0.25225 2,-0.65625 l 0.09375,0.15625 2.375,2.375 c 0.19,0.189 0.53425,0.15325 0.78125,-0.09375 0.247,-0.247 0.314,-0.59125 0.125,-0.78125 l -2.375,-2.375 L 16.46875,16.5 C 16.87175,15.934 17.125,15.21775 17.125,14.46875 17.124,12.54875 15.57525,11 13.65625,11 z m 0,1.65625 c 1.011306,0 1.8125,0.801194 1.8125,1.8125 0,1.011306 -0.801194,1.84375 -1.8125,1.84375 -1.011306,0 -1.84375,-0.832444 -1.84375,-1.84375 0,-1.011306 0.832444,-1.8125 1.84375,-1.8125 z" />
-        <path id="text" d="M 6,5 6,7 16,7 16,5 6,5 z m 0,3 0,2 11,0 0,-2 -11,0 z m 0,3 0,2 3.53125,0 c 0.2825289,-0.797203 0.786096,-1.486208 1.4375,-2 L 6,11 z m 0,3 0,2 3.53125,0 C 9.3537004,15.520243 9.25,15.010236 9.25,14.46875 9.25,14.309811 9.2962033,14.154621 9.3125,14 L 6,14 z" />
+        <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="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>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png
new file mode 100644 (file)
index 0000000..d67357b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg
new file mode 100644 (file)
index 0000000..51b3d40
--- /dev/null
@@ -0,0 +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="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 f492c79..ed8eea0 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 2a1e9c6..ca03754 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="m 11.343828,11.000025 c 1.921,0 3.5,1.54775 3.5,3.46875 0,1.92 -1.579,3.5 -3.5,3.5 -0.749,0 -1.432,-0.25225 -2,-0.65625 l -0.09375,0.15625 -2.375,2.375 c -0.19,0.189 -0.53425,0.15325 -0.78125,-0.09375 -0.247,-0.247 -0.314,-0.59125 -0.125,-0.78125 l 2.375,-2.375 0.1875,-0.09375 c -0.403,-0.566 -0.65625,-1.28225 -0.65625,-2.03125 10e-4,-1.92 1.54975,-3.46875 3.46875,-3.46875 z m 0,1.65625 c -1.011306,0 -1.8125,0.801194 -1.8125,1.8125 0,1.011306 0.801194,1.84375 1.8125,1.84375 1.011306,0 1.84375,-0.832444 1.84375,-1.84375 0,-1.011306 -0.832444,-1.8125 -1.84375,-1.8125 z" />
-        <path id="text" d="M 19,5 19,7 9,7 9,5 z m 0,3 0,2 -11,0 0,-2 z m 0,3 0,2 -3.53125,0 c -0.282529,-0.797203 -0.786096,-1.486208 -1.4375,-2 z m 0,3 0,2 -3.53125,0 C 15.6463,15.520243 15.75,15.010236 15.75,14.46875 15.75,14.309811 15.703797,14.154621 15.6875,14 z" />
+        <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="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 37ddb24..964d551 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="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z" id="path216"/>
 </svg>
index 6e81d2b..bcd728e 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="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+    <path d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z" id="path216"/>
 </svg>
index 4875a44..4996fe0 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 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+    <path d="M11 6.5V5c1.4-1.5 5.2-1.2 6 0V4h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V13c-1.2 1.5-4.3 1.2-5 0V6c.7.7 2.7.9 4 .5z" id="path216"/>
 </svg>
index 4b743aa..3a93b6f 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 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+    <path d="M11 6.5V5c1.4-1.5 5.2-1.2 6 0V4h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V13c-1.2 1.5-4.3 1.2-5 0V6c.7.7 2.7.9 4 .5z" id="path216"/>
 </svg>
index fd7f2ae..9ef0552 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png differ
index dcea1eb..5b1c8cd 100644 (file)
@@ -2,14 +2,14 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="g2990">
         <g id="Layer_1">
-            <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+            <path id="path227" d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
         </g>
         <g id="Layer_2">
             <g id="g230">
-                <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+                <path id="path232" d="M17.997 1.99l.99.99-15.98 15.98-.99-.99z"/>
             </g>
             <g id="g234">
-                <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+                <path id="path236" d="M17 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
             </g>
         </g>
     </g>
index fff89fe..6f84122 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png differ
index 49cdb7a..87245de 100644 (file)
@@ -2,14 +2,14 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g2990">
         <g id="Layer_1">
-            <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+            <path id="path227" d="M14 6.5V5c-1.4-1.5-5.2-1.2-6 0V4H7v15h1v-7c.8-.8 3.4-.9 5-.5V13c1.2 1.5 4.3 1.2 5 0V6c-.7.7-2.7.9-4 .5z"/>
         </g>
         <g id="Layer_2">
             <g id="g230">
-                <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+                <path id="path232" d="M17.997 1.99l.99.99-15.98 15.98-.99-.99z"/>
             </g>
             <g id="g234">
-                <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+                <path id="path236" d="M17 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
             </g>
         </g>
     </g>
index d6ffcea..5216469 100644 (file)
@@ -2,14 +2,14 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="g2990">
         <g id="Layer_1">
-            <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+            <path id="path227" d="M11 6.5V5c1.4-1.5 5.2-1.2 6 0V4h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V13c-1.2 1.5-4.3 1.2-5 0V6c.7.7 2.7.9 4 .5z"/>
         </g>
         <g id="Layer_2">
             <g id="g230">
-                <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+                <path id="path232" d="M7.003 1.99l-.99.99 15.98 15.98.99-.99z"/>
             </g>
             <g id="g234">
-                <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+                <path id="path236" d="M8 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
             </g>
         </g>
     </g>
index e470de4..06da23a 100644 (file)
@@ -2,14 +2,14 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g2990">
         <g id="Layer_1">
-            <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+            <path id="path227" d="M11 6.5V5c1.4-1.5 5.2-1.2 6 0V4h1v15h-1v-7c-.8-.8-3.4-.9-5-.5V13c-1.2 1.5-4.3 1.2-5 0V6c.7.7 2.7.9 4 .5z"/>
         </g>
         <g id="Layer_2">
             <g id="g230">
-                <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+                <path id="path232" d="M7.003 1.99l-.99.99 15.98 15.98.99-.99z"/>
             </g>
             <g id="g234">
-                <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+                <path id="path236" d="M8 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
             </g>
         </g>
     </g>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png
new file mode 100644 (file)
index 0000000..5c9d194
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr-invert.svg
new file mode 100644 (file)
index 0000000..7dfc979
--- /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="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
+</svg>
index 63e0b1a..7e60fb4 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="M2 5v15h20v-15h-20zm15 11h-9c-.6 0-1-.4-1-1v-6h3l2 1h5v6z"/>
+    <path d="M2 5v15h20V5H2zm15 11H8c-.6 0-1-.4-1-1V9h3l2 1h5v6z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png
new file mode 100644 (file)
index 0000000..9fd77b2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl-invert.svg
new file mode 100644 (file)
index 0000000..a384bd1
--- /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="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z" id="path246"/>
+</svg>
index 25bec74..29f5c6b 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="M22 5v15h-20v-15h20zm-15 11h9c.6 0 1-.4 1-1v-6h-3l-2 1h-5v6z" id="path246"/>
+    <path d="M22 5v15H2V5h20zM7 16h9c.6 0 1-.4 1-1V9h-3l-2 1H7v6z" id="path246"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png
new file mode 100644 (file)
index 0000000..056e781
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr-invert.svg
new file mode 100644 (file)
index 0000000..3ea25f4
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+    </g>
+</svg>
index 191584e..8d5bf44 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>
-        <path d="M11 13l-6-7h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+        <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png
new file mode 100644 (file)
index 0000000..7d4f60a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl-invert.svg
new file mode 100644 (file)
index 0000000..1fa603f
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g256">
+        <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z" id="path258"/>
+    </g>
+</svg>
index 45f2f64..ec54b1b 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="g256">
-        <path d="M14 13l6-7h-15l6 7v7c1.7 0 3-1.3 3-3v-4z" id="path258"/>
+        <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z" id="path258"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png
new file mode 100644 (file)
index 0000000..b631396
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart-invert.svg
new file mode 100644 (file)
index 0000000..fc78226
--- /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="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+</svg>
index 185c1a2..ac9968d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png differ
index 3670661..ccd9e96 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="help">
-        <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 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.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"/>
         <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+            <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"/>
         </g>
     </g>
index b80df00..4428ef3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png differ
index bb2545c..e5eb877 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="help">
-        <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 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.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"/>
         <g id="question-mark">
-            <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+            <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"/>
         </g>
     </g>
index dfb9c03..f425c35 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png differ
index 203f8f9..0b02d6b 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="help">
-        <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 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.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"/>
         <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+            <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"/>
         </g>
     </g>
index 62f3d21..e6ab21b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png differ
index 99c7f84..bf4f537 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="help">
-        <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 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.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"/>
         <g id="question-mark">
-            <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+            <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"/>
         </g>
     </g>
index 24d3e17..a38092d 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 fb61382..2a1db00 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="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+        <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"/>
     </g>
 </svg>
index f5a7d36..e9bbf95 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 35f15af..019e558 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="history">
-        <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png
new file mode 100644 (file)
index 0000000..08bf391
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr-invert.svg
new file mode 100644 (file)
index 0000000..81558e0
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M20 18l-4-4-2 2-4-4-2 1-4 5h16zm2-13v15H2V5h20z"/>
+    </g>
+</svg>
index bebe0a9..72ebf10 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>
-        <path d="M20 18l-4-4-2 2-4-4-2 1-4 5h16zm2-13v15h-20v-15h20z"/>
+        <path d="M20 18l-4-4-2 2-4-4-2 1-4 5h16zm2-13v15H2V5h20z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png
new file mode 100644 (file)
index 0000000..b5b7fb5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl-invert.svg
new file mode 100644 (file)
index 0000000..c00d0c4
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g278">
+        <path d="M4 18l4-4 2 2 4-4 2 1 4 5H4zM2 5v15h20V5H2z" id="path280"/>
+    </g>
+</svg>
index 88e0e3c..ca53d9b 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="g278">
-        <path d="M4 18l4-4 2 2 4-4 2 1 4 5h-16zm-2-13v15h20v-15h-20z" id="path280"/>
+        <path d="M4 18l4-4 2 2 4-4 2 1 4 5H4zM2 5v15h20V5H2z" id="path280"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png
new file mode 100644 (file)
index 0000000..e56944a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr-invert.svg
new file mode 100644 (file)
index 0000000..da2ddaa
--- /dev/null
@@ -0,0 +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>
+    <path d="M17 12V8h-4V5H0v15h20v-8h-3zM2 18l4-5 2-1 4 4 2-2 4 4H2z"/>
+    <g>
+        <path d="M24 5h-4V1h-2v4h-4v2h4v4h2V7h4z"/>
+    </g>
+</svg>
index 300e4b1..b775ddf 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">
-    <path d="M17 12v-4h-4v-3h-13v15h20v-8h-3zm-15 6l4-5 2-1 4 4 2-2 4 4h-16z"/>
+    <path d="M17 12V8h-4V5H0v15h20v-8h-3zM2 18l4-5 2-1 4 4 2-2 4 4H2z"/>
     <g>
-        <path d="M24 5h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+        <path d="M24 5h-4V1h-2v4h-4v2h4v4h2V7h4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png
new file mode 100644 (file)
index 0000000..eba653f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl-invert.svg
new file mode 100644 (file)
index 0000000..7b7beaa
--- /dev/null
@@ -0,0 +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>
+    <path d="M7 12V8h4V5h13v15H4v-8h3zm15 6l-4-5-2-1-4 4-2-2-4 4h16z" id="path290"/>
+    <g id="g292">
+        <path d="M0 5h4V1h2v4h4v2H6v4H4V7H0z" id="path294"/>
+    </g>
+</svg>
index 70e3248..a7128be 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">
-    <path d="M7 12v-4h4v-3h13v15h-20v-8h3zm15 6l-4-5-2-1-4 4-2-2-4 4h16z" id="path290"/>
+    <path d="M7 12V8h4V5h13v15H4v-8h3zm15 6l-4-5-2-1-4 4-2-2-4 4h16z" id="path290"/>
     <g id="g292">
-        <path d="M0 5h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path294"/>
+        <path d="M0 5h4V1h2v4h4v2H6v4H4V7H0z" id="path294"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png
new file mode 100644 (file)
index 0000000..50e7889
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg
new file mode 100644 (file)
index 0000000..bfdcb1c
--- /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="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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png
new file mode 100644 (file)
index 0000000..1b1029b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.svg
new file mode 100644 (file)
index 0000000..5136ef5
--- /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.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"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png
new file mode 100644 (file)
index 0000000..f1c6cd6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr-invert.svg
new file mode 100644 (file)
index 0000000..93a43dc
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
+    </g>
+</svg>
index ada3395..238558a 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>
-        <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-12v8l5-4-5-4z"/>
+        <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 8v8l5-4-5-4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png
new file mode 100644 (file)
index 0000000..fc48622
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl-invert.svg
new file mode 100644 (file)
index 0000000..c7c7dad
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g314">
+        <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z" id="path316"/>
+    </g>
+</svg>
index 9afedbb..0334b06 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="g314">
-        <path d="M14 8h-9v2h9v-2zm0 3h-9v2h9v-2zm0 3h-6v2h6v-2zm-11-8h18v-2h-18v2zm0 14h18v-2h-18v2zm18-12v8l-5-4 5-4z" id="path316"/>
+        <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zM21 8v8l-5-4 5-4z" id="path316"/>
     </g>
 </svg>
index 83b00a2..a89528f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png differ
index 04cd889..a5894a1 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="info">
-        <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+        <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>
 </svg>
index eb0fb46..f021189 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png differ
index 4bdefd4..6cff2ff 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="info">
-        <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+        <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>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.png
new file mode 100644 (file)
index 0000000..dd08bc2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert-invert.svg
new file mode 100644 (file)
index 0000000..54b8ffd
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="insert">
+        <path d="M13 5h-2v6H5v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+    </g>
+</svg>
index 0833f84..d1e9ba3 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="insert">
-        <path d="M13 5h-2v6h-6v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+        <path d="M13 5h-2v6H5v2h6v6h2v-6h6v-2h-6z" id="plus"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png
new file mode 100644 (file)
index 0000000..7627397
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a-invert.svg
new file mode 100644 (file)
index 0000000..0fc2eb0
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="italic-a">
+        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
+    </g>
+</svg>
index a0e66bf..a3a11c6 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-a">
-        <path id="a" d="M14.667 6h-1.372l-7 12h1.705l2.333-4h4l.667 4h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
+        <path id="a" d="M14.667 6h-1.372l-7 12H8l2.333-4h4L15 18h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png
new file mode 100644 (file)
index 0000000..28f2b17
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg
new file mode 100644 (file)
index 0000000..6e9a2ec
--- /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"><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"/>
+    </g>
+</svg>
index 7cf774f..f94928b 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 d4bff1b..1c4aeb7 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.299-.774.712-.875 1.125-.064.263-.035.572.063.781.189.405.539.574.844.813l.094-.125.531.625c.14.164.343.513.469.938.137.463.08.725 0 1.125h-3.438c-.338 0-.592.007-.766-.02-.339-.053-.256-.208-.234-.34.332-.127.564-.173.938-.141.29-.494.593-.885.906-1.313-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.357.026-.768.239-1.031.719-.246.448-.434.839-.656 1.281l.75-.469c.23-.142.484-.227.719-.219.157.005.275.054.406.094-.231.205-.509.402-.719.563-.301.26-.702.688-.906 1-.403.615-.694 1.084-.875 1.781-.179.689.004 1.339.469 1.75.426.376.846.519 1.281.563.65.065 1.205.093 2-.188.657-.231 1.021-.553 1.5-.969-.883.11-1.817.089-2.531.031-.871-.07-1.268-.384-1.469-.594-.271-.283-.307-.64-.156-1.219.036-.141.097-.323.25-.531.168-.228.364-.435.594-.656.451-.436 1.011-.737 1.461-.938-.045.206-.107.443-.055.688.049.229.248.379.438.469.259.122.506.155.688.156 1.421.011 2.862 0 4.281 0 .247 0 .452-.163.594-.375.139-.208.249-.481.344-.844.131-.499.094-1.062-.094-1.625-.182-.543-.418-1.009-.719-1.406-.335-.443-.674-.829-1-1.219 1.257-.815 2.716-1.239 3.969-1.688.121-.452.224-.926.313-1.313zm-9.469 8.438c-.262.394-.584.691-.875 1 .375.286.748.556 1.094.813.335-.303.626-.674.875-.969-.39-.268-.771-.588-1.094-.844z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png
new file mode 100644 (file)
index 0000000..864e6e2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg
new file mode 100644 (file)
index 0000000..31b9be1
--- /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"><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"/>
+    </g>
+</svg>
index e8f2b62..a963197 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 bfbc9bf..7b2670f 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.729l-.93 2.19h-4.663c-.479 0-.857.122-1.135.367l-.061.11c-.184 2.016-.502 3.558-.955 4.627-.272.641-.633 1.252-1.082 1.833-.177.226-.219.186-.126-.119l.142-.504.17-.669.234-.87.002-.009.202-1.045.258-1.411.353-1.906c.191-.312.424-.638.699-.98.276-.342.589-.706.94-1.09.129-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.011-.241-.054-.394-.043-.153-.12-.327-.231-.522-.22-.428-.438-.641-.654-.641-.294 0-.915.269-1.864.806-.359.208-.376.125-.051-.247 1.558-1.71 2.708-2.566 3.45-2.566.383 0 .671.131.863.394.135.195.25.599.344 1.21l.203 1.2c.106.586.242.895.409.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.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png
new file mode 100644 (file)
index 0000000..ce7b445
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg
new file mode 100644 (file)
index 0000000..4f3621e
--- /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"><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"/>
+    </g>
+</svg>
index 4d4178a..e4f1bda 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 63de0f6..67283c8 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.586 6h1.724c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.324 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.038-.356-.057-.576-.057-.583 0-1.137.095-1.663.284-.524.19-1 .46-1.425.812-.42.35-.777.78-1.072 1.283-.294.504-.504 1.074-.63 1.71-.242 1.255-.152 2.21.268 2.868.426.652 1.19.978 2.294.978.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.026-1.214 1.425-.488.394-1.053.7-1.694.922-.642.215-1.343.323-2.105.323-.767 0-1.434-.113-2-.34-.568-.225-1.025-.553-1.372-.984-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.567.697-1.066 1.144-1.496.445-.436.944-.794 1.496-1.072.55-.284 1.13-.475 1.733-.575l-.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-.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png
new file mode 100644 (file)
index 0000000..a458be9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg
new file mode 100644 (file)
index 0000000..8c51971
--- /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"><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"/>
+    </g>
+</svg>
index fc6133c..1ba8613 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 b468dea..0ef7345 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.481.214c-.468 1.34-1.15 2.354-2.046 3.04-.896.686-1.901 1.029-3.015 1.029-1.359 0-2.438-.43-3.237-1.29-.794-.86-1.191-2.092-1.191-3.697 0-2.09.606-3.818 1.817-5.185 1.079-1.219 2.42-1.828 4.023-1.828 1.186 0 2.145.33 2.878.989.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.839-.453-1.464-.916-1.876-.458-.417-1.051-.625-1.779-.625-1.369 0-2.476.631-3.321 1.892-.733 1.087-1.099 2.377-1.099 3.871 0 1.193.282 2.103.847 2.731.565.628 1.3.942 2.206.942.774 0 1.473-.261 2.099-.784.626-.522 1.081-1.261 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.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png
new file mode 100644 (file)
index 0000000..093545c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg
new file mode 100644 (file)
index 0000000..63c2c9d
--- /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"><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"/>
+    </g>
+</svg>
index 1711ef9..39b09a2 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 92a834d..6ac99ab 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 18l2.462-12h3.557c.853 0 1.505.063 1.955.188.644.169 1.194.472 1.65.909.456.431.799.971 1.03 1.621.231.649.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.791-.66 1.49-1.127 2.095-.461.6-.947 1.072-1.456 1.416-.504.338-1.102.589-1.794.753-.526.126-1.172.188-1.939.188h-4.249m1.859-1.359h1.867c.842 0 1.591-.079 2.245-.237.408-.098.756-.243 1.046-.434.381-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.247-.688.37-1.468.37-2.341 0-.971-.166-1.716-.499-2.235-.333-.524-.756-.87-1.271-1.04-.381-.126-.974-.188-1.778-.188h-1.85l-1.907 9.274"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png
new file mode 100644 (file)
index 0000000..cf39073
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.svg
new file mode 100644 (file)
index 0000000..9d11112
--- /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"><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"/>
+    </g>
+</svg>
index f5b44d9..882a535 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png differ
index 66a5ef5..72df8bb 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 18l2.474-12h8.526l-.282 1.367h-6.947l-.75 3.633h6.09l-.282 1.367h-6.09l-.877 4.274h7.438l-.282 1.359h-9.018"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png
new file mode 100644 (file)
index 0000000..61ae2cc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg
new file mode 100644 (file)
index 0000000..256a8eb
--- /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"><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"/>
+    </g>
+</svg>
index e728cd7..3ab33f2 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 3398904..a1a93dc 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.663c-.441 2.225-1.834 3.337-4.178 3.337-1.919 0-2.879-.787-2.879-2.36 0-.298.036-.624.108-.977.083-.431.245-.836.488-1.217l1.241.605-.207.613c-.055.259-.083.497-.083.712 0 .972.521 1.458 1.564 1.458 1.307 0 2.101-.723 2.383-2.17l.058-.331c.044-.221.066-.425.066-.613 0-.928-.546-1.391-1.638-1.391h-1.117l.248-1.259h1.117c1.202-.005 1.908-.552 2.118-1.64.039-.182.058-.356.058-.522 0-1.143-.899-1.714-2.697-1.714l.232-1.193c2.708 0 4.062.875 4.062 2.625 0 .248-.028.516-.083.803-.204 1.093-1.051 1.825-2.54 2.195l-.033.166c1.23.199 1.845.823 1.845 1.872 0 .21-.025.433-.074.671l-.058.331"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png
new file mode 100644 (file)
index 0000000..ad101c7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i-invert.svg
new file mode 100644 (file)
index 0000000..ecde4b7
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="italic-i">
+        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
+    </g>
+</svg>
index 3c6b3c1..28aab44 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png differ
index 93bec5a..e670e9b 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-i">
-        <path id="i" d="M12.5 17.999l.249-.994h-1.5l2.509-10.037h1.5l.242-.967h-5l-.242.967h1.5l-2.509 10.037h-1.5l-.249.994z"/>
+        <path id="i" d="M12.5 18l.25-.995h-1.5l2.508-10.037h1.5L15.5 6h-5l-.242.968h1.5l-2.51 10.037h-1.5L7.5 18z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png
new file mode 100644 (file)
index 0000000..260a03c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k-invert.svg
new file mode 100644 (file)
index 0000000..730fb8a
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="italic-k">
+        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
+    </g>
+</svg>
index d483154..38bcd73 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-k">
-        <path id="k" d="M12.018 10.652l4.982-4.652h-2l-5.309 5.234 1.309-5.234h-1.5l-3 12h1.5l1.173-4.693 1.54-1.438c.287 4.131 3.287 6.131 3.287 6.131h2s-4-2-3.982-7.348z"/>
+        <path id="k" d="M12.018 10.652L17 6h-2l-5.31 5.234L11 6H9.5l-3 12H8l1.173-4.693 1.54-1.438C11 16 14 18 14 18h2s-4-2-3.982-7.348z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png
new file mode 100644 (file)
index 0000000..a9a5e49
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg
new file mode 100644 (file)
index 0000000..d5557d1
--- /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"><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"/>
+    </g>
+</svg>
index 4fc10c5..aafa618 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 4f6364c..56e457b 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.589l-.302 1.526c-.522-.279-1.041-.488-1.557-.628-.511-.145-1.007-.217-1.487-.217-.935 0-1.679.204-2.231.612-.553.408-.829.95-.829 1.627 0 .372.101.658.302.86.207.196.733.408 1.58.635l.937.232c1.059.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.379 2.851-.914.733-2.12 1.1-3.618 1.1-.615 0-1.232-.062-1.852-.186-.62-.119-1.242-.302-1.867-.55l.318-1.611c.573.356 1.147.625 1.72.806.578.181 1.154.271 1.728.271.976 0 1.759-.217 2.347-.651.589-.434.883-.999.883-1.697 0-.465-.119-.816-.356-1.054-.232-.243-.736-.462-1.511-.658l-.937-.24c-1.069-.279-1.8-.599-2.192-.961-.387-.367-.581-.878-.581-1.534 0-1.152.442-2.094 1.325-2.828.888-.739 2.043-1.108 3.463-1.108.553 0 1.1.049 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.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png
new file mode 100644 (file)
index 0000000..4f5e01e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr-invert.svg
new file mode 100644 (file)
index 0000000..cbcfff0
--- /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="M16 9V8h-6v1h6zm-2 2v-1h-4v1h4zM6 5h1v16H6V5zm2 0h10v13c0 1.7-1.3 3-3 3H8V5z"/>
+</svg>
index c7e1603..c9fa553 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="M16 9v-1h-6v1h6zm-2 2v-1h-4v1h4zm-8-6h1v16h-1v-16zm2 0h10v13c0 1.7-1.3 3-3 3h-7v-16z"/>
+    <path d="M16 9V8h-6v1h6zm-2 2v-1h-4v1h4zM6 5h1v16H6V5zm2 0h10v13c0 1.7-1.3 3-3 3H8V5z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png
new file mode 100644 (file)
index 0000000..519bf10
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl-invert.svg
new file mode 100644 (file)
index 0000000..6b0afc0
--- /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="M8 9V8h6v1H8zm2 2v-1h4v1h-4zm8-6h-1v16h1V5zm-2 0H6v13c0 1.7 1.3 3 3 3h7V5z" id="path326"/>
+</svg>
index 2d16be3..393f19d 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="M8 9v-1h6v1h-6zm2 2v-1h4v1h-4zm8-6h-1v16h1v-16zm-2 0h-10v13c0 1.7 1.3 3 3 3h7v-16z" id="path326"/>
+    <path d="M8 9V8h6v1H8zm2 2v-1h4v1h-4zm8-6h-1v16h1V5zm-2 0H6v13c0 1.7 1.3 3 3 3h7V5z" id="path326"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png
new file mode 100644 (file)
index 0000000..1e9d92d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr-invert.svg
new file mode 100644 (file)
index 0000000..131bbdb
--- /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="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
+</svg>
index 8dfb89a..fc0d3c3 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="M14.5 4c-3 0-5.5 2.5-5.5 5.5 0 1 .3 1.9.7 2.8l-5.7 5.7v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5s-2.5-5.5-5.5-5.5zm1.5 5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+    <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png
new file mode 100644 (file)
index 0000000..9d46092
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl-invert.svg
new file mode 100644 (file)
index 0000000..fbd3329
--- /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="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z" id="path336"/>
+</svg>
index 0639287..8975b66 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="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8l5.7 5.7v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5s2.5-5.5 5.5-5.5zm-1.5 5c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5z" id="path336"/>
+    <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z" id="path336"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png
new file mode 100644 (file)
index 0000000..1dcd4c3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr-invert.svg
new file mode 100644 (file)
index 0000000..84479e8
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
+    </g>
+</svg>
index ea5055c..2bb795e 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>
-        <path d="M3 7v9c0 1.7 1.3 3 3 3h15v-12h-18zm8 2h2v2h-2v-2zm0 3h2v2h-2v-2zm-3-3h2v2h-2v-2zm0 3h2v2h-2v-2zm-1 5h-1c-.6 0-1-.4-1-1v-1h2v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2zm9 6h-8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2z"/>
+        <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png
new file mode 100644 (file)
index 0000000..61c95be
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl-invert.svg
new file mode 100644 (file)
index 0000000..2700729
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g346">
+        <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z" id="path348"/>
+    </g>
+</svg>
index b35d108..b7b47cc 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="g346">
-        <path d="M21 7v9c0 1.7-1.3 3-3 3h-15v-12h18zm-8 2h-2v2h2v-2zm0 3h-2v2h2v-2zm3-3h-2v2h2v-2zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2zm-9 6h8v-2h-8v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2zm-3 6h2v-2h-2v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2z" id="path348"/>
+        <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z" id="path348"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png
new file mode 100644 (file)
index 0000000..fc0917e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg
new file mode 100644 (file)
index 0000000..96a39e2
--- /dev/null
@@ -0,0 +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="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 c864384..ebd11a2 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 081e49a..549c303 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.271-.59 1.041.407-.18.363c.661.271 1.101.468 1.312.589.331.211.618.514.86.905.211.393.316.846.316 1.358 0 .786-.302 1.479-.905 2.083-.604.634-1.66 1.057-3.169 1.268-.121-.361-.258-.679-.408-.95.965-.151 1.645-.333 2.037-.545.454-.21.785-.481.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.269-.331-.331-.8-.589-1.402-.77-.333.634-.649 1.117-.951 1.449-.242.332-.694.906-1.358 1.721.09.393.181.709.272.951l-1.042.362-.091-.498c-.423.361-.801.617-1.133.77-.361.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.301-.362-.68-.362-1.132 0-.604.136-1.147.407-1.63.241-.453.603-.89 1.086-1.313.272-.241.725-.528 1.359-.86 0-.271.03-.799.09-1.585-.514.03-.921.045-1.222.045-.393 0-.711-.015-.951-.045l-.046-1.041c.725.091 1.494.135 2.31.135 0-.149.075-.738.227-1.766l1.177.183c-.151.542-.256 1.041-.316 1.493.242-.029.543-.075.906-.136.362-.061.573-.091.634-.091s.648-.15 1.766-.453l.046 1.041c-.967.243-2.145.439-3.532.591-.062.663-.092 1.086-.092 1.266.663-.151 1.284-.225 1.857-.225zm-2.672 3.893c-.061-.481-.136-1.252-.227-2.31-.573.424-1.041.86-1.403 1.313-.303.423-.452.875-.452 1.358 0 .241.044.438.136.588.09.092.195.137.316.137.363.001.907-.361 1.63-1.086zm.771-2.763c0 .483.029 1.088.09 1.811.604-.905 1.057-1.599 1.359-2.082-.574.06-1.058.151-1.449.271z"/>
-        <path id="english" d="M9.497 15.981h1.851l-3.084-8.949h-1.85l-3.081 8.949h1.85l.557-1.981h3.209l.548 1.981zm-3.489-3.377l1.331-3.782 1.344 3.782h-2.675z"/>
+        <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="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/layout-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.png
new file mode 100644 (file)
index 0000000..edee6ac
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr-invert.svg
new file mode 100644 (file)
index 0000000..a848318
--- /dev/null
@@ -0,0 +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="layout-ltr">
+        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
+    </g>
+</svg>
index 47e71b3..c3be66c 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="layout-ltr">
-        <path id="text" d="M5 19v-14h6v8h8v6h-14z"/>
-        <path id="float" d="M13 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+        <path id="text" d="M5 19V5h6v8h8v6H5z"/>
+        <path id="float" d="M13 5v6h6V5h-6zm5 5h-4V6h4v4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png
new file mode 100644 (file)
index 0000000..83e0145
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b8c4586
--- /dev/null
@@ -0,0 +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="layout-rtl">
+        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
+    </g>
+</svg>
index fe9ee61..ce7feb8 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="layout-rtl">
-        <path id="text" d="M5 19v-6h8v-8h6v14h-14z"/>
-        <path id="float" d="M5 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+        <path id="text" d="M5 19v-6h8V5h6v14H5z"/>
+        <path id="float" d="M5 5v6h6V5H5zm1 1h4v4H6V6z"/>
     </g>
 </svg>
index 1b1e2ed..ed0006c 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 c98df5c..7b545ca 100644 (file)
@@ -1,13 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<g>\r
-       <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7\r
-               c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6\r
-               c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9\r
-               c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3\r
-               c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9\r
-               c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>\r
-</g>\r
-</svg>\r
+<?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"/>
+    </g>
+</svg>
index 1fe66f1..3db2467 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 841ba7d..0d3c186 100644 (file)
@@ -1,13 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
-<g>\r
-       <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7\r
-               c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6\r
-               c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9\r
-               c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3\r
-               c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9\r
-               c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>\r
-</g>\r
-</svg>\r
+<?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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png
new file mode 100644 (file)
index 0000000..f304cef
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr-invert.svg
new file mode 100644 (file)
index 0000000..686a8e7
--- /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 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+</svg>
index 09a4ff5..5f0b15f 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="M21 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+    <path d="M21 7H9V5h12v2zM7 6c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 12c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7H9v-2h12v2zM7 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png
new file mode 100644 (file)
index 0000000..41cdbfb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl-invert.svg
new file mode 100644 (file)
index 0000000..be5bd9f
--- /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="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z" id="path370"/>
+</svg>
index 67b9dfe..f29a05e 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="M3 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-14 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-14 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z" id="path370"/>
+    <path d="M3 7h12V5H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 13h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zM3 19h12v-2H3v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z" id="path370"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png
new file mode 100644 (file)
index 0000000..d1caa84
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr-invert.svg
new file mode 100644 (file)
index 0000000..58ffe88
--- /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 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
+</svg>
index 87e8854..8e849a7 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="M21 7h-13v-2h13v2zm0 6h-13v-2h13v2zm0 6h-13v-2h13v2zm-17-15h2v4h-1v-3h-1zm-1 6v-1h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
+    <path d="M21 7H8V5h13v2zm0 6H8v-2h13v2zm0 6H8v-2h13v2zM4 4h2v4H5V5H4zm-1 6V9h3v3H4v1h2v1H3v-3h2v-1zm3 10H3v-1h2v-1H4v-1h1v-1H3v-1h3z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png
new file mode 100644 (file)
index 0000000..ded0765
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl-invert.svg
new file mode 100644 (file)
index 0000000..d319205
--- /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="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z" id="path380"/>
+</svg>
index 831a5fb..331dc8d 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="M3 7h13v-2h-13zm0 6h13v-2h-13zm0 6h13v-2h-13zm15-15h2v4h-1v-3h-1zm0 6v-1h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z" id="path380"/>
+    <path d="M3 7h13V5H3zm0 6h13v-2H3zm0 6h13v-2H3zM18 4h2v4h-1V5h-1zm0 6V9h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z" id="path380"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png
new file mode 100644 (file)
index 0000000..52467f2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr-invert.svg
new file mode 100644 (file)
index 0000000..dcbf49e
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
+    </g>
+</svg>
index 4af765c..61c369f 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>
-        <path d="M15 14v3l5-4.5-5-4.5v3h-7c0 1.7 1.3 3 3 3h4zm-1-9h-10v15h10v-2h-8v-11h8v-2z"/>
+        <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png
new file mode 100644 (file)
index 0000000..734b5f2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl-invert.svg
new file mode 100644 (file)
index 0000000..e953bab
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g402">
+        <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z" id="path404"/>
+    </g>
+</svg>
index f72c04a..5cb4687 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="g402">
-        <path d="M9 14v3l-5-4.5 5-4.5v3h7c0 1.7-1.3 3-3 3h-4zm1-9h10v15h-10v-2h8v-11h-8v-2z" id="path404"/>
+        <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z" id="path404"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png
new file mode 100644 (file)
index 0000000..7dcc6fa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc-invert.svg
new file mode 100644 (file)
index 0000000..a59d442
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png
new file mode 100644 (file)
index 0000000..7be1390
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons-invert.svg
new file mode 100644 (file)
index 0000000..40a9ab6
--- /dev/null
@@ -0,0 +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>
+        <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4C5 10.6 4 12.7 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+        <circle cx="12" cy="15" r="3"/>
+    </g>
+</svg>
index 079e177..c195d4c 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>
-        <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1v-.8l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1-1.5-1v.8h-1c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4c-1.5 1.4-2.5 3.5-2.5 5.8 0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+        <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1V14l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1L7 14v.8H6c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4C5 10.6 4 12.7 4 15c0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
         <circle cx="12" cy="15" r="3"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png
new file mode 100644 (file)
index 0000000..ea3aec3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia-invert.svg
new file mode 100644 (file)
index 0000000..a21fb46
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+    </g>
+</svg>
index 8629f29..05bf48c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png differ
index 6672d9d..587780c 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>
-        <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4l-2.6-5.5-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4l-4.3-10.1c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4-1.7-3.6c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+        <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4L12.2 13l-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4L4.1 8.4c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4L10 8.4c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png
new file mode 100644 (file)
index 0000000..054cfd2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr-invert.svg
new file mode 100644 (file)
index 0000000..b988187
--- /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="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
+</svg>
index 0fc4773..0e5a52e 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="M15 6l-6-2-6 2v15l6-2 6 2 6-2v-15l-6 2zm-6.3 12.1l-4.7 1.5v-12.9l5-1.7v12.9l-.3.2zm11.3.2l-5 1.7v-12.9l.3-.1 4.7-1.6v12.9z"/>
+    <path d="M15 6L9 4 3 6v15l6-2 6 2 6-2V4l-6 2zM8.7 18.1L4 19.6V6.7L9 5v12.9l-.3.2zm11.3.2L15 20V7.1l.3-.1L20 5.4v12.9z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png
new file mode 100644 (file)
index 0000000..afd1dc7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl-invert.svg
new file mode 100644 (file)
index 0000000..442891a
--- /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="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z" id="path424"/>
+</svg>
index b33f1e3..36a5b24 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="M9 6l6-2 6 2v15l-6-2-6 2-6-2v-15l6 2zm6.3 12.1l4.7 1.5v-12.9l-5-1.7v12.9l.3.2zm-11.3.2l5 1.7v-12.9l-.3-.1-4.7-1.6v12.9z" id="path424"/>
+    <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2V4l6 2zm6.3 12.1l4.7 1.5V6.7L15 5v12.9l.3.2zM4 18.3L9 20V7.1L8.7 7 4 5.4v12.9z" id="path424"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png
new file mode 100644 (file)
index 0000000..3b041dd
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin-invert.svg
new file mode 100644 (file)
index 0000000..42d8e7c
--- /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="M19 12c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 23l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 4c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path4"/>
+</svg>
index f422c84..5310f82 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 12c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7l5.9 7.3 5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 4c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path4"/>
+    <path d="M19 12c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7L12 23l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 4c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path4"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png
new file mode 100644 (file)
index 0000000..ab176c9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr-invert.svg
new file mode 100644 (file)
index 0000000..ded3fd1
--- /dev/null
@@ -0,0 +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="g434">
+        <g id="g436">
+            <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4z" id="path438"/>
+        </g>
+    </g>
+    <path d="M18 11h-1V7.1l-.1-.1H13V5.1c-.3-.1-.7-.1-1-.1-3.9 0-7 3.1-7 7 0 1.4.4 2.6 1.1 3.7L12 23l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7 0-.3 0-.7-.1-1H18zm-6 5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path440"/>
+</svg>
index 9a54eb6..a1b024e 100644 (file)
@@ -2,8 +2,8 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g434">
         <g id="g436">
-            <path d="M24 4h-4v-4h-2v4h-4v2h4v4h2v-4h4z" id="path438"/>
+            <path d="M24 4h-4V0h-2v4h-4v2h4v4h2V6h4z" id="path438"/>
         </g>
     </g>
-    <path d="M18 11h-1v-3.9l-.1-.1h-3.9v-1.9c-.3-.1-.7-.1-1-.1-3.9 0-7 3.1-7 7 0 1.4.4 2.6 1.1 3.7l5.9 7.3 5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7 0-.3 0-.7-.1-1h-.9zm-6 5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path440"/>
+    <path d="M18 11h-1V7.1l-.1-.1H13V5.1c-.3-.1-.7-.1-1-.1-3.9 0-7 3.1-7 7 0 1.4.4 2.6 1.1 3.7L12 23l5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7 0-.3 0-.7-.1-1H18zm-6 5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path440"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png
new file mode 100644 (file)
index 0000000..9cb0343
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl-invert.svg
new file mode 100644 (file)
index 0000000..537d914
--- /dev/null
@@ -0,0 +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="g434">
+        <g id="g436">
+            <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0z" id="path438"/>
+        </g>
+    </g>
+    <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 5c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4z" id="path440"/>
+</svg>
index d3e152e..eb92036 100644 (file)
@@ -2,8 +2,8 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g434">
         <g id="g436">
-            <path d="M0 4h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path438"/>
+            <path d="M0 4h4V0h2v4h4v2H6v4H4V6H0z" id="path438"/>
         </g>
     </g>
-    <path d="M6 11h1v-3.9l.1-.1h3.9v-1.9c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7l-5.9 7.3-5.9-7.3c-.7-1.1-1.1-2.3-1.1-3.7 0-.3 0-.7.1-1h.9zm6 5c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4z" id="path440"/>
+    <path d="M6 11h1V7.1l.1-.1H11V5.1c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7L12 23l-5.9-7.3C5.4 14.6 5 13.4 5 12c0-.3 0-.7.1-1H6zm6 5c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4z" id="path440"/>
 </svg>
index 61b8877..59885e9 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<g id="menu">\r
-       <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z\r
-                M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1\r
-               c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>\r
-</g>\r
-</svg>\r
+<?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 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"/>
+    </g>
+</svg>
index 89fd978..9ef19fe 100644 (file)
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
-<g id="menu">\r
-       <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z\r
-                M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1\r
-               c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png
new file mode 100644 (file)
index 0000000..7e1c9fb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr-invert.svg
new file mode 100644 (file)
index 0000000..c212285
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+    </g>
+</svg>
index 3f308ff..18387e1 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>
-        <path d="M21 9c0-1.7-1.3-3-3-3h-15v3l9 4 9-4zm-18 2v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+        <path d="M21 9c0-1.7-1.3-3-3-3H3v3l9 4 9-4zM3 11v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png
new file mode 100644 (file)
index 0000000..d965979
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl-invert.svg
new file mode 100644 (file)
index 0000000..684b304
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g450">
+        <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z" id="path452"/>
+    </g>
+</svg>
index fa61aa1..ff61048 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="g450">
-        <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3h-15v-9l9 4 9-4z" id="path452"/>
+        <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3H3v-9l9 4 9-4z" id="path452"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png
new file mode 100644 (file)
index 0000000..e72516a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-invert.svg
new file mode 100644 (file)
index 0000000..5c7a766
--- /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="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
+</svg>
index 10f0c4e..fbebf0c 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-ltr">
-        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
     </g>
 </svg>
index 51e6611..670d84d 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-ltr">
-        <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+        <path id="arrow" d="M8.935 7.18l5.302 5.303-5.302 5.303L10.35 19.2l6.715-6.717-6.716-6.716z"/>
     </g>
 </svg>
index 002ec0f..f8eadf9 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.414-6.716 6.716 6.716 6.717z"/>
+        <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"/>
     </g>
 </svg>
index bcee09d..00583b4 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.414-6.716 6.716 6.716 6.717z"/>
+        <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"/>
     </g>
 </svg>
index 9063bd4..b04ecdd 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 11l-4-3v2h-3v-3h2l-3-4-3 4h2v3h-3v-2l-4 3 4 3v-2h3v3h-2l3 4 3-4h-2v-3h3v2z"/>
+    <path d="M20 11l-4-3v2h-3V7h2l-3-4-3 4h2v3H8V8l-4 3 4 3v-2h3v3H9l3 4 3-4h-2v-3h3v2z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png
new file mode 100644 (file)
index 0000000..c1a9fab
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr-invert.svg
new file mode 100644 (file)
index 0000000..9febfff
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g4">
+        <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z" id="path6"/>
+    </g>
+</svg>
index b8ea833..02e24f6 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="g4">
-        <path d="M12 5l2.5 2.5-3.5 3.5c-1.2 1.2-1.2 2.8 0 4l5.5-5.5 2.5 2.5v-7h-7zm5 12h-9c-.6 0-1-.4-1-1v-9h3l-2-2h-3v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z" id="path6"/>
+        <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z" id="path6"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png
new file mode 100644 (file)
index 0000000..8dd0188
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl-invert.svg
new file mode 100644 (file)
index 0000000..e72ecf5
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g462">
+        <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z" id="path464"/>
+    </g>
+</svg>
index 58a9eeb..16ad8b4 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="g462">
-        <path d="M12 5l-2.5 2.5 3.5 3.5c1.2 1.2 1.2 2.8 0 4l-5.5-5.5-2.5 2.5v-7h7zm-5 12h9c.6 0 1-.4 1-1v-9h-3l2-2h3v11c0 1.7-1.3 3-3 3h-11v-3l2-2v3z" id="path464"/>
+        <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z" id="path464"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png
new file mode 100644 (file)
index 0000000..fb09227
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr-invert.svg
new file mode 100644 (file)
index 0000000..e0c1784
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="line_return">
+        <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
+    </g>
+</svg>
index d4b638a..9e7c67f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png differ
index dad5f51..1d654eb 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="line_return">
-    <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3h-5.1v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
-  </g>
+    <g id="line_return">
+        <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3H11v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
+    </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png
new file mode 100644 (file)
index 0000000..11b6b25
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl-invert.svg
new file mode 100644 (file)
index 0000000..da6982b
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="line_return">
+        <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
+    </g>
+</svg>
index fd758cc..63e5aa1 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="line_return">
-    <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
-  </g>
+    <g id="line_return">
+        <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
+    </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png
new file mode 100644 (file)
index 0000000..69ceeaf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr-invert.svg
new file mode 100644 (file)
index 0000000..555eb59
--- /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="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
+</svg>
index 46471a3..4ff5856 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="M6 7v12c-.6 0-1-.4-1-1v-9h-1v9c0 1.1.9 2 2 2h15v-13h-15zm9 11h-7v-1h7v1zm0-2h-7v-1h7v1zm0-2h-7v-1h7v1zm4 4h-3v-5h3v5zm0-7h-11v-2h11v2z"/>
+    <path d="M6 7v12c-.6 0-1-.4-1-1V9H4v9c0 1.1.9 2 2 2h15V7H6zm9 11H8v-1h7v1zm0-2H8v-1h7v1zm0-2H8v-1h7v1zm4 4h-3v-5h3v5zm0-7H8V9h11v2z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png
new file mode 100644 (file)
index 0000000..c34589a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl-invert.svg
new file mode 100644 (file)
index 0000000..71c59ef
--- /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="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z" id="path474"/>
+</svg>
index 7564dff..2c4a321 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 7v12c.6 0 1-.4 1-1v-9h1v9c0 1.1-.9 2-2 2h-15v-13h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5h-3v5zm0-7h11v-2h-11v2z" id="path474"/>
+    <path d="M19 7v12c.6 0 1-.4 1-1V9h1v9c0 1.1-.9 2-2 2H4V7h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5H6v5zm0-7h11V9H6v2z" id="path474"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png
new file mode 100644 (file)
index 0000000..dcd35ce
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr-invert.svg
new file mode 100644 (file)
index 0000000..770932b
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M16 14l2 2V5h-4v2h2zm0 2L9 9 7 7 6 6 5 5 2 2 1 3l2 2H2v14h4v-2H4V7h1l2 2v10h4v-2H9v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9V5H7l2 2zm8-2v2h2v10h-2l2 2h2V5z"/>
+    </g>
+</svg>
index 601428e..e0e4fc0 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>
-        <path d="M16 14l2 2v-11h-4v2h2zm0 2l-7-7-2-2-1-1-1-1-3-3-1 1 2 2h-1v14h4v-2h-2v-10h1l2 2v10h4v-2h-2v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9v-2h-4l2 2zm8-2v2h2v10h-2l2 2h2v-14z"/>
+        <path d="M16 14l2 2V5h-4v2h2zm0 2L9 9 7 7 6 6 5 5 2 2 1 3l2 2H2v14h4v-2H4V7h1l2 2v10h4v-2H9v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9V5H7l2 2zm8-2v2h2v10h-2l2 2h2V5z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png
new file mode 100644 (file)
index 0000000..eda918c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl-invert.svg
new file mode 100644 (file)
index 0000000..2ecb331
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g484">
+        <path d="M8 14l-2 2V5h4v2H8zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2V7h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2H7l-4 4-1-1 4-4zm5-9V5h4l-2 2zM5 5v2H3v10h2l-2 2H1V5z" id="path486"/>
+    </g>
+</svg>
index 31785a3..a7be5ab 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="g484">
-        <path d="M8 14l-2 2v-11h4v2h-2zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2v-10h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2h-3l-4 4-1-1 4-4zm5-9v-2h4l-2 2zm-8-2v2h-2v10h2l-2 2h-2v-14z" id="path486"/>
+        <path d="M8 14l-2 2V5h4v2H8zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2V7h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2H7l-4 4-1-1 4-4zm5-9V5h4l-2 2zM5 5v2H3v10h2l-2 2H1V5z" id="path486"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png
new file mode 100644 (file)
index 0000000..5db6cf8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5385f32
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>* { fill: #FFFFFF }</style>
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png
new file mode 100644 (file)
index 0000000..6292977
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-progressive.svg
new file mode 100644 (file)
index 0000000..10390cd
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>* { fill: #347BFF }</style>
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png
new file mode 100644 (file)
index 0000000..eff32eb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg
new file mode 100644 (file)
index 0000000..5d4b3ac
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png
new file mode 100644 (file)
index 0000000..dd93100
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg
new file mode 100644 (file)
index 0000000..451f247
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>* { fill: #FFFFFF }</style>
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.607-.405-.945-.405-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png
new file mode 100644 (file)
index 0000000..1afd904
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-progressive.svg
new file mode 100644 (file)
index 0000000..b9494a0
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>* { fill: #347BFF }</style>
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.607-.405-.945-.405-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png
new file mode 100644 (file)
index 0000000..9a22767
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg
new file mode 100644 (file)
index 0000000..9e5b7f6
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.607-.405-.945-.405-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png
new file mode 100644 (file)
index 0000000..c552e53
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr-invert.svg
new file mode 100644 (file)
index 0000000..499f8ac
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
+    </g>
+</svg>
index 4264ff0..d718154 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>
-        <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-8l5 4v-8l-5 4z"/>
+        <path d="M10 8h9v2h-9V8zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8H3V4h18v2zm0 14H3v-2h18v2zM3 12l5 4V8l-5 4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png
new file mode 100644 (file)
index 0000000..309681e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl-invert.svg
new file mode 100644 (file)
index 0000000..597d1b7
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g496">
+        <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z" id="path498"/>
+    </g>
+</svg>
index 2479343..b1a437f 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="g496">
-        <path d="M14 8h-9v2h9v-2zm0 3h-9v2h9v-2zm0 3h-6v2h6v-2zm-11-8h18v-2h-18v2zm0 14h18v-2h-18v2zm18-8l-5 4v-8l5 4z" id="path498"/>
+        <path d="M14 8H5v2h9V8zm0 3H5v2h9v-2zm0 3H8v2h6v-2zM3 6h18V4H3v2zm0 14h18v-2H3v2zm18-8l-5 4V8l5 4z" id="path498"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png
new file mode 100644 (file)
index 0000000..148a87e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr-invert.svg
new file mode 100644 (file)
index 0000000..62d78e1
--- /dev/null
@@ -0,0 +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="outline-ltr">
+        <path id="text" d="M5 13h14v6H5v-6z"/>
+        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
+    </g>
+</svg>
index 9c0ea59..44c1591 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="outline-ltr">
-        <path id="text" d="M5 13h14v6h-14v-6z"/>
-        <path id="float" d="M5 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+        <path id="text" d="M5 13h14v6H5v-6z"/>
+        <path id="float" d="M5 5v6h6V5H5zm5 5H6V6h4v4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png
new file mode 100644 (file)
index 0000000..f30534f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b992baf
--- /dev/null
@@ -0,0 +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="outline-rtl">
+        <path id="text" d="M19 19H5v-6h14v6z"/>
+        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
+    </g>
+</svg>
index 2a3428e..c5b19c8 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="outline-rtl">
-        <path id="text" d="M19 19h-14v-6h14v6z"/>
-        <path id="float" d="M13 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+        <path id="text" d="M19 19H5v-6h14v6z"/>
+        <path id="float" d="M13 5v6h6V5h-6zm1 1h4v4h-4V6z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png
new file mode 100644 (file)
index 0000000..2c23c3c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr-invert.svg
new file mode 100644 (file)
index 0000000..8647752
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M2 3h18v2H4v12H2V3zm13 13l-4-4-4 5h13l-3-3-2 2zM5 6h17v13H5V6z"/>
+    </g>
+</svg>
index 92fc07e..17eee17 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>
-        <path d="M2 3h18v2h-16v12h-2v-14zm13 13l-4-4-4 5h13l-3-3-2 2zm-10-10h17v13h-17v-13z"/>
+        <path d="M2 3h18v2H4v12H2V3zm13 13l-4-4-4 5h13l-3-3-2 2zM5 6h17v13H5V6z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png
new file mode 100644 (file)
index 0000000..ea51cad
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl-invert.svg
new file mode 100644 (file)
index 0000000..283bd5d
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g508">
+        <path d="M22 3H4v2h16v12h2V3zM9 16l4-4 4 5H4l3-3 2 2zM19 6H2v13h17V6z" id="path510"/>
+    </g>
+</svg>
index d989d3d..24a4e12 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="g508">
-        <path d="M22 3h-18v2h16v12h2v-14zm-13 13l4-4 4 5h-13l3-3 2 2zm10-10h-17v13h17v-13z" id="path510"/>
+        <path d="M22 3H4v2h16v12h2V3zM9 16l4-4 4 5H4l3-3 2 2zM19 6H2v13h17V6z" id="path510"/>
     </g>
 </svg>
index 55e0b7f..be2c66d 100644 (file)
@@ -1,8 +1,8 @@
 <?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="picture">
-        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
-        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
-        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+        <path id="frame" d="M18 4H6c-2-.007-3 .993-3 2.993L3.014 16C3 18 4 18.988 6 19h12c2-.012 2.994-1 3-3.006v-9c-.006-2-1-3-3-2.994zm1 13H5V6h14v11z"/>
+        <path id="mountains" d="M6 13.5L9.5 10l2.328 2.312-1.312 1.094.875 1.032L15.5 11l2.5 2v3H6z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172L15.5 9l2.5 2V7H6z"/>
     </g>
 </svg>
index 7400bca..24d7315 100644 (file)
@@ -1,8 +1,8 @@
 <?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="picture">
-        <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
-        <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
-        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+        <path id="frame" d="M18 4H6c-2-.007-3 .993-3 2.993L3.014 16C3 18 4 18.988 6 19h12c2-.012 2.994-1 3-3.006v-9c-.006-2-1-3-3-2.994zm1 13H5V6h14v11z"/>
+        <path id="mountains" d="M6 13.5L9.5 10l2.328 2.312-1.312 1.094.875 1.032L15.5 11l2.5 2v3H6z"/>
+        <path id="sky" d="M6 12l3.516-4.156 3.046 3.172L15.5 9l2.5 2V7H6z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png
new file mode 100644 (file)
index 0000000..8a86884
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr-invert.svg
new file mode 100644 (file)
index 0000000..374312e
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <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-8zm-2 12V9l6 4-6 4z"/>
+    </g>
+</svg>
index 5ce9563..669e49d 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>
-        <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-8zm-2 12v-8l6 4-6 4z"/>
+        <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-8zm-2 12V9l6 4-6 4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png
new file mode 100644 (file)
index 0000000..eb878da
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl-invert.svg
new file mode 100644 (file)
index 0000000..6fc4664
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g520">
+        <path d="M12 5c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V9l-6 4 6 4z" id="path522"/>
+    </g>
+</svg>
index 591a5d3..456fb4c 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="g520">
-        <path d="M12 5c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12v-8l-6 4 6 4z" id="path522"/>
+        <path d="M12 5c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12V9l-6 4 6 4z" id="path522"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png
new file mode 100644 (file)
index 0000000..786beb1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr-invert.svg
new file mode 100644 (file)
index 0000000..08c2c36
--- /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="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
+</svg>
index baae35e..7081606 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="M18 8h-1v-4h-10v4h-4v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zm-10-3h8v3h-8v-3zm8 14h-8v-6h8v6z"/>
+    <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png
new file mode 100644 (file)
index 0000000..bd37410
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl-invert.svg
new file mode 100644 (file)
index 0000000..19d6b2e
--- /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="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z" id="path532"/>
+</svg>
index 8294afd..79fd4e1 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="M6 8h1v-4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3h-10v-3h-4v-6c0-1.7 1.3-3 3-3zm10-3h-8v3h8v-3zm-8 14h8v-6h-8v6z" id="path532"/>
+    <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z" id="path532"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png
new file mode 100644 (file)
index 0000000..4ad9160
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr-invert.svg
new file mode 100644 (file)
index 0000000..4e53969
--- /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="M18 9.9c-.7 0-1.4.3-1.8.9V6h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2H4.1v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1V18H9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
+</svg>
index f6a9c86..47dad2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png differ
index 97b77bb..0ea25d7 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="M18 9.9c-.7 0-1.4.3-1.8.9v-4.8h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2h-4.4v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1v3.6h4.9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
+    <path d="M18 9.9c-.7 0-1.4.3-1.8.9V6h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2H4.1v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1V18H9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png
new file mode 100644 (file)
index 0000000..faff0ae
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl-invert.svg
new file mode 100644 (file)
index 0000000..715a526
--- /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="M6.3 9.9c.7 0 1.4.3 1.8.9V6h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1V18h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8H8.1v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
+</svg>
index 03050e1..51c40db 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png differ
index 0ad5f37..e606425 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="M6.3 9.9c.7 0 1.4.3 1.8.9v-4.8h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1v3.6h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8h-4.5v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
+    <path d="M6.3 9.9c.7 0 1.4.3 1.8.9V6h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1V18h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8H8.1v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png
new file mode 100644 (file)
index 0000000..dbde6ed
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg
new file mode 100644 (file)
index 0000000..e514672
--- /dev/null
@@ -0,0 +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"/>
+    </g>
+</svg>
index ffe3601..5f14322 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 b3b923e..c2925ca 100644 (file)
@@ -1,11 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
-<g>\r
-       <path d="M-468.9,498.1c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6c-0.7,0.4-1.2,0.9-1.7,1.4\r
-               c-0.5,0.5-1.9,2.6-1.9,5.8v3.1h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4C-470,498.7-469.5,498.3-468.9,498.1z\r
-                M-480.1,498c-0.5,0.5-1.9,2.9-1.9,6v2.9h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4c0.5-0.5,1-0.9,1.6-1.2\r
-               c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6C-479,497-479.6,497.5-480.1,498z"/>\r
-</g>\r
-</svg>\r
+<?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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png
new file mode 100644 (file)
index 0000000..0b7d107
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg
new file mode 100644 (file)
index 0000000..be46adf
--- /dev/null
@@ -0,0 +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-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"/>
+    </g>
+</svg>
index a2acf5e..e5039fc 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 b40a8ac..dd7bfb1 100644 (file)
@@ -1,11 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">\r
-<g>\r
-       <path d="M-479.5,499.3c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8\r
-               c-0.5-0.5-1-1-1.7-1.4c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5C-480.5,498.3-480,498.7-479.5,499.3z\r
-                M-471.7,496.6c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5c0.6,0.2,1.2,0.6,1.6,1.2\r
-               c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7V504c0-3.1-1.5-5.4-1.9-6C-470.4,497.5-471,497-471.7,496.6z"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 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"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png
new file mode 100644 (file)
index 0000000..1f7862e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr-invert.svg
new file mode 100644 (file)
index 0000000..b08305e
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g4">
+        <path d="M3.5 8.6C2.9 9.3 1 12 1 16v4h6c1.1 0 2-.9 2-2v-6H5s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1V6c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zM19 5V1h-2v4h-4v2h4v4h2V7h4V5zm-4 7s.1-.9.8-1.8l.2-.2V8h-1.9l-.6.6C12.9 9.3 11 12 11 16v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
+    </g>
+</svg>
index b04ec74..7fd4754 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png differ
index 24fca8f..bacec22 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="g4">
-        <path d="M3.5 8.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zm15.5-3.6v-4h-2v4h-4v2h4v4h2v-4h4v-2zm-4 7s.1-.9.8-1.8l.2-.2v-2h-1.9l-.6.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
+        <path d="M3.5 8.6C2.9 9.3 1 12 1 16v4h6c1.1 0 2-.9 2-2v-6H5s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1V6c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zM19 5V1h-2v4h-4v2h4v4h2V7h4V5zm-4 7s.1-.9.8-1.8l.2-.2V8h-1.9l-.6.6C12.9 9.3 11 12 11 16v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png
new file mode 100644 (file)
index 0000000..481db46
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl-invert.svg
new file mode 100644 (file)
index 0000000..a66bf47
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g4">
+        <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1V6c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zM5 5V1h2v4h4v2H7v4H5V7H1V5zm4 7s-.1-.9-.8-1.8L8 10V8h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4H7c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
+    </g>
+</svg>
index 9e91202..e305696 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png differ
index 736f2a6..9aed41d 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="g4">
-        <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zm-15.5-3.6v-4h2v4h4v2h-4v4h-2v-4h-4v-2zm4 7s-.1-.9-.8-1.8l-.2-.2v-2h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
+        <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1V6c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zM5 5V1h2v4h4v2H7v4H5V7H1V5zm4 7s-.1-.9-.8-1.8L8 10V8h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4H7c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.png
new file mode 100644 (file)
index 0000000..066e17f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr-invert.svg
new file mode 100644 (file)
index 0000000..0a4e04e
--- /dev/null
@@ -0,0 +1,8 @@
+<?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="create_redirect">
+        <g>
+            <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4H4.4v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6H6.4V16h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1V3.5c.1-.5-.1-.9-.3-1.1zM12.5 4h3v4.5h-3V4zM6.4 4h4v1.6h-4V4zm0 3h4v1.5h-4V7zm0 3h9v1.5h-9V10zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+        </g>
+    </g>
+</svg>
index 3bca20f..18ceb35 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png differ
index 884d40d..be25d43 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="create_redirect">
         <g>
-            <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4h-12.1v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6h-6.2v-1.4h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1v-10.5c.1-.5-.1-.9-.3-1.1zm-5.2 1.6h3v4.5h-3v-4.5zm-6.1 0h4v1.6h-4v-1.6zm0 3h4v1.5h-4v-1.5zm0 3h9v1.5h-9v-1.5zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+            <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4H4.4v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6H6.4V16h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1V3.5c.1-.5-.1-.9-.3-1.1zM12.5 4h3v4.5h-3V4zM6.4 4h4v1.6h-4V4zm0 3h4v1.5h-4V7zm0 3h9v1.5h-9V10zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
         </g>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.png
new file mode 100644 (file)
index 0000000..cdcd158
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl-invert.svg
new file mode 100644 (file)
index 0000000..431c5b8
--- /dev/null
@@ -0,0 +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="create_redirect">
+        <g id="g3264">
+            <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7H7.8c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2V16h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1V3.5c-.1-.5.1-.9.3-1.1zM11.5 4h-3v4.5h3V4zm6.1 0h-4v1.6h4V4zm0 3h-4v1.5h4V7zm0 3h-9v1.5h9V10z" id="path3266"/>
+            <path d="M4.9 13.1L0 16.9l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
+        </g>
+    </g>
+</svg>
index a07e836..a41d178 100644 (file)
@@ -2,8 +2,8 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="create_redirect">
         <g id="g3264">
-            <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7h-10.2c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2v-1.4h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1v-10.5c-.1-.5.1-.9.3-1.1zm5.2 1.6h-3v4.5h3v-4.5zm6.1 0h-4v1.6h4v-1.6zm0 3h-4v1.5h4v-1.5zm0 3h-9v1.5h9v-1.5z" id="path3266"/>
-            <path d="M4.9 13.1l-4.9 3.8 4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
+            <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7H7.8c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2V16h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1V3.5c-.1-.5.1-.9.3-1.1zM11.5 4h-3v4.5h3V4zm6.1 0h-4v1.6h4V4zm0 3h-4v1.5h4V7zm0 3h-9v1.5h9V10z" id="path3266"/>
+            <path d="M4.9 13.1L0 16.9l4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
         </g>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png
new file mode 100644 (file)
index 0000000..215cea5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg
new file mode 100644 (file)
index 0000000..59e863b
--- /dev/null
@@ -0,0 +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="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"/>
+    </g>
+</svg>
index 4643928..68bb9d7 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 7b67261..e9594a1 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="m 3,12.044797 c -5e-7,-0.989171 0.150394,-1.914889 0.451184,-2.7771612 C 3.7558785,8.4053812 4.1933899,7.6495032 4.7637193,7 L 6.2286026,7 C 5.6778034,7.7204251 5.261777,8.511764 4.9805221,9.3740188 4.6992623,10.236291 4.5586337,11.122815 4.5586357,12.033598 c -2e-6,0.914522 0.1425798,1.799179 0.427746,2.653974 C 5.2754491,15.538635 5.6856161,16.309444 6.2168835,17 L 4.7637193,17 C 4.1894835,16.365435 3.7519721,15.624488 3.451184,14.777158 3.150394,13.929828 3,13.019042 3,12.044797" />
-        <path id="dot" d="m 10,16 c 0,0.552285 -0.4477153,1 -1,1 -0.5522847,0 -1,-0.447715 -1,-1 0,-0.552285 0.4477153,-1 1,-1 0.5522847,0 1,0.447715 1,1 z" />
-        <path id="star" d="m 14.250652,7.0127142 -0.240235,2.15625 2.185547,-0.609375 0.193359,1.4765618 -1.992187,0.140625 1.306641,1.740234 -1.330079,0.708985 -0.914062,-1.833985 -0.802734,1.822266 -1.382813,-0.697266 1.294922,-1.740234 -1.980469,-0.152343 0.228516,-1.4648438 2.138672,0.609375 -0.240235,-2.15625 1.535157,0" />
-        <path id="right-bracket" d="m 21,12.044797 c -3e-6,0.981711 -0.152351,1.896229 -0.457043,2.743558 C 20.241767,15.635686 19.806209,16.3729 19.235883,17 l -1.453164,0 c 0.527356,-0.686824 0.93557,-1.455766 1.224642,-2.306829 0.289069,-0.854795 0.433604,-1.741318 0.433606,-2.659573 -2e-6,-0.910783 -0.140631,-1.797307 -0.421886,-2.6595792 C 18.737821,8.511764 18.321795,7.7204251 17.771,7 l 1.464883,0 c 0.574232,0.653236 1.011744,1.4128466 1.312536,2.2788341 0.300785,0.8622719 0.45118,1.7842569 0.451183,2.7659629" />
+        <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="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"/>
     </g>
 </svg>
index 3551e58..c242b8a 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="remove">
-        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0H9v6h1v-6zm4 0h-1v6h1v-6zm0-4V5H9v1H6v3h1v7.966l1 1.03v-.073V18h6.984l.016-.018v.015l1-1.03V9h1V6h-3zm1 11H8V9h7v8zm1-9H7V7h9v1z"/>
     </g>
 </svg>
index ddc352f..0e2c8ba 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="remove">
-        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0H9v6h1v-6zm4 0h-1v6h1v-6zm0-4V5H9v1H6v3h1v7.966l1 1.03v-.073V18h6.984l.016-.018v.015l1-1.03V9h1V6h-3zm1 11H8V9h7v8zm1-9H7V7h9v1z"/>
     </g>
 </svg>
index 6ad7917..ef5f97b 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="remove">
-        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+        <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0H9v6h1v-6zm4 0h-1v6h1v-6zm0-4V5H9v1H6v3h1v7.966l1 1.03v-.073V18h6.984l.016-.018v.015l1-1.03V9h1V6h-3zm1 11H8V9h7v8zm1-9H7V7h9v1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png
new file mode 100644 (file)
index 0000000..329da36
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize-invert.svg
new file mode 100644 (file)
index 0000000..d1d5e10
--- /dev/null
@@ -0,0 +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="Layer_1">
+        <g>
+            <circle cx="11.5" cy="8.5" r="2.5"/>
+            <path d="M16.3 8.7L17 8l-.8-.8.4-.8-1.1-.5.1-.9-1.2-.2-.1-.9-1.2.2-.4-.8-1.1.5L11 3l-.8.8-.9-.4-.5 1.1-.9-.2-.2 1.2-.9.2.2 1.2-.9.4.5 1.1L6 9l.8.8-.4.8 1.1.5-.1.9 1.2.2.1.9 1.2-.2.4.8 1.1-.5.6.8.8-.8.8.4.5-1.1.9.1.2-1.2.9-.1-.2-1.2.8-.4-.4-1zM11.5 12C9.6 12 8 10.4 8 8.5S9.6 5 11.5 5 15 6.6 15 8.5 13.4 12 11.5 12zm.5 3l-.7-.7-1.1.6-.4-.7-.8.3V23l2.5-3 2.5 3v-8.5l-1-.5z"/>
+        </g>
+    </g>
+</svg>
index ebce3c0..304a4fa 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png differ
index 6e4979f..d15f387 100644 (file)
@@ -3,7 +3,7 @@
     <g id="Layer_1">
         <g>
             <circle cx="11.5" cy="8.5" r="2.5"/>
-            <path d="M16.3 8.7l.7-.7-.8-.8.4-.8-1.1-.5.1-.9-1.2-.2-.1-.9-1.2.2-.4-.8-1.1.5-.6-.8-.8.8-.9-.4-.5 1.1-.9-.2-.2 1.2-.9.2.2 1.2-.9.4.5 1.1-.6.6.8.8-.4.8 1.1.5-.1.9 1.2.2.1.9 1.2-.2.4.8 1.1-.5.6.8.8-.8.8.4.5-1.1.9.1.2-1.2.9-.1-.2-1.2.8-.4-.4-1zm-4.8 3.3c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5zm.5 3l-.7-.7-1.1.6-.4-.7-.8.3v8.5l2.5-3 2.5 3v-8.5l-1-.5z"/>
+            <path d="M16.3 8.7L17 8l-.8-.8.4-.8-1.1-.5.1-.9-1.2-.2-.1-.9-1.2.2-.4-.8-1.1.5L11 3l-.8.8-.9-.4-.5 1.1-.9-.2-.2 1.2-.9.2.2 1.2-.9.4.5 1.1L6 9l.8.8-.4.8 1.1.5-.1.9 1.2.2.1.9 1.2-.2.4.8 1.1-.5.6.8.8-.8.8.4.5-1.1.9.1.2-1.2.9-.1-.2-1.2.8-.4-.4-1zM11.5 12C9.6 12 8 10.4 8 8.5S9.6 5 11.5 5 15 6.6 15 8.5 13.4 12 11.5 12zm.5 3l-.7-.7-1.1.6-.4-.7-.8.3V23l2.5-3 2.5 3v-8.5l-1-.5z"/>
         </g>
     </g>
 </svg>
index 4b6ecd2..555b641 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png differ
index 3d58783..41b0227 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="search">
-        <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+        <path id="magnifying-glass" d="M10.5 4C6.91 4 4 6.91 4 10.5S6.91 17 10.5 17c1.022 0 1.983-.236 2.844-.656L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438C16.462 13.447 17 12.044 17 10.5 17 6.91 14.09 4 10.5 4zm0 2c2.485 0 4.5 2.015 4.5 4.5S12.985 15 10.5 15 6 12.985 6 10.5 8.015 6 10.5 6z"/>
     </g>
 </svg>
index c10dc66..9f2033b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png differ
index cdcbc30..eadb088 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="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+        <path id="magnifying-glass" d="M10.5 4C6.91 4 4 6.91 4 10.5S6.91 17 10.5 17c1.022 0 1.983-.236 2.844-.656L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438C16.462 13.447 17 12.044 17 10.5 17 6.91 14.09 4 10.5 4zm0 2c2.485 0 4.5 2.015 4.5 4.5S12.985 15 10.5 15 6 12.985 6 10.5 8.015 6 10.5 6z"/>
     </g>
 </svg>
index 7868dc1..8419713 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png differ
index 91130f0..8b143fc 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="search">
-        <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+        <path id="magnifying-glass" d="M13.5 4c3.59 0 6.5 2.91 6.5 6.5S17.09 17 13.5 17c-1.022 0-1.983-.236-2.844-.656L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438C7.538 13.447 7 12.044 7 10.5 7 6.91 9.91 4 13.5 4zm0 2C11.015 6 9 8.015 9 10.5s2.015 4.5 4.5 4.5 4.5-2.015 4.5-4.5S15.985 6 13.5 6z"/>
     </g>
 </svg>
index dab4ff1..c7bc7a8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png differ
index c675349..d2e4585 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="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+        <path id="magnifying-glass" d="M13.5 4c3.59 0 6.5 2.91 6.5 6.5S17.09 17 13.5 17c-1.022 0-1.983-.236-2.844-.656L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438C7.538 13.447 7 12.044 7 10.5 7 6.91 9.91 4 13.5 4zm0 2C11.015 6 9 8.015 9 10.5s2.015 4.5 4.5 4.5 4.5-2.015 4.5-4.5S15.985 6 13.5 6z"/>
     </g>
 </svg>
index 0e9a5c5..2bb6e9d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png differ
index 2aeba4e..092200a 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.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+        <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"/>
     </g>
 </svg>
index 918b3d7..a2eba48 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png differ
index a9c7d27..9a75454 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.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+        <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"/>
     </g>
 </svg>
index c6eba15..34cc190 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="settings">
-        <path id="gear" d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+        <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>
 </svg>
index bcd665e..3799767 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="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+        <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>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png
new file mode 100644 (file)
index 0000000..c7776c0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr-invert.svg
new file mode 100644 (file)
index 0000000..554525a
--- /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="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+</svg>
index 0d49504..03b34cf 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="M0 20h24v1h-24v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1h1.4c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+    <path d="M0 20h24v1H0v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1H23c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png
new file mode 100644 (file)
index 0000000..5686bdb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl-invert.svg
new file mode 100644 (file)
index 0000000..2962041
--- /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="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z" id="path576"/>
+</svg>
index 3d9fb23..665c4e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png differ
index 6c0ae5e..97b2465 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="M24 20h-24v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zm-15.6 3.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1h-1.4c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z" id="path576"/>
+    <path d="M24 20H0v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zM2.4 15.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1H1c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z" id="path576"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png
new file mode 100644 (file)
index 0000000..29675cf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr-invert.svg
new file mode 100644 (file)
index 0000000..1126dba
--- /dev/null
@@ -0,0 +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>
+    <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    <g id="down">
+        <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
+    </g>
+</svg>
index e8b427b..82d16af 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">
-  <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-  <g id="down">
-    <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
-  </g>
+    <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    <g id="down">
+        <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
+    </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png
new file mode 100644 (file)
index 0000000..20c2845
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl-invert.svg
new file mode 100644 (file)
index 0000000..ffac2da
--- /dev/null
@@ -0,0 +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>
+    <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    <g id="down">
+        <path id="arrow" d="M9 3L5.5 9 2 3z"/>
+    </g>
+</svg>
index e5e9519..7466f48 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">
-  <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
-  <g id="down">
-    <path id="arrow" d="M9 3L5.5 9 2 3z"/>
-  </g>
+    <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    <g id="down">
+        <path id="arrow" d="M9 3L5.5 9 2 3z"/>
+    </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png
new file mode 100644 (file)
index 0000000..17df47a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg
new file mode 100644 (file)
index 0000000..e88f51b
--- /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"><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"/>
+    </g>
+</svg>
index 51ccb89..2f38ecc 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 4d60128..c2ffd48 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-.311.366-.531.808-.66 1.327-.128.513-.192 1.08-.192 1.699 0 .513.058 1 .174 1.46.122.46.311.87.568 1.23.629.863 1.155 1.139 2.011 1.363l.247 3.035h-5v-3h.605l.531 1.354.394.053.605.044.751.035.456.009h.66l-.092-.894c-.629-.094-.811-.268-1.336-.522-.525-.26-.98-.59-1.365-.991-.379-.401-.675-.867-.889-1.398-.214-.537-.321-1.13-.321-1.779 0-.82.131-1.537.394-2.15.269-.619.656-1.133 1.163-1.54.507-.407 1.133-.711 1.878-.912.745-.206 1.6-.31 2.565-.31.959 0 1.811.103 2.556.31.751.201 1.38.504 1.887.912.507.407.892.92 1.154 1.54.269.614.403 1.33.403 2.15 0 .649-.107 1.242-.321 1.779-.214.531-.513.997-.898 1.398-.379.401-.831.732-1.356.991-.525.254-.707.428-1.336.522l-.092.894h.66l.447-.009.751-.035.605-.044.403-.053.531-1.354h.605v3h-5l.247-3.035c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.619-.064-1.186-.192-1.699-.128-.519-.348-.962-.66-1.327-.311-.372-.73-.661-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-.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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png
new file mode 100644 (file)
index 0000000..15ae3ab
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr-invert.svg
new file mode 100644 (file)
index 0000000..8f0d6e1
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
+    </g>
+</svg>
index f3fb8b3..6e5eacd 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>
-        <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+        <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png
new file mode 100644 (file)
index 0000000..02c0fa1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl-invert.svg
new file mode 100644 (file)
index 0000000..4eaf331
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g586">
+        <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z" id="path588"/>
+    </g>
+</svg>
index fd9b7bd..139c34e 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="g586">
-        <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path588"/>
+        <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z" id="path588"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png
new file mode 100644 (file)
index 0000000..15ae3ab
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr-invert.svg
new file mode 100644 (file)
index 0000000..652bb0b
--- /dev/null
@@ -0,0 +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>
+        <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
+    </g>
+    <path fill="#fff" d="M13 9h1v7h-1zm-3 3h7v1h-7z"/>
+</svg>
index 333c1e8..054c0be 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>
-        <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+        <path d="M19 20H2l3-3V6h17v11c0 1.7-1.3 3-3 3z"/>
     </g>
     <path fill="#fff" d="M13 9h1v7h-1zm-3 3h7v1h-7z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png
new file mode 100644 (file)
index 0000000..02c0fa1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b5718ef
--- /dev/null
@@ -0,0 +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="g598">
+        <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z" id="path600"/>
+    </g>
+    <path d="M11 9h-1v7h1zm3 3H7v1h7z" id="path602" fill="#fff"/>
+</svg>
index 4e6313f..c822ec5 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="g598">
-        <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path600"/>
+        <path d="M5 20h17l-3-3V6H2v11c0 1.7 1.3 3 3 3z" id="path600"/>
     </g>
-    <path d="M11 9h-1v7h1zm3 3h-7v1h7z" id="path602" fill="#fff"/>
+    <path d="M11 9h-1v7h1zm3 3H7v1h7z" id="path602" fill="#fff"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png
new file mode 100644 (file)
index 0000000..405f8ed
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr-invert.svg
new file mode 100644 (file)
index 0000000..f07ce02
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
+    </g>
+</svg>
index c4b4a2f..9c1c3f8 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>
-        <path d="M20 9v9l2 2h-14v-11h12zm-17-5h12v4h-8v7h-6l2-2v-9z"/>
+        <path d="M20 9v9l2 2H8V9h12zM3 4h12v4H7v7H1l2-2V4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png
new file mode 100644 (file)
index 0000000..6350811
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b98ed2b
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g612">
+        <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z" id="path614"/>
+    </g>
+</svg>
index c452fbb..49fc3d3 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="g612">
-        <path d="M3 9v9l-2 2h14v-11h-12zm17-5h-12v4h8v7h6l-2-2v-9z" id="path614"/>
+        <path d="M3 9v9l-2 2h14V9H3zm17-5H8v4h8v7h6l-2-2V4z" id="path614"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png
new file mode 100644 (file)
index 0000000..b0bc3b1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-constructive.svg
new file mode 100644 (file)
index 0000000..9e64bcf
--- /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: #00AF89 }</style>
+    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
+</svg>
index f58e8ce..af06636 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 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </svg>
index ea8c26c..54ba77a 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 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+    <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5L12 7.4M12 4L9.2 9.6l-6.2.9 4.5 4.4L6.4 21l5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9L12 4z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png
new file mode 100644 (file)
index 0000000..c2a07c6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop-invert.svg
new file mode 100644 (file)
index 0000000..ef7b7c6
--- /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="M12 6c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7m0-1c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-3 5h6v6H9z"/>
+</svg>
index 7bd0633..aa25e3d 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 6c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7m0-1c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-3 5h6v6h-6z"/>
+    <path d="M12 6c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7m0-1c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-3 5h6v6H9z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png
new file mode 100644 (file)
index 0000000..bf6e28f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a-invert.svg
new file mode 100644 (file)
index 0000000..60b36a8
--- /dev/null
@@ -0,0 +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="strikethrough-a">
+        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+    </g>
+</svg>
index 480189f..070d785 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="strikethrough-a">
-        <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
-        <path id="a" d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z"/>
+        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+        <path id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png
new file mode 100644 (file)
index 0000000..a80ee25
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg
new file mode 100644 (file)
index 0000000..d4cea6e
--- /dev/null
@@ -0,0 +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="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"/>
+    </g>
+</svg>
index 8aafe3f..1bcb55b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png differ
index d57b652..6408d01 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="strikethrough-s">
-        <path id="strikethrough" d="M6 12h12v1h-12v-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 .889.221 1.602.719 2.13.498.528 1.279.91 2.312 1.14l.812.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.531 1.26-.358.291-.894.45-1.625.45-.477 0-.969-.074-1.469-.24-.502-.166-1.031-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.143.417 1.688.54.549.121 1.07.18 1.562.18 1.286 0 2.297-.293 3-.9.709-.605 1.062-1.486 1.062-2.608 0-.943-.256-1.726-.781-2.312-.521-.592-1.305-1-2.344-1.229l-.812-.181c-.716-.148-1.204-.352-1.406-.539-.205-.203-.312-.485-.312-.935 0-.533.162-.899.5-1.17.342-.271.836-.42 1.531-.42.395 0 .818.052 1.25.181.433.127.908.333 1.406.6l.375.18v-2.041s-1.188-.383-1.688-.479c-.499-.098-.984-.151-1.468-.151z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png
new file mode 100644 (file)
index 0000000..63028d6
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y-invert.svg
new file mode 100644 (file)
index 0000000..50db67b
--- /dev/null
@@ -0,0 +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="strikethrough-y">
+        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
+    </g>
+</svg>
index a0065cb..5b1c1fd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png differ
index 8409dc1..2fdbc87 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="strikethrough-y">
-        <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
-        <path id="a" d="M7 6h1.724l3.288 4.935 3.264-4.935h1.724l-4.194 6.285v5.715h-1.612v-5.715l-4.194-6.285"/>
+        <path id="strikethrough" d="M6 11h12v1H6v-1z"/>
+        <path id="a" d="M7 6h1.724l3.288 4.935L15.276 6H17l-4.194 6.285V18h-1.612v-5.715L7 6"/>
     </g>
 </svg>
index 4fbd4ec..97aacad 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 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
 </svg>
index acacc36..2112bb2 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 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
 </svg>
index b18ddc4..8187dba 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 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z" id="path624"/>
 </svg>
index c38a283..f34bec2 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 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z" id="path624"/>
 </svg>
index 47eff5d..9b7bba9 100644 (file)
@@ -1,12 +1,12 @@
 <?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>
-        <path d="M20 19h-16v-2h16v2z"/>
+        <path d="M20 19H4v-2h16v2z"/>
     </g>
     <g>
-        <path d="M20 15h-16v-2h16v2z"/>
+        <path d="M20 15H4v-2h16v2z"/>
     </g>
     <g>
-        <path d="M20 11h-16v-2h16v2z"/>
+        <path d="M20 11H4V9h16v2z"/>
     </g>
 </svg>
index 47e70d7..ea40dde 100644 (file)
@@ -1,12 +1,12 @@
 <?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>
-        <path d="M20 19h-16v-2h16v2z"/>
+        <path d="M20 19H4v-2h16v2z"/>
     </g>
     <g>
-        <path d="M20 15h-16v-2h16v2z"/>
+        <path d="M20 15H4v-2h16v2z"/>
     </g>
     <g>
-        <path d="M20 11h-16v-2h16v2z"/>
+        <path d="M20 11H4V9h16v2z"/>
     </g>
 </svg>
index d694cb1..a59f0d9 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>
-        <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+        <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
     </g>
 </svg>
index 7f8822b..a924c9c 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>
-        <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+        <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
     </g>
 </svg>
index 86a52ee..391597c 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="g654">
-        <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+        <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z" id="path656"/>
     </g>
 </svg>
index fcb10ba..1da4bd9 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="g654">
-        <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+        <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z" id="path656"/>
     </g>
 </svg>
index d2e9786..8710bd3 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>
-        <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+        <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
     </g>
 </svg>
index be30320..b16a94b 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>
-        <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+        <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
     </g>
 </svg>
index 76c80d2..21ed0ea 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>
-        <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+        <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
     </g>
 </svg>
index 6266319..9dc9a54 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="g666">
-        <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+        <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z" id="path668"/>
     </g>
 </svg>
index c5847b1..7485ba0 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="g666">
-        <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+        <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z" id="path668"/>
     </g>
 </svg>
index 308c2e6..14b2f8c 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="g666">
-        <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+        <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z" id="path668"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png
new file mode 100644 (file)
index 0000000..1607d39
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr-invert.svg
new file mode 100644 (file)
index 0000000..b5ef54e
--- /dev/null
@@ -0,0 +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"><style>* { fill: #FFFFFF }</style>
+    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+</svg>
index b7507da..fbb0c3c 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">
-       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-       <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+    <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png
new file mode 100644 (file)
index 0000000..3970bb1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl-invert.svg
new file mode 100644 (file)
index 0000000..e43eac6
--- /dev/null
@@ -0,0 +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"><style>* { fill: #FFFFFF }</style>
+    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+</svg>
index 9fe5325..91a71ec 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">
-       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-       <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+    <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png
new file mode 100644 (file)
index 0000000..9c2fe07
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr-invert.svg
new file mode 100644 (file)
index 0000000..7f7ef3a
--- /dev/null
@@ -0,0 +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"><style>* { fill: #FFFFFF }</style>
+    <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.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.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-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
+    <circle cx="12" cy="11" r="4"/>
+</svg>
index 1f829c1..459f4c9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png differ
index f1b7caf..4bde183 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">
-    <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.9s-.5.4-.8.4h-2v-1.3zm-6.2-5v-3.2c.3 0 .6.1.9.4s.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.3zm-11.6-12.2c.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-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2h-3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zm1.8 5.6l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
+    <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.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.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-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
     <circle cx="12" cy="11" r="4"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png
new file mode 100644 (file)
index 0000000..3481d18
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f90bc0c
--- /dev/null
@@ -0,0 +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"><style>* { fill: #FFFFFF }</style>
+    <path d="M5.9 5.1c0 .3.1.6.3.9l1.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.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z" id="path678"/>
+    <circle cx="12" cy="11" r="4" id="circle680" transform="matrix(-1 0 0 1 24 0)"/>
+</svg>
index 1e6f362..8a0fc83 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png differ
index a625fb9..2570610 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">
-    <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3h-3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5v-3.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zm-6.4 11.7c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zm11.6-12.2c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zm-1.8 5.6l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z" id="path678"/>
+    <path d="M5.9 5.1c0 .3.1.6.3.9l1.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.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z" id="path678"/>
     <circle cx="12" cy="11" r="4" id="circle680" transform="matrix(-1 0 0 1 24 0)"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png
new file mode 100644 (file)
index 0000000..7099d7f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr-invert.svg
new file mode 100644 (file)
index 0000000..7f95dcf
--- /dev/null
@@ -0,0 +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"><style>* { fill: #FFFFFF }</style>
+    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+</svg>
index 39f30a7..45abfda 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">
-       <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
-       <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+    <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+    <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png
new file mode 100644 (file)
index 0000000..7d73f51
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl-invert.svg
new file mode 100644 (file)
index 0000000..468316d
--- /dev/null
@@ -0,0 +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"><style>* { fill: #FFFFFF }</style>
+    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+</svg>
index eabab21..33b5814 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">
-       <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
-       <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+    <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+    <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png
new file mode 100644 (file)
index 0000000..81c258e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption-invert.svg
new file mode 100644 (file)
index 0000000..3923614
--- /dev/null
@@ -0,0 +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="table-caption">
+        <path id="caption" d="M6 6h12v3H6z"/>
+        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
+    </g>
+</svg>
index 15bb06a..6b7edc6 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="table-caption">
-      <path id="caption" d="M6 6h12v3H6z"/>
-      <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
+        <path id="caption" d="M6 6h12v3H6z"/>
+        <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png
new file mode 100644 (file)
index 0000000..13bb421
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr-invert.svg
new file mode 100644 (file)
index 0000000..1bb2d7e
--- /dev/null
@@ -0,0 +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="table-insert-column-ltr">
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 5h2v14H5z" id="column"/>
+    </g>
+</svg>
index 798ee4a..a67ed20 100644 (file)
@@ -1,11 +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="table-insert-column-ltr">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 5,5 2,0 0,14 -2,0 z"
-         id="column" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 5h2v14H5z" id="column"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png
new file mode 100644 (file)
index 0000000..363241b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl-invert.svg
new file mode 100644 (file)
index 0000000..8489597
--- /dev/null
@@ -0,0 +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="table-insert-column-rtl">
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M17 5h2v14h-2z" id="column"/>
+    </g>
+</svg>
index dfa33a0..dee782e 100644 (file)
@@ -1,11 +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="table-insert-column-rtl">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 17,5 2,0 0,14 -2,0 z"
-         id="column" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M17 5h2v14h-2z" id="column"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png
new file mode 100644 (file)
index 0000000..eb82a50
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after-invert.svg
new file mode 100644 (file)
index 0000000..d0813a6
--- /dev/null
@@ -0,0 +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="table-insert-row-after">
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 17h14v2H5z" id="row"/>
+    </g>
+</svg>
index 91d0664..ad9d86d 100644 (file)
@@ -1,11 +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="table-insert-row-after">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 5,17 14,0 0,2 -14,0 z"
-         id="row" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 17h14v2H5z" id="row"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png
new file mode 100644 (file)
index 0000000..f5ff540
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before-invert.svg
new file mode 100644 (file)
index 0000000..516078f
--- /dev/null
@@ -0,0 +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="table-insert-row-before">
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 5h14v2H5z" id="row"/>
+    </g>
+</svg>
index 4b71f2a..e9dfe04 100644 (file)
@@ -1,11 +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="table-insert-row-before">
-      <path
-         d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
-         id="plus" />
-      <path
-         d="m 5,5 14,0 0,2 -14,0 z"
-         id="row" />
+        <path d="M13 9h-2v2H9v2h2v2h2v-2h2v-2h-2z" id="plus"/>
+        <path d="M5 5h14v2H5z" id="row"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png
new file mode 100644 (file)
index 0000000..9cc620a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-invert.svg
new file mode 100644 (file)
index 0000000..246be85
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="table-insert">
+        <path id="table" d="M4 5v13h16V5zm2 2h5v4H6zm7 0h5v4h-5zm-7 5h5v4H6zm7 0h5v4h-5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png
new file mode 100644 (file)
index 0000000..67c095d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells-invert.svg
new file mode 100644 (file)
index 0000000..06cb4da
--- /dev/null
@@ -0,0 +1,10 @@
+<?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="table-merge-cells">
+        <g id="merge-cell-left">
+            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+        </g>
+        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
+    </g>
+</svg>
index 6a8b77d..3ffb9e5 100644 (file)
@@ -1,10 +1,10 @@
 <?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="table-merge-cells">
-    <g id="merge-cell-left">
-      <path id="cell-border" d="m 4,7 0,9 7,0 0,-3 -1,0.834 L 10,15 5,15 5,8 10,8 10,9.167 11,10 11,7 z" />
-      <path id="arrow" d="m 8,9 0,2 -2,0 0,1 2,0 0,2 3,-2.5 z" />
+    <g id="table-merge-cells">
+        <g id="merge-cell-left">
+            <path id="cell-border" d="M4 7v9h7v-3l-1 .834V15H5V8h5v1.167L11 10V7z"/>
+            <path id="arrow" d="M8 9v2H6v1h2v2l3-2.5z"/>
+        </g>
+        <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1 0 0 1 24 0)"/>
     </g>
-    <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1,0,0,1,24,0)" />
-  </g>
 </svg>
index 1ba8c44..3c901f7 100644 (file)
@@ -1,7 +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="table-insert">
-        <path id="table" d="M4 5v13h16v-13zm2 2h5v4h-5zm7 0h5v4h-5zm-7 5h5v4h-5zm7 0h5v4h-5z"/>
+        <path id="table" d="M4 5v13h16V5zm2 2h5v4H6zm7 0h5v4h-5zm-7 5h5v4H6zm7 0h5v4h-5z"/>
     </g>
 </svg>
index 66af375..6067a84 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 82171db..d53e332 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
index 1de90d4..6c6099e 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 3d48512..710a19a 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
index c233429..80c5e8c 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 e573429..d42ac07 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
index a6759e2..7b4e2f9 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 f52e06c..49dde93 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
index 77fc366..844cc18 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 337adb6..3fe96f5 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
index 8e100fc..15de70b 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 534824c..8e517bf 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.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+        <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"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png
new file mode 100644 (file)
index 0000000..f5dfa9d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr-invert.svg
new file mode 100644 (file)
index 0000000..c97070d
--- /dev/null
@@ -0,0 +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>
+        <path d="M24 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
+    </g>
+    <path d="M19 13v7H3c-1.1 0-2-.9-2-2V7h12V6H0v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
+</svg>
index 6b594b2..13b1fc7 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>
-        <path d="M24 6h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+        <path d="M24 6h-4V2h-2v4h-4v2h4v4h2V8h4z"/>
     </g>
-    <path d="M19 13v7h-16c-1.1 0-2-.9-2-2v-11h12v-1h-13v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
+    <path d="M19 13v7H3c-1.1 0-2-.9-2-2V7h12V6H0v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png
new file mode 100644 (file)
index 0000000..23c7292
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl-invert.svg
new file mode 100644 (file)
index 0000000..6593fc7
--- /dev/null
@@ -0,0 +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="g690">
+        <path d="M0 6h4V2h2v4h4v2H6v4H4V8H0z" id="path692"/>
+    </g>
+    <path d="M5 13v7h16c1.1 0 2-.9 2-2V7H11V6h13v12c0 1.7-1.3 3-3 3H4v-8h1z" id="path694"/>
+</svg>
index 36b25a3..d44c3a4 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="g690">
-        <path d="M0 6h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path692"/>
+        <path d="M0 6h4V2h2v4h4v2H6v4H4V8H0z" id="path692"/>
     </g>
-    <path d="M5 13v7h16c1.1 0 2-.9 2-2v-11h-12v-1h13v12c0 1.7-1.3 3-3 3h-17v-8h1z" id="path694"/>
+    <path d="M5 13v7h16c1.1 0 2-.9 2-2V7H11V6h13v12c0 1.7-1.3 3-3 3H4v-8h1z" id="path694"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png
new file mode 100644 (file)
index 0000000..fb7b900
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright-invert.svg
new file mode 100644 (file)
index 0000000..ae694bc
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="text-dir-ltr">
+        <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
+    </g>
+</svg>
index 62526a0..7dbff91 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="text-dir-ltr">
-        <path d="M7 7h-2v-1h2l.469.5.531-.5h2v1h-2v10h2v1h-2l-.5-.531-.5.531h-2v-1h2zM13.976 16v-2h-2.976v-4h2.976v-1.956l6.024 3.978z"/>
+        <path d="M7 7H5V6h2l.47.5L8 6h2v1H8v10h2v1H8l-.5-.53L7 18H5v-1h2zm6.976 9v-2H11v-4h2.976V8.044L20 12.022z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png
new file mode 100644 (file)
index 0000000..b935d7c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft-invert.svg
new file mode 100644 (file)
index 0000000..5536285
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="text-dir-rtl">
+        <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
+    </g>
+</svg>
index 913bbfd..76933a6 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="text-dir-rtl">
-        <path d="M17 17h2v1h-2l-.469-.5-.531.5h-2v-1h2v-10h-2v-1h2l.5.531.5-.531h2v1h-2zM10.024 8v2h2.976v4h-2.976v1.956l-6.024-3.978z"/>
+        <path d="M17 17h2v1h-2l-.47-.5-.53.5h-2v-1h2V7h-2V6h2l.5.53L17 6h2v1h-2zm-6.976-9v2H13v4h-2.976v1.956L4 11.978z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png
new file mode 100644 (file)
index 0000000..4bea5a1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg
new file mode 100644 (file)
index 0000000..baf5c14
--- /dev/null
@@ -0,0 +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="underline" d="M6 19h12v1H6v-1z"/>
+    </g>
+</svg>
index 4484496..a2f48be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png differ
index 0198c35..d9ff340 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.789l-1.14-12h-2.789l-8.156 12h2.789l2.039-3h4.183l.285 3zm-3.109-5l2.311-3.4.323 3.4h-2.634z"/>
-        <path id="underline" d="M6 19h12v1h-12v-1z"/>
+        <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="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.png
new file mode 100644 (file)
index 0000000..fde9f52
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr-invert.svg
new file mode 100644 (file)
index 0000000..30915b7
--- /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="M11.1 13.1C9.3 11 8.4 8.8 8.1 8h4.7l.7-2H8V3H6v3H1v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2L18 6h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
+</svg>
index 7740e43..8954a21 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.1 13.1c-1.8-2.1-2.7-4.3-3-5.1h4.7l.7-2h-5.5v-3h-2v3h-5v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2l-4.6-14h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
+    <path d="M11.1 13.1C9.3 11 8.4 8.8 8.1 8h4.7l.7-2H8V3H6v3H1v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2L18 6h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.png
new file mode 100644 (file)
index 0000000..09ab631
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl-invert.svg
new file mode 100644 (file)
index 0000000..de634a8
--- /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="M12.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7L10 6h5.5V3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zM11 20l-1.3-4H4.4l-1.3 4H.9L5.5 6h3l4.7 14H11zM7 8l-2 6h4L7 8z" id="path704"/>
+</svg>
index 17f543c..38066d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png differ
index c78e622..44ba971 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.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7l-.7-2h5.5v-3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zm-1.4 6.9l-1.3-4h-5.3l-1.3 4h-2.2l4.6-14h3l4.7 14h-2.2zm-4-12l-2 6h4l-2-6z" id="path704"/>
+    <path d="M12.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7L10 6h5.5V3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zM11 20l-1.3-4H4.4l-1.3 4H.9L5.5 6h3l4.7 14H11zM7 8l-2 6h4L7 8z" id="path704"/>
 </svg>
index baa31f6..65ba012 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="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </svg>
index f591431..76502dc 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="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+    <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2H6zm1 1h10l-1 11H8z"/>
 </svg>
index 20cd299..8717c94 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>
-        <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+        <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
     </g>
 </svg>
index 0731f05..071bd32 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>
-        <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+        <path d="M20.5 20.5L5 5 4 6l3 3 1 11h8l.2-1.8 3.3 3.3zM17 9h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1H8l2 2h8z"/>
     </g>
 </svg>
index aebedec..af43db7 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="g714">
-        <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+        <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
     </g>
 </svg>
index 2a92cbe..69c17b4 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="g714">
-        <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+        <path d="M4 20.5L19.5 5l1 1-3 3-1 11h-8l-.2-1.8L5 21.5zM7.5 9h6L8 14.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png
new file mode 100644 (file)
index 0000000..c30fe9d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-constructive.svg
new file mode 100644 (file)
index 0000000..818f5a7
--- /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: #00AF89 }</style>
+    <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png
new file mode 100644 (file)
index 0000000..00913f7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.svg
new file mode 100644 (file)
index 0000000..4ee0553
--- /dev/null
@@ -0,0 +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="underline" d="M7 17h10v1H7v-1z"/>
+    </g>
+</svg>
index dd6dde3..ea7350b 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 16h2.076l-3.463-10h-2.077l-3.46 10h2.077l.627-2h3.604l.616 2zm-3.921-3.623l1.496-4.379 1.511 4.379h-3z"/>
-        <path id="underline" d="M7 17h10v1h-10v-1z"/>
+        <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="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png
new file mode 100644 (file)
index 0000000..c1f52df
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg
new file mode 100644 (file)
index 0000000..5f841f9
--- /dev/null
@@ -0,0 +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="underline" d="M7 17h10v1H7v-1z"/>
+    </g>
+</svg>
index c4eb2a2..2504e66 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png differ
index fbd7c14..d07129f 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.959c-.104 1.707.695 2.002 2 2.041 1.777.062 2.002-.879 2-2.041v-5.959h2v6.123c0 1.279-.338 2.245-1.016 2.898-.672.651-1.666.979-2.98.979-1.32 0-2.319-.326-2.996-.979-.672-.653-1.008-1.619-1.008-2.898v-6.123"/>
-        <path id="underline" d="M7 17h10v1h-10v-1z"/>
+        <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="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png
new file mode 100644 (file)
index 0000000..720f335
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle-invert.svg
new file mode 100644 (file)
index 0000000..b23189f
--- /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="M12 8l8 10H4z"/>
+</svg>
index 9e5e72f..9f0efc5 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 8l8 10h-16z"/>
+    <path d="M12 8l8 10H4z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png
new file mode 100644 (file)
index 0000000..c7b7fd5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr-invert.svg
new file mode 100644 (file)
index 0000000..2ba1d09
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+    </g>
+</svg>
index 18879e3..e07541d 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>
-        <path d="M10 13c0 1.7 1.3 3 3 3v-7h3l-4.5-5-4.5 5h3v4zm7 0v5h-10c-.6 0-1-.4-1-1v-4h-2v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+        <path d="M10 13c0 1.7 1.3 3 3 3V9h3l-4.5-5L7 9h3v4zm7 0v5H7c-.6 0-1-.4-1-1v-4H4v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png
new file mode 100644 (file)
index 0000000..1fb0995
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl-invert.svg
new file mode 100644 (file)
index 0000000..b181c6c
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g736">
+        <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z" id="path738"/>
+    </g>
+</svg>
index 7a3535b..0f3d629 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="g736">
-        <path d="M13 13c0 1.7-1.3 3-3 3v-7h-3l4.5-5 4.5 5h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3h-12v-7h2z" id="path738"/>
+        <path d="M13 13c0 1.7-1.3 3-3 3V9H7l4.5-5L16 9h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3H4v-7h2z" id="path738"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png
new file mode 100644 (file)
index 0000000..b234763
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr-invert.svg
new file mode 100644 (file)
index 0000000..af68b98
--- /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="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+</svg>
index 5dcc317..7f526e5 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="M16 5h-12v12c0 1.7 1.3 3 3 3h12v-12c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2.5-1.2 1.2-1.2zm-5 0c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2S13.3 9 14 9zM9 9c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2S8.3 9 9 9zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png
new file mode 100644 (file)
index 0000000..29d54e2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl-invert.svg
new file mode 100644 (file)
index 0000000..8a8e6ec
--- /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="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z" id="path748"/>
+</svg>
index a5e4dc9..a451f00 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="M7 5h12v12c0 1.7-1.3 3-3 3h-12v-12c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2-.5-1.2-1.2-1.2zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z" id="path748"/>
+    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2S9.7 9 9 9zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2S14.7 9 14 9zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z" id="path748"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png
new file mode 100644 (file)
index 0000000..1adbac0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar-invert.svg
new file mode 100644 (file)
index 0000000..22b83ed
--- /dev/null
@@ -0,0 +1,8 @@
+<?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="g4">
+        <g id="g6">
+            <path d="M11.5 13c1.7 0 3.5-2 3.5-5 0-.1 0-4-3.5-4S8 7.9 8 8c0 3 1.8 5 3.5 5zm3.5-1c-.4.7-1.7 2-3.5 2S8.3 12.7 8 12H6c-1.1 0-2 .9-2 2v6h15v-6c0-1.1-.9-2-2-2h-2z" id="path8"/>
+        </g>
+    </g>
+</svg>
index e9687fa..1bf7d80 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="g4">
         <g id="g6">
-            <path d="M11.5 13c1.7 0 3.5-2 3.5-5 0-.1 0-4-3.5-4s-3.5 3.9-3.5 4c0 3 1.8 5 3.5 5zm3.5-1c-.4.7-1.7 2-3.5 2s-3.2-1.3-3.5-2h-2c-1.1 0-2 .9-2 2v6h15v-6c0-1.1-.9-2-2-2h-2z" id="path8"/>
+            <path d="M11.5 13c1.7 0 3.5-2 3.5-5 0-.1 0-4-3.5-4S8 7.9 8 8c0 3 1.8 5 3.5 5zm3.5-1c-.4.7-1.7 2-3.5 2S8.3 12.7 8 12H6c-1.1 0-2 .9-2 2v6h15v-6c0-1.1-.9-2-2-2h-2z" id="path8"/>
         </g>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png
new file mode 100644 (file)
index 0000000..184deb7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr-invert.svg
new file mode 100644 (file)
index 0000000..9bfdcd9
--- /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="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+</svg>
index 7e4cfd1..b6f9b15 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png differ
index bb5b096..e58bbc3 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="M16 5h-12v12c0 1.7 1.3 3 3 3h12v-12c0-1.7-1.3-3-3-3zm-9.3 5.4c-.5-.4-.7-.8-.7-1.4.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6-.7-.8-.7-1.4c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+    <path d="M16 5H4v12c0 1.7 1.3 3 3 3h12V8c0-1.7-1.3-3-3-3zm-9.3 5.4C6.2 10 6 9.6 6 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6S12 9.6 12 9c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png
new file mode 100644 (file)
index 0000000..fad58d4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl-invert.svg
new file mode 100644 (file)
index 0000000..cc568bb
--- /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="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z" id="path758"/>
+</svg>
index 4a9fd0d..d4476bd 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="M7 5h12v12c0 1.7-1.3 3-3 3h-12v-12c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9s-1.9-.3-2.5-.9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9s-1.9-.3-2.5-.9c0 .6.2 1 .7 1.4z" id="path758"/>
+    <path d="M7 5h12v12c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S12.6 9.6 12 9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9S6.6 9.6 6 9c0 .6.2 1 .7 1.4z" id="path758"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png
new file mode 100644 (file)
index 0000000..0d2d304
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr-invert.svg
new file mode 100644 (file)
index 0000000..0a165c4
--- /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="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z" id="path6"/>
+</svg>
index f516539..b58974c 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="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3v-11h-17zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z" id="path6"/>
+    <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3V6H5zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z" id="path6"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png
new file mode 100644 (file)
index 0000000..68d92b0
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl-invert.svg
new file mode 100644 (file)
index 0000000..3b91712
--- /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="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z" id="path770"/>
+</svg>
index 8963faf..7ef9ec2 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 6v11l3 3h-17c-1.7 0-3-1.3-3-3v-11h17zm-11.2 2.5c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zm-2.7 8.5c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z" id="path770"/>
+    <path d="M19 6v11l3 3H5c-1.7 0-3-1.3-3-3V6h17zM7.8 8.5c-.7 0-1.2.6-1.2 1.2S7.1 11 7.8 11 9 10.4 9 9.8s-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zM10.5 17c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z" id="path770"/>
 </svg>
index 14e435d..7c064cc 100644 (file)
@@ -2,8 +2,8 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="viewDetails">
         <circle cx="5.5" cy="8.5" r="2.5"/>
-        <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
         <circle cx="5.5" cy="16.5" r="2.5"/>
-        <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
     </g>
 </svg>
index 4f5f9b3..1a5092a 100644 (file)
@@ -2,8 +2,8 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="viewDetails">
         <circle cx="5.5" cy="8.5" r="2.5"/>
-        <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
         <circle cx="5.5" cy="16.5" r="2.5"/>
-        <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png
new file mode 100644 (file)
index 0000000..19b4561
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5e4a2f3
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g>
+        <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png
new file mode 100644 (file)
index 0000000..48bf383
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl-invert.svg
new file mode 100644 (file)
index 0000000..073ef3d
--- /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"><style>* { fill: #FFFFFF }</style>
+    <g id="g780">
+        <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z" id="path782"/>
+    </g>
+</svg>
index 6bbc2fa..8bfe43e 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="g780">
-        <path d="M11 14h-5v1h5v-1zm0 3h-5v-1h5v1zm0 1h-5v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z" id="path782"/>
+        <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z" id="path782"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png
new file mode 100644 (file)
index 0000000..bdf5238
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText-invert.svg
new file mode 100644 (file)
index 0000000..e050baa
--- /dev/null
@@ -0,0 +1,15 @@
+<?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>
+        <path d="M23 5h-4v2h2v10h-2v2h4z"/>
+    </g>
+    <g>
+        <path d="M18 5h-4v2h2v10h-2v2h4z"/>
+    </g>
+    <g>
+        <path d="M2 5h4v2H4v10h2v2H2z"/>
+    </g>
+    <g>
+        <path d="M7 5h4v2H9v10h2v2H7z"/>
+    </g>
+</svg>
index eebd9b1..ded0fe1 100644 (file)
@@ -7,9 +7,9 @@
         <path d="M18 5h-4v2h2v10h-2v2h4z"/>
     </g>
     <g>
-        <path d="M2 5h4v2h-2v10h2v2h-4z"/>
+        <path d="M2 5h4v2H4v10h2v2H2z"/>
     </g>
     <g>
-        <path d="M7 5h4v2h-2v10h2v2h-4z"/>
+        <path d="M7 5h4v2H9v10h2v2H7z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png
new file mode 100644 (file)
index 0000000..917a577
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg
new file mode 100644 (file)
index 0000000..652b9c4
--- /dev/null
@@ -0,0 +1,8 @@
+<?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>
+        <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5z"/>
+    </g>
+    <path d="M24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2"/>
+</svg>
index 41743b3..db4b6a5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png differ
index c606bec..6dbe1b4 100644 (file)
@@ -1,8 +1,8 @@
 <?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>
-        <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2l-2.5-1zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6l-1.1-1.7c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7c-.3-1.2-.3-2.3.2-3.3zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5s-3.5-1.6-3.5-3.5 1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5z"/>
+        <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5z"/>
     </g>
-    <path d="M24 8l-1-1-1.5 1.5-1.5-1.5-1 1 1.5 1.5-1.5 1.5 1 1 1.5-1.5 1.5 1.5 1-1-1.5-1.5z"/>
+    <path d="M24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
     <circle cx="8" cy="5" r="2"/>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png
new file mode 100644 (file)
index 0000000..92afc20
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg
new file mode 100644 (file)
index 0000000..285c8cc
--- /dev/null
@@ -0,0 +1,8 @@
+<?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="g792">
+        <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5z" id="path794"/>
+    </g>
+    <path d="M.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z" id="path796"/>
+    <circle cx="8" cy="5" r="2" id="circle798" transform="matrix(-1 0 0 1 24.095 0)"/>
+</svg>
index 0aeb616..a1d59d5 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="window">
-        <path id="title" d="M7 10h10v1h-10z"/>
-        <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+        <path id="title" d="M7 10h10v1H7z"/>
+        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
     </g>
 </svg>
index cd3b76c..093c822 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="window">
-        <path id="title" d="M7 10h10v1h-10z"/>
-        <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+        <path id="title" d="M7 10h10v1H7z"/>
+        <path id="frame" d="M16 19H8c-2.206 0-4-1.794-4-4V9c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zM8 7c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2V9c0-1.103-.897-2-2-2H8z"/>
     </g>
 </svg>
index cd66649..3207aaf 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="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 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+        <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"/>
     </g>
 </svg>
index d9dc6a8..cddc0db 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="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 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+        <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"/>
     </g>
 </svg>
index 847f935..6330d97 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<g id="down">\r
-       <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><style>* { fill: #FFFFFF }</style>
+    <g id="down">
+        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+    </g>
+</svg>
index 1738057..d8979ae 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">\r
-<g id="down">\r
-       <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
+    <g id="down">
+        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+    </g>
+</svg>
index 2a91c02..476dbcc 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<g id="ltr">\r
-       <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="ltr">
+        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+    </g>
+</svg>
index fb366e6..d824ff1 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">\r
-<g id="ltr">\r
-       <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+    <g id="ltr">
+        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+    </g>
+</svg>
index 3cce872..276052b 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<g id="rtl">\r
-       <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="rtl">
+        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+    </g>
+</svg>
index 62b6bb5..88ad88b 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">\r
-<g id="rtl">\r
-       <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+    <g id="rtl">
+        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+    </g>
+</svg>
index 50da8de..e33ba06 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>\r
-<g id="up">\r
-       <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="up">
+        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+    </g>
+</svg>
index 20e734f..0640cc3 100644 (file)
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
-        viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">\r
-<g id="up">\r
-       <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>\r
-</g>\r
-</svg>\r
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+    <g id="up">
+        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+    </g>
+</svg>
index 30baa50..0d2e79a 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="required">
-        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+        <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"/>
     </g>
 </svg>
index 969fa2d..051ed5f 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="required">
-        <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+        <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"/>
     </g>
 </svg>
index 2840bef..b04b92a 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 f46b1ee..2348e8e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+        <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"/>
     </g>
 </svg>
index df1c61e..cc1f377 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 266349e..9b49c4b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+        <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"/>
     </g>
 </svg>
index 665a088..acabbbd 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 bd962d9..d57b976 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+        <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"/>
     </g>
 </svg>
index c9443d7..5564b42 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 5368fd7..3847af2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <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.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+        <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"/>
     </g>
 </svg>
index 63a0b57..e413e75 100644 (file)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
-       <g id="transparency">
-               <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
-               <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
-               <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
-               <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
-       </g>
+<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"/>
+    </g>
 </svg>
index 0eb0b01..f1dcd4e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * QUnit 1.17.1
+ * QUnit 1.18.0
  * http://qunitjs.com/
  *
  * Copyright jQuery Foundation and other contributors
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2015-01-20T19:39Z
+ * Date: 2015-04-03T10:23Z
  */
 
 /** Font Family and Sizes */
 
 #qunit-tests.hidepass li.running,
 #qunit-tests.hidepass li.pass {
-       display: none;
+       visibility: hidden;
+       position: absolute;
+       width:   0px;
+       height:  0px;
+       padding: 0;
+       border:  0;
+       margin:  0;
 }
 
 #qunit-tests li strong {
        color: #C2CCD1;
        text-decoration: none;
 }
+
+#qunit-tests li p a {
+       padding: 0.25em;
+       color: #6B6464;
+}
 #qunit-tests li a:hover,
 #qunit-tests li a:focus {
        color: #000;
index 006ca47..f3542ca 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * QUnit 1.17.1
+ * QUnit 1.18.0
  * http://qunitjs.com/
  *
  * Copyright jQuery Foundation and other contributors
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2015-01-20T19:39Z
+ * Date: 2015-04-03T10:23Z
  */
 
 (function( window ) {
@@ -116,6 +116,9 @@ config = {
        // when enabled, all tests must call expect()
        requireExpects: false,
 
+       // depth up-to which object will be dumped
+       maxDepth: 5,
+
        // add checkboxes that are persisted in the query-string
        // when enabled, the id is set to `true` as a `QUnit.config` property
        urlConfig: [
@@ -185,11 +188,17 @@ config.modules.push( config.currentModule );
        // String search anywhere in moduleName+testName
        config.filter = urlParams.filter;
 
+       if ( urlParams.maxDepth ) {
+               config.maxDepth = parseInt( urlParams.maxDepth, 10 ) === -1 ?
+                       Number.POSITIVE_INFINITY :
+                       urlParams.maxDepth;
+       }
+
        config.testId = [];
        if ( urlParams.testId ) {
 
                // Ensure that urlParams.testId is an array
-               urlParams.testId = [].concat( urlParams.testId );
+               urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," );
                for ( i = 0; i < urlParams.testId.length; i++ ) {
                        config.testId.push( urlParams.testId[ i ] );
                }
@@ -197,6 +206,9 @@ config.modules.push( config.currentModule );
 
        // Figure out if we're running the tests from a server or not
        QUnit.isLocal = location.protocol === "file:";
+
+       // Expose the current QUnit version
+       QUnit.version = "1.18.0";
 }());
 
 // Root QUnit object.
@@ -484,20 +496,14 @@ function done() {
        });
 }
 
-// Doesn't support IE6 to IE9
+// Doesn't support IE6 to IE9, it will return undefined on these browsers
 // See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
 function extractStacktrace( e, offset ) {
        offset = offset === undefined ? 4 : offset;
 
        var stack, include, i;
 
-       if ( e.stacktrace ) {
-
-               // Opera 12.x
-               return e.stacktrace.split( "\n" )[ offset + 3 ];
-       } else if ( e.stack ) {
-
-               // Firefox, Chrome, Safari 6+, IE10+, PhantomJS and Node
+       if ( e.stack ) {
                stack = e.stack.split( "\n" );
                if ( /^error$/i.test( stack[ 0 ] ) ) {
                        stack.shift();
@@ -515,9 +521,10 @@ function extractStacktrace( e, offset ) {
                        }
                }
                return stack[ offset ];
+
+       // Support: Safari <=6 only
        } else if ( e.sourceURL ) {
 
-               // Safari < 6
                // exclude useless self-reference for generated Error objects
                if ( /qunit.js$/.test( e.sourceURL ) ) {
                        return;
@@ -529,16 +536,19 @@ function extractStacktrace( e, offset ) {
 }
 
 function sourceFromStacktrace( offset ) {
-       var e = new Error();
-       if ( !e.stack ) {
+       var error = new Error();
+
+       // Support: Safari <=7 only, IE <=10 - 11 only
+       // Not all browsers generate the `stack` property for `new Error()`, see also #636
+       if ( !error.stack ) {
                try {
-                       throw e;
+                       throw error;
                } catch ( err ) {
-                       // This should already be true in most browsers
-                       e = err;
+                       error = err;
                }
        }
-       return extractStacktrace( e, offset );
+
+       return extractStacktrace( error, offset );
 }
 
 function synchronize( callback, last ) {
@@ -1123,7 +1133,7 @@ Test.prototype = {
 
        valid: function() {
                var include,
-                       filter = config.filter,
+                       filter = config.filter && config.filter.toLowerCase(),
                        module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
                        fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
 
@@ -1146,7 +1156,7 @@ Test.prototype = {
 
                include = filter.charAt( 0 ) !== "!";
                if ( !include ) {
-                       filter = filter.toLowerCase().slice( 1 );
+                       filter = filter.slice( 1 );
                }
 
                // If the filter matches, we need to honour include
@@ -1284,87 +1294,52 @@ QUnit.assert = Assert.prototype = {
                return assert.test.push.apply( assert.test, arguments );
        },
 
-       /**
-        * Asserts rough true-ish result.
-        * @name ok
-        * @function
-        * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
-        */
        ok: function( result, message ) {
                message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
                        QUnit.dump.parse( result ) );
                this.push( !!result, result, true, message );
        },
 
-       /**
-        * Assert that the first two arguments are equal, with an optional message.
-        * Prints out both actual and expected values.
-        * @name equal
-        * @function
-        * @example equal( format( "{0} bytes.", 2), "2 bytes.", "replaces {0} with next argument" );
-        */
+       notOk: function( result, message ) {
+               message = message || ( !result ? "okay" : "failed, expected argument to be falsy, was: " +
+                       QUnit.dump.parse( result ) );
+               this.push( !result, result, false, message );
+       },
+
        equal: function( actual, expected, message ) {
                /*jshint eqeqeq:false */
                this.push( expected == actual, actual, expected, message );
        },
 
-       /**
-        * @name notEqual
-        * @function
-        */
        notEqual: function( actual, expected, message ) {
                /*jshint eqeqeq:false */
                this.push( expected != actual, actual, expected, message );
        },
 
-       /**
-        * @name propEqual
-        * @function
-        */
        propEqual: function( actual, expected, message ) {
                actual = objectValues( actual );
                expected = objectValues( expected );
                this.push( QUnit.equiv( actual, expected ), actual, expected, message );
        },
 
-       /**
-        * @name notPropEqual
-        * @function
-        */
        notPropEqual: function( actual, expected, message ) {
                actual = objectValues( actual );
                expected = objectValues( expected );
                this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
        },
 
-       /**
-        * @name deepEqual
-        * @function
-        */
        deepEqual: function( actual, expected, message ) {
                this.push( QUnit.equiv( actual, expected ), actual, expected, message );
        },
 
-       /**
-        * @name notDeepEqual
-        * @function
-        */
        notDeepEqual: function( actual, expected, message ) {
                this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
        },
 
-       /**
-        * @name strictEqual
-        * @function
-        */
        strictEqual: function( actual, expected, message ) {
                this.push( expected === actual, actual, expected, message );
        },
 
-       /**
-        * @name notStrictEqual
-        * @function
-        */
        notStrictEqual: function( actual, expected, message ) {
                this.push( expected !== actual, actual, expected, message );
        },
@@ -1372,7 +1347,8 @@ QUnit.assert = Assert.prototype = {
        "throws": function( block, expected, message ) {
                var actual, expectedType,
                        expectedOutput = expected,
-                       ok = false;
+                       ok = false,
+                       currentTest = ( this instanceof Assert && this.test ) || QUnit.config.current;
 
                // 'expected' is optional unless doing string comparison
                if ( message == null && typeof expected === "string" ) {
@@ -1380,13 +1356,13 @@ QUnit.assert = Assert.prototype = {
                        expected = null;
                }
 
-               this.test.ignoreGlobalErrors = true;
+               currentTest.ignoreGlobalErrors = true;
                try {
-                       block.call( this.test.testEnvironment );
+                       block.call( currentTest.testEnvironment );
                } catch (e) {
                        actual = e;
                }
-               this.test.ignoreGlobalErrors = false;
+               currentTest.ignoreGlobalErrors = false;
 
                if ( actual ) {
                        expectedType = QUnit.objectType( expected );
@@ -1419,11 +1395,9 @@ QUnit.assert = Assert.prototype = {
                                expectedOutput = null;
                                ok = true;
                        }
-
-                       this.push( ok, actual, expectedOutput, message );
-               } else {
-                       this.test.pushFailure( message, null, "No exception was thrown." );
                }
+
+               currentTest.assert.push( ok, actual, expectedOutput, message );
        }
 };
 
@@ -1783,7 +1757,7 @@ QUnit.dump = (function() {
                        join: join,
                        //
                        depth: 1,
-                       maxDepth: 5,
+                       maxDepth: QUnit.config.maxDepth,
 
                        // This is the list of parsers, to modify them, use dump.setParser
                        parsers: {
@@ -1830,7 +1804,7 @@ QUnit.dump = (function() {
                                        nonEnumerableProperties = [ "message", "name" ];
                                        for ( i in nonEnumerableProperties ) {
                                                key = nonEnumerableProperties[ i ];
-                                               if ( key in map && !( key in keys ) ) {
+                                               if ( key in map && inArray( key, keys ) < 0 ) {
                                                        keys.push( key );
                                                }
                                        }
@@ -1949,6 +1923,7 @@ if ( typeof window !== "undefined" ) {
                                "start",
                                "stop",
                                "ok",
+                               "notOk",
                                "equal",
                                "notEqual",
                                "propEqual",
@@ -1981,6 +1956,13 @@ if ( typeof exports !== "undefined" && exports ) {
        exports.QUnit = QUnit;
 }
 
+if ( typeof define === "function" && define.amd ) {
+       define( function() {
+               return QUnit;
+       } );
+       QUnit.config.autostart = false;
+}
+
 // Get a reference to the global object, like window in browsers
 }( (function() {
        return this;
@@ -1989,150 +1971,1088 @@ if ( typeof exports !== "undefined" && exports ) {
 /*istanbul ignore next */
 // jscs:disable maximumLineLength
 /*
- * Javascript Diff Algorithm
- *  By John Resig (http://ejohn.org/)
- *  Modified by Chu Alan "sprite"
+ * This file is a modified version of google-diff-match-patch's JavaScript implementation
+ * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
+ * modifications are licensed as more fully set forth in LICENSE.txt.
+ *
+ * The original source of google-diff-match-patch is attributable and licensed as follows:
  *
- * Released under the MIT license.
+ * Copyright 2006 Google Inc.
+ * http://code.google.com/p/google-diff-match-patch/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  *
  * More Info:
- *  http://ejohn.org/projects/javascript-diff-algorithm/
+ *  https://code.google.com/p/google-diff-match-patch/
  *
  * Usage: QUnit.diff(expected, actual)
  *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) === "the  quick <del>brown </del> fox jump<ins>s</ins><del>ed</del over"
  */
 QUnit.diff = (function() {
-       var hasOwn = Object.prototype.hasOwnProperty;
-
-       /*jshint eqeqeq:false, eqnull:true */
-       function diff( o, n ) {
-               var i,
-                       ns = {},
-                       os = {};
-
-               for ( i = 0; i < n.length; i++ ) {
-                       if ( !hasOwn.call( ns, n[ i ] ) ) {
-                               ns[ n[ i ] ] = {
-                                       rows: [],
-                                       o: null
-                               };
-                       }
-                       ns[ n[ i ] ].rows.push( i );
-               }
-
-               for ( i = 0; i < o.length; i++ ) {
-                       if ( !hasOwn.call( os, o[ i ] ) ) {
-                               os[ o[ i ] ] = {
-                                       rows: [],
-                                       n: null
-                               };
-                       }
-                       os[ o[ i ] ].rows.push( i );
-               }
-
-               for ( i in ns ) {
-                       if ( hasOwn.call( ns, i ) ) {
-                               if ( ns[ i ].rows.length === 1 && hasOwn.call( os, i ) && os[ i ].rows.length === 1 ) {
-                                       n[ ns[ i ].rows[ 0 ] ] = {
-                                               text: n[ ns[ i ].rows[ 0 ] ],
-                                               row: os[ i ].rows[ 0 ]
-                                       };
-                                       o[ os[ i ].rows[ 0 ] ] = {
-                                               text: o[ os[ i ].rows[ 0 ] ],
-                                               row: ns[ i ].rows[ 0 ]
-                                       };
-                               }
-                       }
-               }
 
-               for ( i = 0; i < n.length - 1; i++ ) {
-                       if ( n[ i ].text != null && n[ i + 1 ].text == null && n[ i ].row + 1 < o.length && o[ n[ i ].row + 1 ].text == null &&
-                               n[ i + 1 ] == o[ n[ i ].row + 1 ] ) {
-
-                               n[ i + 1 ] = {
-                                       text: n[ i + 1 ],
-                                       row: n[ i ].row + 1
-                               };
-                               o[ n[ i ].row + 1 ] = {
-                                       text: o[ n[ i ].row + 1 ],
-                                       row: i + 1
-                               };
-                       }
-               }
-
-               for ( i = n.length - 1; i > 0; i-- ) {
-                       if ( n[ i ].text != null && n[ i - 1 ].text == null && n[ i ].row > 0 && o[ n[ i ].row - 1 ].text == null &&
-                               n[ i - 1 ] == o[ n[ i ].row - 1 ] ) {
-
-                               n[ i - 1 ] = {
-                                       text: n[ i - 1 ],
-                                       row: n[ i ].row - 1
-                               };
-                               o[ n[ i ].row - 1 ] = {
-                                       text: o[ n[ i ].row - 1 ],
-                                       row: i - 1
-                               };
-                       }
-               }
-
-               return {
-                       o: o,
-                       n: n
-               };
-       }
-
-       return function( o, n ) {
-               o = o.replace( /\s+$/, "" );
-               n = n.replace( /\s+$/, "" );
-
-               var i, pre,
-                       str = "",
-                       out = diff( o === "" ? [] : o.split( /\s+/ ), n === "" ? [] : n.split( /\s+/ ) ),
-                       oSpace = o.match( /\s+/g ),
-                       nSpace = n.match( /\s+/g );
-
-               if ( oSpace == null ) {
-                       oSpace = [ " " ];
-               } else {
-                       oSpace.push( " " );
-               }
-
-               if ( nSpace == null ) {
-                       nSpace = [ " " ];
-               } else {
-                       nSpace.push( " " );
-               }
-
-               if ( out.n.length === 0 ) {
-                       for ( i = 0; i < out.o.length; i++ ) {
-                               str += "<del>" + out.o[ i ] + oSpace[ i ] + "</del>";
-                       }
-               } else {
-                       if ( out.n[ 0 ].text == null ) {
-                               for ( n = 0; n < out.o.length && out.o[ n ].text == null; n++ ) {
-                                       str += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
-                               }
-                       }
-
-                       for ( i = 0; i < out.n.length; i++ ) {
-                               if ( out.n[ i ].text == null ) {
-                                       str += "<ins>" + out.n[ i ] + nSpace[ i ] + "</ins>";
-                               } else {
-
-                                       // `pre` initialized at top of scope
-                                       pre = "";
-
-                                       for ( n = out.n[ i ].row + 1; n < out.o.length && out.o[ n ].text == null; n++ ) {
-                                               pre += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
-                                       }
-                                       str += " " + out.n[ i ].text + nSpace[ i ] + pre;
-                               }
-                       }
-               }
-
-               return str;
-       };
+    function DiffMatchPatch() {
+
+        // Defaults.
+        // Redefine these in your program to override the defaults.
+
+        // Number of seconds to map a diff before giving up (0 for infinity).
+        this.DiffTimeout = 1.0;
+        // Cost of an empty edit operation in terms of edit characters.
+        this.DiffEditCost = 4;
+    }
+
+    //  DIFF FUNCTIONS
+
+    /**
+     * The data structure representing a diff is an array of tuples:
+     * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
+     * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
+     */
+    var DIFF_DELETE = -1,
+               DIFF_INSERT = 1,
+               DIFF_EQUAL = 0;
+
+    /**
+     * Find the differences between two texts.  Simplifies the problem by stripping
+     * any common prefix or suffix off the texts before diffing.
+     * @param {string} text1 Old string to be diffed.
+     * @param {string} text2 New string to be diffed.
+     * @param {boolean=} optChecklines Optional speedup flag. If present and false,
+     *     then don't run a line-level diff first to identify the changed areas.
+     *     Defaults to true, which does a faster, slightly less optimal diff.
+     * @param {number} optDeadline Optional time when the diff should be complete
+     *     by.  Used internally for recursive calls.  Users should set DiffTimeout
+     *     instead.
+     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+     */
+    DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines, optDeadline ) {
+        var deadline, checklines, commonlength,
+                       commonprefix, commonsuffix, diffs;
+        // Set a deadline by which time the diff must be complete.
+        if ( typeof optDeadline === "undefined" ) {
+            if ( this.DiffTimeout <= 0 ) {
+                optDeadline = Number.MAX_VALUE;
+            } else {
+                optDeadline = ( new Date() ).getTime() + this.DiffTimeout * 1000;
+            }
+        }
+        deadline = optDeadline;
+
+        // Check for null inputs.
+        if ( text1 === null || text2 === null ) {
+            throw new Error( "Null input. (DiffMain)" );
+        }
+
+        // Check for equality (speedup).
+        if ( text1 === text2 ) {
+            if ( text1 ) {
+                return [
+                    [ DIFF_EQUAL, text1 ]
+                ];
+            }
+            return [];
+        }
+
+        if ( typeof optChecklines === "undefined" ) {
+            optChecklines = true;
+        }
+
+        checklines = optChecklines;
+
+        // Trim off common prefix (speedup).
+        commonlength = this.diffCommonPrefix( text1, text2 );
+        commonprefix = text1.substring( 0, commonlength );
+        text1 = text1.substring( commonlength );
+        text2 = text2.substring( commonlength );
+
+        // Trim off common suffix (speedup).
+        /////////
+        commonlength = this.diffCommonSuffix( text1, text2 );
+        commonsuffix = text1.substring( text1.length - commonlength );
+        text1 = text1.substring( 0, text1.length - commonlength );
+        text2 = text2.substring( 0, text2.length - commonlength );
+
+        // Compute the diff on the middle block.
+        diffs = this.diffCompute( text1, text2, checklines, deadline );
+
+        // Restore the prefix and suffix.
+        if ( commonprefix ) {
+            diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
+        }
+        if ( commonsuffix ) {
+            diffs.push( [ DIFF_EQUAL, commonsuffix ] );
+        }
+        this.diffCleanupMerge( diffs );
+        return diffs;
+    };
+
+    /**
+     * Reduce the number of edits by eliminating operationally trivial equalities.
+     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+     */
+    DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
+        var changes, equalities, equalitiesLength, lastequality,
+                       pointer, preIns, preDel, postIns, postDel;
+        changes = false;
+        equalities = []; // Stack of indices where equalities are found.
+        equalitiesLength = 0; // Keeping our own length var is faster in JS.
+        /** @type {?string} */
+        lastequality = null;
+        // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+        pointer = 0; // Index of current position.
+        // Is there an insertion operation before the last equality.
+        preIns = false;
+        // Is there a deletion operation before the last equality.
+        preDel = false;
+        // Is there an insertion operation after the last equality.
+        postIns = false;
+        // Is there a deletion operation after the last equality.
+        postDel = false;
+        while ( pointer < diffs.length ) {
+            if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
+                if ( diffs[ pointer ][ 1 ].length < this.DiffEditCost && ( postIns || postDel ) ) {
+                    // Candidate found.
+                    equalities[ equalitiesLength++ ] = pointer;
+                    preIns = postIns;
+                    preDel = postDel;
+                    lastequality = diffs[ pointer ][ 1 ];
+                } else {
+                    // Not a candidate, and can never become one.
+                    equalitiesLength = 0;
+                    lastequality = null;
+                }
+                postIns = postDel = false;
+            } else { // An insertion or deletion.
+                if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
+                    postDel = true;
+                } else {
+                    postIns = true;
+                }
+                /*
+                 * Five types to be split:
+                 * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>
+                 * <ins>A</ins>X<ins>C</ins><del>D</del>
+                 * <ins>A</ins><del>B</del>X<ins>C</ins>
+                 * <ins>A</del>X<ins>C</ins><del>D</del>
+                 * <ins>A</ins><del>B</del>X<del>C</del>
+                 */
+                if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
+                        ( ( lastequality.length < this.DiffEditCost / 2 ) &&
+                            ( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
+                    // Duplicate record.
+                    diffs.splice( equalities[equalitiesLength - 1], 0, [ DIFF_DELETE, lastequality ] );
+                    // Change second copy to insert.
+                    diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
+                    equalitiesLength--; // Throw away the equality we just deleted;
+                    lastequality = null;
+                    if (preIns && preDel) {
+                        // No changes made which could affect previous entry, keep going.
+                        postIns = postDel = true;
+                        equalitiesLength = 0;
+                    } else {
+                        equalitiesLength--; // Throw away the previous equality.
+                        pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
+                        postIns = postDel = false;
+                    }
+                    changes = true;
+                }
+            }
+            pointer++;
+        }
+
+        if ( changes ) {
+            this.diffCleanupMerge( diffs );
+        }
+    };
+
+    /**
+     * Convert a diff array into a pretty HTML report.
+     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+     * @param {integer} string to be beautified.
+     * @return {string} HTML representation.
+     */
+    DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
+        var op, data, x, html = [];
+        for ( x = 0; x < diffs.length; x++ ) {
+            op = diffs[x][0]; // Operation (insert, delete, equal)
+            data = diffs[x][1]; // Text of change.
+            switch ( op ) {
+                case DIFF_INSERT:
+                    html[x] = "<ins>" + data + "</ins>";
+                    break;
+                case DIFF_DELETE:
+                    html[x] = "<del>" + data + "</del>";
+                    break;
+                case DIFF_EQUAL:
+                    html[x] = "<span>" + data + "</span>";
+                    break;
+            }
+        }
+        return html.join("");
+    };
+
+    /**
+     * Determine the common prefix of two strings.
+     * @param {string} text1 First string.
+     * @param {string} text2 Second string.
+     * @return {number} The number of characters common to the start of each
+     *     string.
+     */
+    DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
+        var pointermid, pointermax, pointermin, pointerstart;
+        // Quick check for common null cases.
+        if ( !text1 || !text2 || text1.charAt(0) !== text2.charAt(0) ) {
+            return 0;
+        }
+        // Binary search.
+        // Performance analysis: http://neil.fraser.name/news/2007/10/09/
+        pointermin = 0;
+        pointermax = Math.min( text1.length, text2.length );
+        pointermid = pointermax;
+        pointerstart = 0;
+        while ( pointermin < pointermid ) {
+            if ( text1.substring( pointerstart, pointermid ) === text2.substring( pointerstart, pointermid ) ) {
+                pointermin = pointermid;
+                pointerstart = pointermin;
+            } else {
+                pointermax = pointermid;
+            }
+            pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
+        }
+        return pointermid;
+    };
+
+    /**
+     * Determine the common suffix of two strings.
+     * @param {string} text1 First string.
+     * @param {string} text2 Second string.
+     * @return {number} The number of characters common to the end of each string.
+     */
+    DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
+        var pointermid, pointermax, pointermin, pointerend;
+        // Quick check for common null cases.
+        if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) {
+            return 0;
+        }
+        // Binary search.
+        // Performance analysis: http://neil.fraser.name/news/2007/10/09/
+        pointermin = 0;
+        pointermax = Math.min(text1.length, text2.length);
+        pointermid = pointermax;
+        pointerend = 0;
+        while ( pointermin < pointermid ) {
+            if (text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
+                text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
+                pointermin = pointermid;
+                pointerend = pointermin;
+            } else {
+                pointermax = pointermid;
+            }
+            pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
+        }
+        return pointermid;
+    };
+
+    /**
+     * Find the differences between two texts.  Assumes that the texts do not
+     * have any common prefix or suffix.
+     * @param {string} text1 Old string to be diffed.
+     * @param {string} text2 New string to be diffed.
+     * @param {boolean} checklines Speedup flag.  If false, then don't run a
+     *     line-level diff first to identify the changed areas.
+     *     If true, then run a faster, slightly less optimal diff.
+     * @param {number} deadline Time when the diff should be complete by.
+     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
+        var diffs, longtext, shorttext, i, hm,
+                       text1A, text2A, text1B, text2B,
+                       midCommon, diffsA, diffsB;
+
+        if ( !text1 ) {
+            // Just add some text (speedup).
+            return [
+                [ DIFF_INSERT, text2 ]
+            ];
+        }
+
+        if (!text2) {
+            // Just delete some text (speedup).
+            return [
+                [ DIFF_DELETE, text1 ]
+            ];
+        }
+
+        longtext = text1.length > text2.length ? text1 : text2;
+        shorttext = text1.length > text2.length ? text2 : text1;
+        i = longtext.indexOf( shorttext );
+        if ( i !== -1 ) {
+            // Shorter text is inside the longer text (speedup).
+            diffs = [
+                [ DIFF_INSERT, longtext.substring( 0, i ) ],
+                [ DIFF_EQUAL, shorttext ],
+                [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
+            ];
+            // Swap insertions for deletions if diff is reversed.
+            if ( text1.length > text2.length ) {
+                diffs[0][0] = diffs[2][0] = DIFF_DELETE;
+            }
+            return diffs;
+        }
+
+        if ( shorttext.length === 1 ) {
+            // Single character string.
+            // After the previous speedup, the character can't be an equality.
+            return [
+                [ DIFF_DELETE, text1 ],
+                [ DIFF_INSERT, text2 ]
+            ];
+        }
+
+        // Check to see if the problem can be split in two.
+        hm = this.diffHalfMatch(text1, text2);
+        if (hm) {
+            // A half-match was found, sort out the return data.
+            text1A = hm[0];
+            text1B = hm[1];
+            text2A = hm[2];
+            text2B = hm[3];
+            midCommon = hm[4];
+            // Send both pairs off for separate processing.
+            diffsA = this.DiffMain(text1A, text2A, checklines, deadline);
+            diffsB = this.DiffMain(text1B, text2B, checklines, deadline);
+            // Merge the results.
+            return diffsA.concat([
+                [ DIFF_EQUAL, midCommon ]
+            ], diffsB);
+        }
+
+        if (checklines && text1.length > 100 && text2.length > 100) {
+            return this.diffLineMode(text1, text2, deadline);
+        }
+
+        return this.diffBisect(text1, text2, deadline);
+    };
+
+    /**
+     * Do the two texts share a substring which is at least half the length of the
+     * longer text?
+     * This speedup can produce non-minimal diffs.
+     * @param {string} text1 First string.
+     * @param {string} text2 Second string.
+     * @return {Array.<string>} Five element Array, containing the prefix of
+     *     text1, the suffix of text1, the prefix of text2, the suffix of
+     *     text2 and the common middle.  Or null if there was no match.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffHalfMatch = function(text1, text2) {
+        var longtext, shorttext, dmp,
+                       text1A, text2B, text2A, text1B, midCommon,
+                       hm1, hm2, hm;
+        if (this.DiffTimeout <= 0) {
+            // Don't risk returning a non-optimal diff if we have unlimited time.
+            return null;
+        }
+        longtext = text1.length > text2.length ? text1 : text2;
+        shorttext = text1.length > text2.length ? text2 : text1;
+        if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {
+            return null; // Pointless.
+        }
+        dmp = this; // 'this' becomes 'window' in a closure.
+
+        /**
+         * Does a substring of shorttext exist within longtext such that the substring
+         * is at least half the length of longtext?
+         * Closure, but does not reference any external variables.
+         * @param {string} longtext Longer string.
+         * @param {string} shorttext Shorter string.
+         * @param {number} i Start index of quarter length substring within longtext.
+         * @return {Array.<string>} Five element Array, containing the prefix of
+         *     longtext, the suffix of longtext, the prefix of shorttext, the suffix
+         *     of shorttext and the common middle.  Or null if there was no match.
+         * @private
+         */
+        function diffHalfMatchI(longtext, shorttext, i) {
+            var seed, j, bestCommon, prefixLength, suffixLength,
+                               bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
+            // Start with a 1/4 length substring at position i as a seed.
+            seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
+            j = -1;
+            bestCommon = "";
+            while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {
+                prefixLength = dmp.diffCommonPrefix(longtext.substring(i),
+                    shorttext.substring(j));
+                suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i),
+                    shorttext.substring(0, j));
+                if (bestCommon.length < suffixLength + prefixLength) {
+                    bestCommon = shorttext.substring(j - suffixLength, j) +
+                        shorttext.substring(j, j + prefixLength);
+                    bestLongtextA = longtext.substring(0, i - suffixLength);
+                    bestLongtextB = longtext.substring(i + prefixLength);
+                    bestShorttextA = shorttext.substring(0, j - suffixLength);
+                    bestShorttextB = shorttext.substring(j + prefixLength);
+                }
+            }
+            if (bestCommon.length * 2 >= longtext.length) {
+                return [ bestLongtextA, bestLongtextB,
+                    bestShorttextA, bestShorttextB, bestCommon
+                ];
+            } else {
+                return null;
+            }
+        }
+
+        // First check if the second quarter is the seed for a half-match.
+        hm1 = diffHalfMatchI(longtext, shorttext,
+            Math.ceil(longtext.length / 4));
+        // Check again based on the third quarter.
+        hm2 = diffHalfMatchI(longtext, shorttext,
+            Math.ceil(longtext.length / 2));
+        if (!hm1 && !hm2) {
+            return null;
+        } else if (!hm2) {
+            hm = hm1;
+        } else if (!hm1) {
+            hm = hm2;
+        } else {
+            // Both matched.  Select the longest.
+            hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
+        }
+
+        // A half-match was found, sort out the return data.
+        text1A, text1B, text2A, text2B;
+        if (text1.length > text2.length) {
+            text1A = hm[0];
+            text1B = hm[1];
+            text2A = hm[2];
+            text2B = hm[3];
+        } else {
+            text2A = hm[0];
+            text2B = hm[1];
+            text1A = hm[2];
+            text1B = hm[3];
+        }
+        midCommon = hm[4];
+        return [ text1A, text1B, text2A, text2B, midCommon ];
+    };
+
+    /**
+     * Do a quick line-level diff on both strings, then rediff the parts for
+     * greater accuracy.
+     * This speedup can produce non-minimal diffs.
+     * @param {string} text1 Old string to be diffed.
+     * @param {string} text2 New string to be diffed.
+     * @param {number} deadline Time when the diff should be complete by.
+     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffLineMode = function(text1, text2, deadline) {
+        var a, diffs, linearray, pointer, countInsert,
+                       countDelete, textInsert, textDelete, j;
+        // Scan the text on a line-by-line basis first.
+        a = this.diffLinesToChars(text1, text2);
+        text1 = a.chars1;
+        text2 = a.chars2;
+        linearray = a.lineArray;
+
+        diffs = this.DiffMain(text1, text2, false, deadline);
+
+        // Convert the diff back to original text.
+        this.diffCharsToLines(diffs, linearray);
+        // Eliminate freak matches (e.g. blank lines)
+        this.diffCleanupSemantic(diffs);
+
+        // Rediff any replacement blocks, this time character-by-character.
+        // Add a dummy entry at the end.
+        diffs.push( [ DIFF_EQUAL, "" ] );
+        pointer = 0;
+        countDelete = 0;
+        countInsert = 0;
+        textDelete = "";
+        textInsert = "";
+        while (pointer < diffs.length) {
+            switch ( diffs[pointer][0] ) {
+                case DIFF_INSERT:
+                    countInsert++;
+                    textInsert += diffs[pointer][1];
+                    break;
+                case DIFF_DELETE:
+                    countDelete++;
+                    textDelete += diffs[pointer][1];
+                    break;
+                case DIFF_EQUAL:
+                    // Upon reaching an equality, check for prior redundancies.
+                    if (countDelete >= 1 && countInsert >= 1) {
+                        // Delete the offending records and add the merged ones.
+                        diffs.splice(pointer - countDelete - countInsert,
+                            countDelete + countInsert);
+                        pointer = pointer - countDelete - countInsert;
+                        a = this.DiffMain(textDelete, textInsert, false, deadline);
+                        for (j = a.length - 1; j >= 0; j--) {
+                            diffs.splice( pointer, 0, a[j] );
+                        }
+                        pointer = pointer + a.length;
+                    }
+                    countInsert = 0;
+                    countDelete = 0;
+                    textDelete = "";
+                    textInsert = "";
+                    break;
+            }
+            pointer++;
+        }
+        diffs.pop(); // Remove the dummy entry at the end.
+
+        return diffs;
+    };
+
+    /**
+     * Find the 'middle snake' of a diff, split the problem in two
+     * and return the recursively constructed diff.
+     * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
+     * @param {string} text1 Old string to be diffed.
+     * @param {string} text2 New string to be diffed.
+     * @param {number} deadline Time at which to bail if not yet complete.
+     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffBisect = function(text1, text2, deadline) {
+        var text1Length, text2Length, maxD, vOffset, vLength,
+                       v1, v2, x, delta, front, k1start, k1end, k2start,
+                       k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
+        // Cache the text lengths to prevent multiple calls.
+        text1Length = text1.length;
+        text2Length = text2.length;
+        maxD = Math.ceil((text1Length + text2Length) / 2);
+        vOffset = maxD;
+        vLength = 2 * maxD;
+        v1 = new Array(vLength);
+        v2 = new Array(vLength);
+        // Setting all elements to -1 is faster in Chrome & Firefox than mixing
+        // integers and undefined.
+        for (x = 0; x < vLength; x++) {
+            v1[x] = -1;
+            v2[x] = -1;
+        }
+        v1[vOffset + 1] = 0;
+        v2[vOffset + 1] = 0;
+        delta = text1Length - text2Length;
+        // If the total number of characters is odd, then the front path will collide
+        // with the reverse path.
+        front = (delta % 2 !== 0);
+        // Offsets for start and end of k loop.
+        // Prevents mapping of space beyond the grid.
+        k1start = 0;
+        k1end = 0;
+        k2start = 0;
+        k2end = 0;
+        for (d = 0; d < maxD; d++) {
+            // Bail out if deadline is reached.
+            if ((new Date()).getTime() > deadline) {
+                break;
+            }
+
+            // Walk the front path one step.
+            for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
+                k1Offset = vOffset + k1;
+                if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
+                    x1 = v1[k1Offset + 1];
+                } else {
+                    x1 = v1[k1Offset - 1] + 1;
+                }
+                y1 = x1 - k1;
+                while (x1 < text1Length && y1 < text2Length &&
+                    text1.charAt(x1) === text2.charAt(y1)) {
+                    x1++;
+                    y1++;
+                }
+                v1[k1Offset] = x1;
+                if (x1 > text1Length) {
+                    // Ran off the right of the graph.
+                    k1end += 2;
+                } else if (y1 > text2Length) {
+                    // Ran off the bottom of the graph.
+                    k1start += 2;
+                } else if (front) {
+                    k2Offset = vOffset + delta - k1;
+                    if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {
+                        // Mirror x2 onto top-left coordinate system.
+                        x2 = text1Length - v2[k2Offset];
+                        if (x1 >= x2) {
+                            // Overlap detected.
+                            return this.diffBisectSplit(text1, text2, x1, y1, deadline);
+                        }
+                    }
+                }
+            }
+
+            // Walk the reverse path one step.
+            for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
+                k2Offset = vOffset + k2;
+                if ( k2 === -d || (k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
+                    x2 = v2[k2Offset + 1];
+                } else {
+                    x2 = v2[k2Offset - 1] + 1;
+                }
+                y2 = x2 - k2;
+                while (x2 < text1Length && y2 < text2Length &&
+                    text1.charAt(text1Length - x2 - 1) ===
+                    text2.charAt(text2Length - y2 - 1)) {
+                    x2++;
+                    y2++;
+                }
+                v2[k2Offset] = x2;
+                if (x2 > text1Length) {
+                    // Ran off the left of the graph.
+                    k2end += 2;
+                } else if (y2 > text2Length) {
+                    // Ran off the top of the graph.
+                    k2start += 2;
+                } else if (!front) {
+                    k1Offset = vOffset + delta - k2;
+                    if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {
+                        x1 = v1[k1Offset];
+                        y1 = vOffset + x1 - k1Offset;
+                        // Mirror x2 onto top-left coordinate system.
+                        x2 = text1Length - x2;
+                        if (x1 >= x2) {
+                            // Overlap detected.
+                            return this.diffBisectSplit(text1, text2, x1, y1, deadline);
+                        }
+                    }
+                }
+            }
+        }
+        // Diff took too long and hit the deadline or
+        // number of diffs equals number of characters, no commonality at all.
+        return [
+            [ DIFF_DELETE, text1 ],
+            [ DIFF_INSERT, text2 ]
+        ];
+    };
+
+    /**
+     * Given the location of the 'middle snake', split the diff in two parts
+     * and recurse.
+     * @param {string} text1 Old string to be diffed.
+     * @param {string} text2 New string to be diffed.
+     * @param {number} x Index of split point in text1.
+     * @param {number} y Index of split point in text2.
+     * @param {number} deadline Time at which to bail if not yet complete.
+     * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
+        var text1a, text1b, text2a, text2b, diffs, diffsb;
+        text1a = text1.substring(0, x);
+        text2a = text2.substring(0, y);
+        text1b = text1.substring(x);
+        text2b = text2.substring(y);
+
+        // Compute both diffs serially.
+        diffs = this.DiffMain(text1a, text2a, false, deadline);
+        diffsb = this.DiffMain(text1b, text2b, false, deadline);
+
+        return diffs.concat(diffsb);
+    };
+
+    /**
+     * Reduce the number of edits by eliminating semantically trivial equalities.
+     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+     */
+    DiffMatchPatch.prototype.diffCleanupSemantic = function(diffs) {
+        var changes, equalities, equalitiesLength, lastequality,
+                       pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
+                       lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
+        changes = false;
+        equalities = []; // Stack of indices where equalities are found.
+        equalitiesLength = 0; // Keeping our own length var is faster in JS.
+        /** @type {?string} */
+        lastequality = null;
+        // Always equal to diffs[equalities[equalitiesLength - 1]][1]
+        pointer = 0; // Index of current position.
+        // Number of characters that changed prior to the equality.
+        lengthInsertions1 = 0;
+        lengthDeletions1 = 0;
+        // Number of characters that changed after the equality.
+        lengthInsertions2 = 0;
+        lengthDeletions2 = 0;
+        while (pointer < diffs.length) {
+            if (diffs[pointer][0] === DIFF_EQUAL) { // Equality found.
+                equalities[equalitiesLength++] = pointer;
+                lengthInsertions1 = lengthInsertions2;
+                lengthDeletions1 = lengthDeletions2;
+                lengthInsertions2 = 0;
+                lengthDeletions2 = 0;
+                lastequality = diffs[pointer][1];
+            } else { // An insertion or deletion.
+                if (diffs[pointer][0] === DIFF_INSERT) {
+                    lengthInsertions2 += diffs[pointer][1].length;
+                } else {
+                    lengthDeletions2 += diffs[pointer][1].length;
+                }
+                // Eliminate an equality that is smaller or equal to the edits on both
+                // sides of it.
+                if (lastequality && (lastequality.length <=
+                        Math.max(lengthInsertions1, lengthDeletions1)) &&
+                    (lastequality.length <= Math.max(lengthInsertions2,
+                        lengthDeletions2))) {
+                    // Duplicate record.
+                    diffs.splice( equalities[ equalitiesLength - 1 ], 0, [ DIFF_DELETE, lastequality ] );
+                    // Change second copy to insert.
+                    diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;
+                    // Throw away the equality we just deleted.
+                    equalitiesLength--;
+                    // Throw away the previous equality (it needs to be reevaluated).
+                    equalitiesLength--;
+                    pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
+                    lengthInsertions1 = 0; // Reset the counters.
+                    lengthDeletions1 = 0;
+                    lengthInsertions2 = 0;
+                    lengthDeletions2 = 0;
+                    lastequality = null;
+                    changes = true;
+                }
+            }
+            pointer++;
+        }
+
+        // Normalize the diff.
+        if (changes) {
+            this.diffCleanupMerge(diffs);
+        }
+
+        // Find any overlaps between deletions and insertions.
+        // e.g: <del>abcxxx</del><ins>xxxdef</ins>
+        //   -> <del>abc</del>xxx<ins>def</ins>
+        // e.g: <del>xxxabc</del><ins>defxxx</ins>
+        //   -> <ins>def</ins>xxx<del>abc</del>
+        // Only extract an overlap if it is as big as the edit ahead or behind it.
+        pointer = 1;
+        while (pointer < diffs.length) {
+            if (diffs[pointer - 1][0] === DIFF_DELETE &&
+                diffs[pointer][0] === DIFF_INSERT) {
+                deletion = diffs[pointer - 1][1];
+                insertion = diffs[pointer][1];
+                overlapLength1 = this.diffCommonOverlap(deletion, insertion);
+                overlapLength2 = this.diffCommonOverlap(insertion, deletion);
+                if (overlapLength1 >= overlapLength2) {
+                    if (overlapLength1 >= deletion.length / 2 ||
+                        overlapLength1 >= insertion.length / 2) {
+                        // Overlap found.  Insert an equality and trim the surrounding edits.
+                        diffs.splice( pointer, 0, [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ] );
+                        diffs[pointer - 1][1] =
+                            deletion.substring(0, deletion.length - overlapLength1);
+                        diffs[pointer + 1][1] = insertion.substring(overlapLength1);
+                        pointer++;
+                    }
+                } else {
+                    if (overlapLength2 >= deletion.length / 2 ||
+                        overlapLength2 >= insertion.length / 2) {
+                        // Reverse overlap found.
+                        // Insert an equality and swap and trim the surrounding edits.
+                        diffs.splice( pointer, 0, [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ] );
+                        diffs[pointer - 1][0] = DIFF_INSERT;
+                        diffs[pointer - 1][1] =
+                            insertion.substring(0, insertion.length - overlapLength2);
+                        diffs[pointer + 1][0] = DIFF_DELETE;
+                        diffs[pointer + 1][1] =
+                            deletion.substring(overlapLength2);
+                        pointer++;
+                    }
+                }
+                pointer++;
+            }
+            pointer++;
+        }
+    };
+
+    /**
+     * Determine if the suffix of one string is the prefix of another.
+     * @param {string} text1 First string.
+     * @param {string} text2 Second string.
+     * @return {number} The number of characters common to the end of the first
+     *     string and the start of the second string.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffCommonOverlap = function(text1, text2) {
+        var text1Length, text2Length, textLength,
+                       best, length, pattern, found;
+        // Cache the text lengths to prevent multiple calls.
+        text1Length = text1.length;
+        text2Length = text2.length;
+        // Eliminate the null case.
+        if (text1Length === 0 || text2Length === 0) {
+            return 0;
+        }
+        // Truncate the longer string.
+        if (text1Length > text2Length) {
+            text1 = text1.substring(text1Length - text2Length);
+        } else if (text1Length < text2Length) {
+            text2 = text2.substring(0, text1Length);
+        }
+        textLength = Math.min(text1Length, text2Length);
+        // Quick check for the worst case.
+        if (text1 === text2) {
+            return textLength;
+        }
+
+        // Start by looking for a single character match
+        // and increase length until no match is found.
+        // Performance analysis: http://neil.fraser.name/news/2010/11/04/
+        best = 0;
+        length = 1;
+        while (true) {
+            pattern = text1.substring(textLength - length);
+            found = text2.indexOf(pattern);
+            if (found === -1) {
+                return best;
+            }
+            length += found;
+            if (found === 0 || text1.substring(textLength - length) ===
+                text2.substring(0, length)) {
+                best = length;
+                length++;
+            }
+        }
+    };
+
+    /**
+     * Split two texts into an array of strings.  Reduce the texts to a string of
+     * hashes where each Unicode character represents one line.
+     * @param {string} text1 First string.
+     * @param {string} text2 Second string.
+     * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}
+     *     An object containing the encoded text1, the encoded text2 and
+     *     the array of unique strings.
+     *     The zeroth element of the array of unique strings is intentionally blank.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffLinesToChars = function(text1, text2) {
+        var lineArray, lineHash, chars1, chars2;
+        lineArray = []; // e.g. lineArray[4] === 'Hello\n'
+        lineHash = {}; // e.g. lineHash['Hello\n'] === 4
+
+        // '\x00' is a valid character, but various debuggers don't like it.
+        // So we'll insert a junk entry to avoid generating a null character.
+        lineArray[0] = "";
+
+        /**
+         * Split a text into an array of strings.  Reduce the texts to a string of
+         * hashes where each Unicode character represents one line.
+         * Modifies linearray and linehash through being a closure.
+         * @param {string} text String to encode.
+         * @return {string} Encoded string.
+         * @private
+         */
+        function diffLinesToCharsMunge(text) {
+            var chars, lineStart, lineEnd, lineArrayLength, line;
+            chars = "";
+            // Walk the text, pulling out a substring for each line.
+            // text.split('\n') would would temporarily double our memory footprint.
+            // Modifying text would create many large strings to garbage collect.
+            lineStart = 0;
+            lineEnd = -1;
+            // Keeping our own length variable is faster than looking it up.
+            lineArrayLength = lineArray.length;
+            while (lineEnd < text.length - 1) {
+                lineEnd = text.indexOf("\n", lineStart);
+                if (lineEnd === -1) {
+                    lineEnd = text.length - 1;
+                }
+                line = text.substring(lineStart, lineEnd + 1);
+                lineStart = lineEnd + 1;
+
+                if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :
+                    (lineHash[line] !== undefined)) {
+                    chars += String.fromCharCode( lineHash[ line ] );
+                } else {
+                    chars += String.fromCharCode(lineArrayLength);
+                    lineHash[line] = lineArrayLength;
+                    lineArray[lineArrayLength++] = line;
+                }
+            }
+            return chars;
+        }
+
+        chars1 = diffLinesToCharsMunge(text1);
+        chars2 = diffLinesToCharsMunge(text2);
+        return {
+            chars1: chars1,
+            chars2: chars2,
+            lineArray: lineArray
+        };
+    };
+
+    /**
+     * Rehydrate the text in a diff from a string of line hashes to real lines of
+     * text.
+     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+     * @param {!Array.<string>} lineArray Array of unique strings.
+     * @private
+     */
+    DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
+        var x, chars, text, y;
+        for ( x = 0; x < diffs.length; x++ ) {
+            chars = diffs[x][1];
+            text = [];
+            for ( y = 0; y < chars.length; y++ ) {
+                text[y] = lineArray[chars.charCodeAt(y)];
+            }
+            diffs[x][1] = text.join("");
+        }
+    };
+
+    /**
+     * Reorder and merge like edit sections.  Merge equalities.
+     * Any edit section can move as long as it doesn't cross an equality.
+     * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
+     */
+    DiffMatchPatch.prototype.diffCleanupMerge = function(diffs) {
+        var pointer, countDelete, countInsert, textInsert, textDelete,
+                       commonlength, changes;
+        diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
+        pointer = 0;
+        countDelete = 0;
+        countInsert = 0;
+        textDelete = "";
+        textInsert = "";
+        commonlength;
+        while (pointer < diffs.length) {
+            switch ( diffs[ pointer ][ 0 ] ) {
+                case DIFF_INSERT:
+                    countInsert++;
+                    textInsert += diffs[pointer][1];
+                    pointer++;
+                    break;
+                case DIFF_DELETE:
+                    countDelete++;
+                    textDelete += diffs[pointer][1];
+                    pointer++;
+                    break;
+                case DIFF_EQUAL:
+                    // Upon reaching an equality, check for prior redundancies.
+                    if (countDelete + countInsert > 1) {
+                        if (countDelete !== 0 && countInsert !== 0) {
+                            // Factor out any common prefixies.
+                            commonlength = this.diffCommonPrefix(textInsert, textDelete);
+                            if (commonlength !== 0) {
+                                if ((pointer - countDelete - countInsert) > 0 &&
+                                    diffs[pointer - countDelete - countInsert - 1][0] ===
+                                    DIFF_EQUAL) {
+                                    diffs[pointer - countDelete - countInsert - 1][1] +=
+                                        textInsert.substring(0, commonlength);
+                                } else {
+                                    diffs.splice( 0, 0, [ DIFF_EQUAL,
+                                        textInsert.substring( 0, commonlength )
+                                     ] );
+                                    pointer++;
+                                }
+                                textInsert = textInsert.substring(commonlength);
+                                textDelete = textDelete.substring(commonlength);
+                            }
+                            // Factor out any common suffixies.
+                            commonlength = this.diffCommonSuffix(textInsert, textDelete);
+                            if (commonlength !== 0) {
+                                diffs[pointer][1] = textInsert.substring(textInsert.length -
+                                    commonlength) + diffs[pointer][1];
+                                textInsert = textInsert.substring(0, textInsert.length -
+                                    commonlength);
+                                textDelete = textDelete.substring(0, textDelete.length -
+                                    commonlength);
+                            }
+                        }
+                        // Delete the offending records and add the merged ones.
+                        if (countDelete === 0) {
+                            diffs.splice( pointer - countInsert,
+                                countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
+                        } else if (countInsert === 0) {
+                            diffs.splice( pointer - countDelete,
+                                countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
+                        } else {
+                            diffs.splice( pointer - countDelete - countInsert,
+                                countDelete + countInsert, [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ] );
+                        }
+                        pointer = pointer - countDelete - countInsert +
+                            (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1;
+                    } else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {
+                        // Merge this equality with the previous one.
+                        diffs[pointer - 1][1] += diffs[pointer][1];
+                        diffs.splice(pointer, 1);
+                    } else {
+                        pointer++;
+                    }
+                    countInsert = 0;
+                    countDelete = 0;
+                    textDelete = "";
+                    textInsert = "";
+                    break;
+            }
+        }
+        if (diffs[diffs.length - 1][1] === "") {
+            diffs.pop(); // Remove the dummy entry at the end.
+        }
+
+        // Second pass: look for single edits surrounded on both sides by equalities
+        // which can be shifted sideways to eliminate an equality.
+        // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
+        changes = false;
+        pointer = 1;
+        // Intentionally ignore the first and last element (don't need checking).
+        while (pointer < diffs.length - 1) {
+            if (diffs[pointer - 1][0] === DIFF_EQUAL &&
+                diffs[pointer + 1][0] === DIFF_EQUAL) {
+                // This is a single edit surrounded by equalities.
+                if ( diffs[ pointer ][ 1 ].substring( diffs[ pointer ][ 1 ].length -
+                        diffs[ pointer - 1 ][ 1 ].length ) === diffs[ pointer - 1 ][ 1 ] ) {
+                    // Shift the edit over the previous equality.
+                    diffs[pointer][1] = diffs[pointer - 1][1] +
+                        diffs[pointer][1].substring(0, diffs[pointer][1].length -
+                            diffs[pointer - 1][1].length);
+                    diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
+                    diffs.splice(pointer - 1, 1);
+                    changes = true;
+                } else if ( diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
+                    diffs[ pointer + 1 ][ 1 ] ) {
+                    // Shift the edit over the next equality.
+                    diffs[pointer - 1][1] += diffs[pointer + 1][1];
+                    diffs[pointer][1] =
+                        diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
+                        diffs[pointer + 1][1];
+                    diffs.splice(pointer + 1, 1);
+                    changes = true;
+                }
+            }
+            pointer++;
+        }
+        // If shifts were made, the diff needs reordering and another shift sweep.
+        if (changes) {
+            this.diffCleanupMerge(diffs);
+        }
+    };
+
+    return function(o, n) {
+               var diff, output, text;
+        diff = new DiffMatchPatch();
+        output = diff.DiffMain(o, n);
+        //console.log(output);
+        diff.diffCleanupEfficiency(output);
+        text = diff.diffPrettyHtml(output);
+
+        return text;
+    };
 }());
 // jscs:enable
 
@@ -2256,7 +3176,14 @@ function addEvent( elem, type, fn ) {
        } else if ( elem.attachEvent ) {
 
                // support: IE <9
-               elem.attachEvent( "on" + type, fn );
+               elem.attachEvent( "on" + type, function() {
+                       var event = window.event;
+                       if ( !event.target ) {
+                               event.target = event.srcElement || document;
+                       }
+
+                       fn.call( elem, event );
+               });
        }
 }
 
@@ -2427,12 +3354,16 @@ function setUrl( params ) {
 }
 
 function applyUrlParams() {
-       var selectBox = id( "qunit-modulefilter" ),
-               selection = decodeURIComponent( selectBox.options[ selectBox.selectedIndex ].value ),
+       var selectedModule,
+               modulesList = id( "qunit-modulefilter" ),
                filter = id( "qunit-filter-input" ).value;
 
+       selectedModule = modulesList ?
+               decodeURIComponent( modulesList.options[ modulesList.selectedIndex ].value ) :
+               undefined;
+
        window.location = setUrl({
-               module: ( selection === "" ) ? undefined : selection,
+               module: ( selectedModule === "" ) ? undefined : selectedModule,
                filter: ( filter === "" ) ? undefined : filter,
 
                // Remove testId filter
@@ -2588,9 +3519,14 @@ function storeFixture() {
 
 function appendUserAgent() {
        var userAgent = id( "qunit-userAgent" );
+
        if ( userAgent ) {
                userAgent.innerHTML = "";
-               userAgent.appendChild( document.createTextNode( navigator.userAgent ) );
+               userAgent.appendChild(
+                       document.createTextNode(
+                               "QUnit " + QUnit.version  + "; " + navigator.userAgent
+                       )
+               );
        }
 }
 
@@ -2733,7 +3669,7 @@ function getNameHtml( name, module ) {
 }
 
 QUnit.testStart(function( details ) {
-       var running, testBlock;
+       var running, testBlock, bad;
 
        testBlock = id( "qunit-test-output-" + details.testId );
        if ( testBlock ) {
@@ -2746,7 +3682,13 @@ QUnit.testStart(function( details ) {
 
        running = id( "qunit-testresult" );
        if ( running ) {
-               running.innerHTML = "Running: <br />" + getNameHtml( details.name, details.module );
+               bad = QUnit.config.reorder && defined.sessionStorage &&
+                       +sessionStorage.getItem( "qunit-test-" + details.module + "-" + details.name );
+
+               running.innerHTML = ( bad ?
+                       "Rerunning previously failed test: <br />" :
+                       "Running: <br />" ) +
+                       getNameHtml( details.name, details.module );
        }
 
 });
@@ -2779,6 +3721,15 @@ QUnit.log(function( details ) {
                                actual + "</pre></td></tr>" +
                                "<tr class='test-diff'><th>Diff: </th><td><pre>" +
                                QUnit.diff( expected, actual ) + "</pre></td></tr>";
+               } else {
+                       if ( expected.indexOf( "[object Array]" ) !== -1 ||
+                                       expected.indexOf( "[object Object]" ) !== -1 ) {
+                               message += "<tr class='test-message'><th>Message: </th><td>" +
+                                       "Diff suppressed as the depth of object is more than current max depth (" +
+                                       QUnit.config.maxDepth + ").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to " +
+                                       " run with a higher max depth or <a href='" + setUrl({ maxDepth: -1 }) + "'>" +
+                                       "Rerun</a> without max depth.</p></td></tr>";
+                       }
                }
 
                if ( details.source ) {
@@ -2863,13 +3814,15 @@ QUnit.testDone(function( details ) {
        }
 });
 
-if ( !defined.document || document.readyState === "complete" ) {
+if ( defined.document ) {
+       if ( document.readyState === "complete" ) {
+               QUnit.load();
+       } else {
+               addEvent( window, "load", QUnit.load );
+       }
+} else {
        config.pageLoaded = true;
        config.autorun = true;
 }
 
-if ( defined.document ) {
-       addEvent( window, "load", QUnit.load );
-}
-
 })();
diff --git a/resources/lib/sinonjs/sinon-1.10.3.js b/resources/lib/sinonjs/sinon-1.10.3.js
deleted file mode 100644 (file)
index 703414d..0000000
+++ /dev/null
@@ -1,5073 +0,0 @@
-/**
- * Sinon.JS 1.10.3, 2014/07/11
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
- *
- * (The BSD License)
- * 
- * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright notice,
- *       this list of conditions and the following disclaimer in the documentation
- *       and/or other materials provided with the distribution.
- *     * Neither the name of Christian Johansen nor the names of his contributors
- *       may be used to endorse or promote products derived from this software
- *       without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-this.sinon = (function () {
-var samsam, formatio;
-function define(mod, deps, fn) { if (mod == "samsam") { samsam = deps(); } else if (typeof fn === "function") { formatio = fn(samsam); } }
-define.amd = {};
-((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
- (typeof module === "object" &&
-      function (m) { module.exports = m(); }) || // Node
- function (m) { this.samsam = m(); } // Browser globals
-)(function () {
-    var o = Object.prototype;
-    var div = typeof document !== "undefined" && document.createElement("div");
-
-    function isNaN(value) {
-        // Unlike global isNaN, this avoids type coercion
-        // typeof check avoids IE host object issues, hat tip to
-        // lodash
-        var val = value; // JsLint thinks value !== value is "weird"
-        return typeof value === "number" && value !== val;
-    }
-
-    function getClass(value) {
-        // Returns the internal [[Class]] by calling Object.prototype.toString
-        // with the provided value as this. Return value is a string, naming the
-        // internal class, e.g. "Array"
-        return o.toString.call(value).split(/[ \]]/)[1];
-    }
-
-    /**
-     * @name samsam.isArguments
-     * @param Object object
-     *
-     * Returns ``true`` if ``object`` is an ``arguments`` object,
-     * ``false`` otherwise.
-     */
-    function isArguments(object) {
-        if (typeof object !== "object" || typeof object.length !== "number" ||
-                getClass(object) === "Array") {
-            return false;
-        }
-        if (typeof object.callee == "function") { return true; }
-        try {
-            object[object.length] = 6;
-            delete object[object.length];
-        } catch (e) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @name samsam.isElement
-     * @param Object object
-     *
-     * Returns ``true`` if ``object`` is a DOM element node. Unlike
-     * Underscore.js/lodash, this function will return ``false`` if ``object``
-     * is an *element-like* object, i.e. a regular object with a ``nodeType``
-     * property that holds the value ``1``.
-     */
-    function isElement(object) {
-        if (!object || object.nodeType !== 1 || !div) { return false; }
-        try {
-            object.appendChild(div);
-            object.removeChild(div);
-        } catch (e) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * @name samsam.keys
-     * @param Object object
-     *
-     * Return an array of own property names.
-     */
-    function keys(object) {
-        var ks = [], prop;
-        for (prop in object) {
-            if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
-        }
-        return ks;
-    }
-
-    /**
-     * @name samsam.isDate
-     * @param Object value
-     *
-     * Returns true if the object is a ``Date``, or *date-like*. Duck typing
-     * of date objects work by checking that the object has a ``getTime``
-     * function whose return value equals the return value from the object's
-     * ``valueOf``.
-     */
-    function isDate(value) {
-        return typeof value.getTime == "function" &&
-            value.getTime() == value.valueOf();
-    }
-
-    /**
-     * @name samsam.isNegZero
-     * @param Object value
-     *
-     * Returns ``true`` if ``value`` is ``-0``.
-     */
-    function isNegZero(value) {
-        return value === 0 && 1 / value === -Infinity;
-    }
-
-    /**
-     * @name samsam.equal
-     * @param Object obj1
-     * @param Object obj2
-     *
-     * Returns ``true`` if two objects are strictly equal. Compared to
-     * ``===`` there are two exceptions:
-     *
-     *   - NaN is considered equal to NaN
-     *   - -0 and +0 are not considered equal
-     */
-    function identical(obj1, obj2) {
-        if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
-            return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
-        }
-    }
-
-
-    /**
-     * @name samsam.deepEqual
-     * @param Object obj1
-     * @param Object obj2
-     *
-     * Deep equal comparison. Two values are "deep equal" if:
-     *
-     *   - They are equal, according to samsam.identical
-     *   - They are both date objects representing the same time
-     *   - They are both arrays containing elements that are all deepEqual
-     *   - They are objects with the same set of properties, and each property
-     *     in ``obj1`` is deepEqual to the corresponding property in ``obj2``
-     *
-     * Supports cyclic objects.
-     */
-    function deepEqualCyclic(obj1, obj2) {
-
-        // used for cyclic comparison
-        // contain already visited objects
-        var objects1 = [],
-            objects2 = [],
-        // contain pathes (position in the object structure)
-        // of the already visited objects
-        // indexes same as in objects arrays
-            paths1 = [],
-            paths2 = [],
-        // contains combinations of already compared objects
-        // in the manner: { "$1['ref']$2['ref']": true }
-            compared = {};
-
-        /**
-         * used to check, if the value of a property is an object
-         * (cyclic logic is only needed for objects)
-         * only needed for cyclic logic
-         */
-        function isObject(value) {
-
-            if (typeof value === 'object' && value !== null &&
-                    !(value instanceof Boolean) &&
-                    !(value instanceof Date)    &&
-                    !(value instanceof Number)  &&
-                    !(value instanceof RegExp)  &&
-                    !(value instanceof String)) {
-
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-         * returns the index of the given object in the
-         * given objects array, -1 if not contained
-         * only needed for cyclic logic
-         */
-        function getIndex(objects, obj) {
-
-            var i;
-            for (i = 0; i < objects.length; i++) {
-                if (objects[i] === obj) {
-                    return i;
-                }
-            }
-
-            return -1;
-        }
-
-        // does the recursion for the deep equal check
-        return (function deepEqual(obj1, obj2, path1, path2) {
-            var type1 = typeof obj1;
-            var type2 = typeof obj2;
-
-            // == null also matches undefined
-            if (obj1 === obj2 ||
-                    isNaN(obj1) || isNaN(obj2) ||
-                    obj1 == null || obj2 == null ||
-                    type1 !== "object" || type2 !== "object") {
-
-                return identical(obj1, obj2);
-            }
-
-            // Elements are only equal if identical(expected, actual)
-            if (isElement(obj1) || isElement(obj2)) { return false; }
-
-            var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
-            if (isDate1 || isDate2) {
-                if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
-                    return false;
-                }
-            }
-
-            if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
-                if (obj1.toString() !== obj2.toString()) { return false; }
-            }
-
-            var class1 = getClass(obj1);
-            var class2 = getClass(obj2);
-            var keys1 = keys(obj1);
-            var keys2 = keys(obj2);
-
-            if (isArguments(obj1) || isArguments(obj2)) {
-                if (obj1.length !== obj2.length) { return false; }
-            } else {
-                if (type1 !== type2 || class1 !== class2 ||
-                        keys1.length !== keys2.length) {
-                    return false;
-                }
-            }
-
-            var key, i, l,
-                // following vars are used for the cyclic logic
-                value1, value2,
-                isObject1, isObject2,
-                index1, index2,
-                newPath1, newPath2;
-
-            for (i = 0, l = keys1.length; i < l; i++) {
-                key = keys1[i];
-                if (!o.hasOwnProperty.call(obj2, key)) {
-                    return false;
-                }
-
-                // Start of the cyclic logic
-
-                value1 = obj1[key];
-                value2 = obj2[key];
-
-                isObject1 = isObject(value1);
-                isObject2 = isObject(value2);
-
-                // determine, if the objects were already visited
-                // (it's faster to check for isObject first, than to
-                // get -1 from getIndex for non objects)
-                index1 = isObject1 ? getIndex(objects1, value1) : -1;
-                index2 = isObject2 ? getIndex(objects2, value2) : -1;
-
-                // determine the new pathes of the objects
-                // - for non cyclic objects the current path will be extended
-                //   by current property name
-                // - for cyclic objects the stored path is taken
-                newPath1 = index1 !== -1
-                    ? paths1[index1]
-                    : path1 + '[' + JSON.stringify(key) + ']';
-                newPath2 = index2 !== -1
-                    ? paths2[index2]
-                    : path2 + '[' + JSON.stringify(key) + ']';
-
-                // stop recursion if current objects are already compared
-                if (compared[newPath1 + newPath2]) {
-                    return true;
-                }
-
-                // remember the current objects and their pathes
-                if (index1 === -1 && isObject1) {
-                    objects1.push(value1);
-                    paths1.push(newPath1);
-                }
-                if (index2 === -1 && isObject2) {
-                    objects2.push(value2);
-                    paths2.push(newPath2);
-                }
-
-                // remember that the current objects are already compared
-                if (isObject1 && isObject2) {
-                    compared[newPath1 + newPath2] = true;
-                }
-
-                // End of cyclic logic
-
-                // neither value1 nor value2 is a cycle
-                // continue with next level
-                if (!deepEqual(value1, value2, newPath1, newPath2)) {
-                    return false;
-                }
-            }
-
-            return true;
-
-        }(obj1, obj2, '$1', '$2'));
-    }
-
-    var match;
-
-    function arrayContains(array, subset) {
-        if (subset.length === 0) { return true; }
-        var i, l, j, k;
-        for (i = 0, l = array.length; i < l; ++i) {
-            if (match(array[i], subset[0])) {
-                for (j = 0, k = subset.length; j < k; ++j) {
-                    if (!match(array[i + j], subset[j])) { return false; }
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * @name samsam.match
-     * @param Object object
-     * @param Object matcher
-     *
-     * Compare arbitrary value ``object`` with matcher.
-     */
-    match = function match(object, matcher) {
-        if (matcher && typeof matcher.test === "function") {
-            return matcher.test(object);
-        }
-
-        if (typeof matcher === "function") {
-            return matcher(object) === true;
-        }
-
-        if (typeof matcher === "string") {
-            matcher = matcher.toLowerCase();
-            var notNull = typeof object === "string" || !!object;
-            return notNull &&
-                (String(object)).toLowerCase().indexOf(matcher) >= 0;
-        }
-
-        if (typeof matcher === "number") {
-            return matcher === object;
-        }
-
-        if (typeof matcher === "boolean") {
-            return matcher === object;
-        }
-
-        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
-            return arrayContains(object, matcher);
-        }
-
-        if (matcher && typeof matcher === "object") {
-            var prop;
-            for (prop in matcher) {
-                if (!match(object[prop], matcher[prop])) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        throw new Error("Matcher was not a string, a number, a " +
-                        "function, a boolean or an object");
-    };
-
-    return {
-        isArguments: isArguments,
-        isElement: isElement,
-        isDate: isDate,
-        isNegZero: isNegZero,
-        identical: identical,
-        deepEqual: deepEqualCyclic,
-        match: match,
-        keys: keys
-    };
-});
-((typeof define === "function" && define.amd && function (m) {
-    define("formatio", ["samsam"], m);
-}) || (typeof module === "object" && function (m) {
-    module.exports = m(require("samsam"));
-}) || function (m) { this.formatio = m(this.samsam); }
-)(function (samsam) {
-    
-    var formatio = {
-        excludeConstructors: ["Object", /^.$/],
-        quoteStrings: true
-    };
-
-    var hasOwn = Object.prototype.hasOwnProperty;
-
-    var specialObjects = [];
-    if (typeof global !== "undefined") {
-        specialObjects.push({ object: global, value: "[object global]" });
-    }
-    if (typeof document !== "undefined") {
-        specialObjects.push({
-            object: document,
-            value: "[object HTMLDocument]"
-        });
-    }
-    if (typeof window !== "undefined") {
-        specialObjects.push({ object: window, value: "[object Window]" });
-    }
-
-    function functionName(func) {
-        if (!func) { return ""; }
-        if (func.displayName) { return func.displayName; }
-        if (func.name) { return func.name; }
-        var matches = func.toString().match(/function\s+([^\(]+)/m);
-        return (matches && matches[1]) || "";
-    }
-
-    function constructorName(f, object) {
-        var name = functionName(object && object.constructor);
-        var excludes = f.excludeConstructors ||
-                formatio.excludeConstructors || [];
-
-        var i, l;
-        for (i = 0, l = excludes.length; i < l; ++i) {
-            if (typeof excludes[i] === "string" && excludes[i] === name) {
-                return "";
-            } else if (excludes[i].test && excludes[i].test(name)) {
-                return "";
-            }
-        }
-
-        return name;
-    }
-
-    function isCircular(object, objects) {
-        if (typeof object !== "object") { return false; }
-        var i, l;
-        for (i = 0, l = objects.length; i < l; ++i) {
-            if (objects[i] === object) { return true; }
-        }
-        return false;
-    }
-
-    function ascii(f, object, processed, indent) {
-        if (typeof object === "string") {
-            var qs = f.quoteStrings;
-            var quote = typeof qs !== "boolean" || qs;
-            return processed || quote ? '"' + object + '"' : object;
-        }
-
-        if (typeof object === "function" && !(object instanceof RegExp)) {
-            return ascii.func(object);
-        }
-
-        processed = processed || [];
-
-        if (isCircular(object, processed)) { return "[Circular]"; }
-
-        if (Object.prototype.toString.call(object) === "[object Array]") {
-            return ascii.array.call(f, object, processed);
-        }
-
-        if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
-        if (samsam.isElement(object)) { return ascii.element(object); }
-
-        if (typeof object.toString === "function" &&
-                object.toString !== Object.prototype.toString) {
-            return object.toString();
-        }
-
-        var i, l;
-        for (i = 0, l = specialObjects.length; i < l; i++) {
-            if (object === specialObjects[i].object) {
-                return specialObjects[i].value;
-            }
-        }
-
-        return ascii.object.call(f, object, processed, indent);
-    }
-
-    ascii.func = function (func) {
-        return "function " + functionName(func) + "() {}";
-    };
-
-    ascii.array = function (array, processed) {
-        processed = processed || [];
-        processed.push(array);
-        var i, l, pieces = [];
-        for (i = 0, l = array.length; i < l; ++i) {
-            pieces.push(ascii(this, array[i], processed));
-        }
-        return "[" + pieces.join(", ") + "]";
-    };
-
-    ascii.object = function (object, processed, indent) {
-        processed = processed || [];
-        processed.push(object);
-        indent = indent || 0;
-        var pieces = [], properties = samsam.keys(object).sort();
-        var length = 3;
-        var prop, str, obj, i, l;
-
-        for (i = 0, l = properties.length; i < l; ++i) {
-            prop = properties[i];
-            obj = object[prop];
-
-            if (isCircular(obj, processed)) {
-                str = "[Circular]";
-            } else {
-                str = ascii(this, obj, processed, indent + 2);
-            }
-
-            str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
-            length += str.length;
-            pieces.push(str);
-        }
-
-        var cons = constructorName(this, object);
-        var prefix = cons ? "[" + cons + "] " : "";
-        var is = "";
-        for (i = 0, l = indent; i < l; ++i) { is += " "; }
-
-        if (length + indent > 80) {
-            return prefix + "{\n  " + is + pieces.join(",\n  " + is) + "\n" +
-                is + "}";
-        }
-        return prefix + "{ " + pieces.join(", ") + " }";
-    };
-
-    ascii.element = function (element) {
-        var tagName = element.tagName.toLowerCase();
-        var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
-
-        for (i = 0, l = attrs.length; i < l; ++i) {
-            attr = attrs.item(i);
-            attrName = attr.nodeName.toLowerCase().replace("html:", "");
-            val = attr.nodeValue;
-            if (attrName !== "contenteditable" || val !== "inherit") {
-                if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
-            }
-        }
-
-        var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
-        var content = element.innerHTML;
-
-        if (content.length > 20) {
-            content = content.substr(0, 20) + "[...]";
-        }
-
-        var res = formatted + pairs.join(" ") + ">" + content +
-                "</" + tagName + ">";
-
-        return res.replace(/ contentEditable="inherit"/, "");
-    };
-
-    function Formatio(options) {
-        for (var opt in options) {
-            this[opt] = options[opt];
-        }
-    }
-
-    Formatio.prototype = {
-        functionName: functionName,
-
-        configure: function (options) {
-            return new Formatio(options);
-        },
-
-        constructorName: function (object) {
-            return constructorName(this, object);
-        },
-
-        ascii: function (object, processed, indent) {
-            return ascii(this, object, processed, indent);
-        }
-    };
-
-    return Formatio.prototype;
-});
-/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/
-/*global module, require, __dirname, document*/
-/**
- * Sinon core utilities. For internal use only.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-var sinon = (function (formatio) {
-    var div = typeof document != "undefined" && document.createElement("div");
-    var hasOwn = Object.prototype.hasOwnProperty;
-
-    function isDOMNode(obj) {
-        var success = false;
-
-        try {
-            obj.appendChild(div);
-            success = div.parentNode == obj;
-        } catch (e) {
-            return false;
-        } finally {
-            try {
-                obj.removeChild(div);
-            } catch (e) {
-                // Remove failed, not much we can do about that
-            }
-        }
-
-        return success;
-    }
-
-    function isElement(obj) {
-        return div && obj && obj.nodeType === 1 && isDOMNode(obj);
-    }
-
-    function isFunction(obj) {
-        return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
-    }
-
-    function isReallyNaN(val) {
-        return typeof val === 'number' && isNaN(val);
-    }
-
-    function mirrorProperties(target, source) {
-        for (var prop in source) {
-            if (!hasOwn.call(target, prop)) {
-                target[prop] = source[prop];
-            }
-        }
-    }
-
-    function isRestorable (obj) {
-        return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
-    }
-
-    var sinon = {
-        wrapMethod: function wrapMethod(object, property, method) {
-            if (!object) {
-                throw new TypeError("Should wrap property of object");
-            }
-
-            if (typeof method != "function") {
-                throw new TypeError("Method wrapper should be function");
-            }
-
-            var wrappedMethod = object[property],
-                error;
-
-            if (!isFunction(wrappedMethod)) {
-                error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
-                                    property + " as function");
-            } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
-                error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
-            } else if (wrappedMethod.calledBefore) {
-                var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
-                error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
-            }
-
-            if (error) {
-                if (wrappedMethod && wrappedMethod._stack) {
-                    error.stack += '\n--------------\n' + wrappedMethod._stack;
-                }
-                throw error;
-            }
-
-            // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
-            // when using hasOwn.call on objects from other frames.
-            var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
-            object[property] = method;
-            method.displayName = property;
-            // Set up a stack trace which can be used later to find what line of
-            // code the original method was created on.
-            method._stack = (new Error('Stack Trace for original')).stack;
-
-            method.restore = function () {
-                // For prototype properties try to reset by delete first.
-                // If this fails (ex: localStorage on mobile safari) then force a reset
-                // via direct assignment.
-                if (!owned) {
-                    delete object[property];
-                }
-                if (object[property] === method) {
-                    object[property] = wrappedMethod;
-                }
-            };
-
-            method.restore.sinon = true;
-            mirrorProperties(method, wrappedMethod);
-
-            return method;
-        },
-
-        extend: function extend(target) {
-            for (var i = 1, l = arguments.length; i < l; i += 1) {
-                for (var prop in arguments[i]) {
-                    if (arguments[i].hasOwnProperty(prop)) {
-                        target[prop] = arguments[i][prop];
-                    }
-
-                    // DONT ENUM bug, only care about toString
-                    if (arguments[i].hasOwnProperty("toString") &&
-                        arguments[i].toString != target.toString) {
-                        target.toString = arguments[i].toString;
-                    }
-                }
-            }
-
-            return target;
-        },
-
-        create: function create(proto) {
-            var F = function () {};
-            F.prototype = proto;
-            return new F();
-        },
-
-        deepEqual: function deepEqual(a, b) {
-            if (sinon.match && sinon.match.isMatcher(a)) {
-                return a.test(b);
-            }
-
-            if (typeof a != 'object' || typeof b != 'object') {
-                if (isReallyNaN(a) && isReallyNaN(b)) {
-                    return true;
-                } else {
-                    return a === b;
-                }
-            }
-
-            if (isElement(a) || isElement(b)) {
-                return a === b;
-            }
-
-            if (a === b) {
-                return true;
-            }
-
-            if ((a === null && b !== null) || (a !== null && b === null)) {
-                return false;
-            }
-
-            if (a instanceof RegExp && b instanceof RegExp) {
-              return (a.source === b.source) && (a.global === b.global) &&
-                (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
-            }
-
-            var aString = Object.prototype.toString.call(a);
-            if (aString != Object.prototype.toString.call(b)) {
-                return false;
-            }
-
-            if (aString == "[object Date]") {
-                return a.valueOf() === b.valueOf();
-            }
-
-            var prop, aLength = 0, bLength = 0;
-
-            if (aString == "[object Array]" && a.length !== b.length) {
-                return false;
-            }
-
-            for (prop in a) {
-                aLength += 1;
-
-                if (!(prop in b)) {
-                    return false;
-                }
-
-                if (!deepEqual(a[prop], b[prop])) {
-                    return false;
-                }
-            }
-
-            for (prop in b) {
-                bLength += 1;
-            }
-
-            return aLength == bLength;
-        },
-
-        functionName: function functionName(func) {
-            var name = func.displayName || func.name;
-
-            // Use function decomposition as a last resort to get function
-            // name. Does not rely on function decomposition to work - if it
-            // doesn't debugging will be slightly less informative
-            // (i.e. toString will say 'spy' rather than 'myFunc').
-            if (!name) {
-                var matches = func.toString().match(/function ([^\s\(]+)/);
-                name = matches && matches[1];
-            }
-
-            return name;
-        },
-
-        functionToString: function toString() {
-            if (this.getCall && this.callCount) {
-                var thisValue, prop, i = this.callCount;
-
-                while (i--) {
-                    thisValue = this.getCall(i).thisValue;
-
-                    for (prop in thisValue) {
-                        if (thisValue[prop] === this) {
-                            return prop;
-                        }
-                    }
-                }
-            }
-
-            return this.displayName || "sinon fake";
-        },
-
-        getConfig: function (custom) {
-            var config = {};
-            custom = custom || {};
-            var defaults = sinon.defaultConfig;
-
-            for (var prop in defaults) {
-                if (defaults.hasOwnProperty(prop)) {
-                    config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
-                }
-            }
-
-            return config;
-        },
-
-        format: function (val) {
-            return "" + val;
-        },
-
-        defaultConfig: {
-            injectIntoThis: true,
-            injectInto: null,
-            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-            useFakeTimers: true,
-            useFakeServer: true
-        },
-
-        timesInWords: function timesInWords(count) {
-            return count == 1 && "once" ||
-                count == 2 && "twice" ||
-                count == 3 && "thrice" ||
-                (count || 0) + " times";
-        },
-
-        calledInOrder: function (spies) {
-            for (var i = 1, l = spies.length; i < l; i++) {
-                if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
-                    return false;
-                }
-            }
-
-            return true;
-        },
-
-        orderByFirstCall: function (spies) {
-            return spies.sort(function (a, b) {
-                // uuid, won't ever be equal
-                var aCall = a.getCall(0);
-                var bCall = b.getCall(0);
-                var aId = aCall && aCall.callId || -1;
-                var bId = bCall && bCall.callId || -1;
-
-                return aId < bId ? -1 : 1;
-            });
-        },
-
-        log: function () {},
-
-        logError: function (label, err) {
-            var msg = label + " threw exception: ";
-            sinon.log(msg + "[" + err.name + "] " + err.message);
-            if (err.stack) { sinon.log(err.stack); }
-
-            setTimeout(function () {
-                err.message = msg + err.message;
-                throw err;
-            }, 0);
-        },
-
-        typeOf: function (value) {
-            if (value === null) {
-                return "null";
-            }
-            else if (value === undefined) {
-                return "undefined";
-            }
-            var string = Object.prototype.toString.call(value);
-            return string.substring(8, string.length - 1).toLowerCase();
-        },
-
-        createStubInstance: function (constructor) {
-            if (typeof constructor !== "function") {
-                throw new TypeError("The constructor should be a function.");
-            }
-            return sinon.stub(sinon.create(constructor.prototype));
-        },
-
-        restore: function (object) {
-            if (object !== null && typeof object === "object") {
-                for (var prop in object) {
-                    if (isRestorable(object[prop])) {
-                        object[prop].restore();
-                    }
-                }
-            }
-            else if (isRestorable(object)) {
-                object.restore();
-            }
-        }
-    };
-
-    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var isAMD = typeof define === 'function' && typeof define.amd === 'object' && define.amd;
-
-    function makePublicAPI(require, exports, module) {
-        module.exports = sinon;
-        sinon.spy = require("./sinon/spy");
-        sinon.spyCall = require("./sinon/call");
-        sinon.behavior = require("./sinon/behavior");
-        sinon.stub = require("./sinon/stub");
-        sinon.mock = require("./sinon/mock");
-        sinon.collection = require("./sinon/collection");
-        sinon.assert = require("./sinon/assert");
-        sinon.sandbox = require("./sinon/sandbox");
-        sinon.test = require("./sinon/test");
-        sinon.testCase = require("./sinon/test_case");
-        sinon.match = require("./sinon/match");
-    }
-
-    if (isAMD) {
-        define(makePublicAPI);
-    } else if (isNode) {
-        try {
-            formatio = require("formatio");
-        } catch (e) {}
-        makePublicAPI(require, exports, module);
-    }
-
-    if (formatio) {
-        var formatter = formatio.configure({ quoteStrings: false });
-        sinon.format = function () {
-            return formatter.ascii.apply(formatter, arguments);
-        };
-    } else if (isNode) {
-        try {
-            var util = require("util");
-            sinon.format = function (value) {
-                return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
-            };
-        } catch (e) {
-            /* Node, but no util module - would be very old, but better safe than
-             sorry */
-        }
-    }
-
-    return sinon;
-}(typeof formatio == "object" && formatio));
-
-/* @depend ../sinon.js */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Match functions
- *
- * @author Maximilian Antoni (mail@maxantoni.de)
- * @license BSD
- *
- * Copyright (c) 2012 Maximilian Antoni
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function assertType(value, type, name) {
-        var actual = sinon.typeOf(value);
-        if (actual !== type) {
-            throw new TypeError("Expected type of " + name + " to be " +
-                type + ", but was " + actual);
-        }
-    }
-
-    var matcher = {
-        toString: function () {
-            return this.message;
-        }
-    };
-
-    function isMatcher(object) {
-        return matcher.isPrototypeOf(object);
-    }
-
-    function matchObject(expectation, actual) {
-        if (actual === null || actual === undefined) {
-            return false;
-        }
-        for (var key in expectation) {
-            if (expectation.hasOwnProperty(key)) {
-                var exp = expectation[key];
-                var act = actual[key];
-                if (match.isMatcher(exp)) {
-                    if (!exp.test(act)) {
-                        return false;
-                    }
-                } else if (sinon.typeOf(exp) === "object") {
-                    if (!matchObject(exp, act)) {
-                        return false;
-                    }
-                } else if (!sinon.deepEqual(exp, act)) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    matcher.or = function (m2) {
-        if (!arguments.length) {
-            throw new TypeError("Matcher expected");
-        } else if (!isMatcher(m2)) {
-            m2 = match(m2);
-        }
-        var m1 = this;
-        var or = sinon.create(matcher);
-        or.test = function (actual) {
-            return m1.test(actual) || m2.test(actual);
-        };
-        or.message = m1.message + ".or(" + m2.message + ")";
-        return or;
-    };
-
-    matcher.and = function (m2) {
-        if (!arguments.length) {
-            throw new TypeError("Matcher expected");
-        } else if (!isMatcher(m2)) {
-            m2 = match(m2);
-        }
-        var m1 = this;
-        var and = sinon.create(matcher);
-        and.test = function (actual) {
-            return m1.test(actual) && m2.test(actual);
-        };
-        and.message = m1.message + ".and(" + m2.message + ")";
-        return and;
-    };
-
-    var match = function (expectation, message) {
-        var m = sinon.create(matcher);
-        var type = sinon.typeOf(expectation);
-        switch (type) {
-        case "object":
-            if (typeof expectation.test === "function") {
-                m.test = function (actual) {
-                    return expectation.test(actual) === true;
-                };
-                m.message = "match(" + sinon.functionName(expectation.test) + ")";
-                return m;
-            }
-            var str = [];
-            for (var key in expectation) {
-                if (expectation.hasOwnProperty(key)) {
-                    str.push(key + ": " + expectation[key]);
-                }
-            }
-            m.test = function (actual) {
-                return matchObject(expectation, actual);
-            };
-            m.message = "match(" + str.join(", ") + ")";
-            break;
-        case "number":
-            m.test = function (actual) {
-                return expectation == actual;
-            };
-            break;
-        case "string":
-            m.test = function (actual) {
-                if (typeof actual !== "string") {
-                    return false;
-                }
-                return actual.indexOf(expectation) !== -1;
-            };
-            m.message = "match(\"" + expectation + "\")";
-            break;
-        case "regexp":
-            m.test = function (actual) {
-                if (typeof actual !== "string") {
-                    return false;
-                }
-                return expectation.test(actual);
-            };
-            break;
-        case "function":
-            m.test = expectation;
-            if (message) {
-                m.message = message;
-            } else {
-                m.message = "match(" + sinon.functionName(expectation) + ")";
-            }
-            break;
-        default:
-            m.test = function (actual) {
-              return sinon.deepEqual(expectation, actual);
-            };
-        }
-        if (!m.message) {
-            m.message = "match(" + expectation + ")";
-        }
-        return m;
-    };
-
-    match.isMatcher = isMatcher;
-
-    match.any = match(function () {
-        return true;
-    }, "any");
-
-    match.defined = match(function (actual) {
-        return actual !== null && actual !== undefined;
-    }, "defined");
-
-    match.truthy = match(function (actual) {
-        return !!actual;
-    }, "truthy");
-
-    match.falsy = match(function (actual) {
-        return !actual;
-    }, "falsy");
-
-    match.same = function (expectation) {
-        return match(function (actual) {
-            return expectation === actual;
-        }, "same(" + expectation + ")");
-    };
-
-    match.typeOf = function (type) {
-        assertType(type, "string", "type");
-        return match(function (actual) {
-            return sinon.typeOf(actual) === type;
-        }, "typeOf(\"" + type + "\")");
-    };
-
-    match.instanceOf = function (type) {
-        assertType(type, "function", "type");
-        return match(function (actual) {
-            return actual instanceof type;
-        }, "instanceOf(" + sinon.functionName(type) + ")");
-    };
-
-    function createPropertyMatcher(propertyTest, messagePrefix) {
-        return function (property, value) {
-            assertType(property, "string", "property");
-            var onlyProperty = arguments.length === 1;
-            var message = messagePrefix + "(\"" + property + "\"";
-            if (!onlyProperty) {
-                message += ", " + value;
-            }
-            message += ")";
-            return match(function (actual) {
-                if (actual === undefined || actual === null ||
-                        !propertyTest(actual, property)) {
-                    return false;
-                }
-                return onlyProperty || sinon.deepEqual(value, actual[property]);
-            }, message);
-        };
-    }
-
-    match.has = createPropertyMatcher(function (actual, property) {
-        if (typeof actual === "object") {
-            return property in actual;
-        }
-        return actual[property] !== undefined;
-    }, "has");
-
-    match.hasOwn = createPropertyMatcher(function (actual, property) {
-        return actual.hasOwnProperty(property);
-    }, "hasOwn");
-
-    match.bool = match.typeOf("boolean");
-    match.number = match.typeOf("number");
-    match.string = match.typeOf("string");
-    match.object = match.typeOf("object");
-    match.func = match.typeOf("function");
-    match.array = match.typeOf("array");
-    match.regexp = match.typeOf("regexp");
-    match.date = match.typeOf("date");
-
-    sinon.match = match;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = match; });
-    } else if (commonJSModule) {
-        module.exports = match;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
-  * @depend ../sinon.js
-  * @depend match.js
-  */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
-  * Spy calls
-  *
-  * @author Christian Johansen (christian@cjohansen.no)
-  * @author Maximilian Antoni (mail@maxantoni.de)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  * Copyright (c) 2013 Maximilian Antoni
-  */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function throwYieldError(proxy, text, args) {
-        var msg = sinon.functionName(proxy) + text;
-        if (args.length) {
-            msg += " Received [" + slice.call(args).join(", ") + "]";
-        }
-        throw new Error(msg);
-    }
-
-    var slice = Array.prototype.slice;
-
-    var callProto = {
-        calledOn: function calledOn(thisValue) {
-            if (sinon.match && sinon.match.isMatcher(thisValue)) {
-                return thisValue.test(this.thisValue);
-            }
-            return this.thisValue === thisValue;
-        },
-
-        calledWith: function calledWith() {
-            for (var i = 0, l = arguments.length; i < l; i += 1) {
-                if (!sinon.deepEqual(arguments[i], this.args[i])) {
-                    return false;
-                }
-            }
-
-            return true;
-        },
-
-        calledWithMatch: function calledWithMatch() {
-            for (var i = 0, l = arguments.length; i < l; i += 1) {
-                var actual = this.args[i];
-                var expectation = arguments[i];
-                if (!sinon.match || !sinon.match(expectation).test(actual)) {
-                    return false;
-                }
-            }
-            return true;
-        },
-
-        calledWithExactly: function calledWithExactly() {
-            return arguments.length == this.args.length &&
-                this.calledWith.apply(this, arguments);
-        },
-
-        notCalledWith: function notCalledWith() {
-            return !this.calledWith.apply(this, arguments);
-        },
-
-        notCalledWithMatch: function notCalledWithMatch() {
-            return !this.calledWithMatch.apply(this, arguments);
-        },
-
-        returned: function returned(value) {
-            return sinon.deepEqual(value, this.returnValue);
-        },
-
-        threw: function threw(error) {
-            if (typeof error === "undefined" || !this.exception) {
-                return !!this.exception;
-            }
-
-            return this.exception === error || this.exception.name === error;
-        },
-
-        calledWithNew: function calledWithNew() {
-            return this.proxy.prototype && this.thisValue instanceof this.proxy;
-        },
-
-        calledBefore: function (other) {
-            return this.callId < other.callId;
-        },
-
-        calledAfter: function (other) {
-            return this.callId > other.callId;
-        },
-
-        callArg: function (pos) {
-            this.args[pos]();
-        },
-
-        callArgOn: function (pos, thisValue) {
-            this.args[pos].apply(thisValue);
-        },
-
-        callArgWith: function (pos) {
-            this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
-        },
-
-        callArgOnWith: function (pos, thisValue) {
-            var args = slice.call(arguments, 2);
-            this.args[pos].apply(thisValue, args);
-        },
-
-        "yield": function () {
-            this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
-        },
-
-        yieldOn: function (thisValue) {
-            var args = this.args;
-            for (var i = 0, l = args.length; i < l; ++i) {
-                if (typeof args[i] === "function") {
-                    args[i].apply(thisValue, slice.call(arguments, 1));
-                    return;
-                }
-            }
-            throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
-        },
-
-        yieldTo: function (prop) {
-            this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
-        },
-
-        yieldToOn: function (prop, thisValue) {
-            var args = this.args;
-            for (var i = 0, l = args.length; i < l; ++i) {
-                if (args[i] && typeof args[i][prop] === "function") {
-                    args[i][prop].apply(thisValue, slice.call(arguments, 2));
-                    return;
-                }
-            }
-            throwYieldError(this.proxy, " cannot yield to '" + prop +
-                "' since no callback was passed.", args);
-        },
-
-        toString: function () {
-            var callStr = this.proxy.toString() + "(";
-            var args = [];
-
-            for (var i = 0, l = this.args.length; i < l; ++i) {
-                args.push(sinon.format(this.args[i]));
-            }
-
-            callStr = callStr + args.join(", ") + ")";
-
-            if (typeof this.returnValue != "undefined") {
-                callStr += " => " + sinon.format(this.returnValue);
-            }
-
-            if (this.exception) {
-                callStr += " !" + this.exception.name;
-
-                if (this.exception.message) {
-                    callStr += "(" + this.exception.message + ")";
-                }
-            }
-
-            return callStr;
-        }
-    };
-
-    callProto.invokeCallback = callProto.yield;
-
-    function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
-        if (typeof id !== "number") {
-            throw new TypeError("Call id is not a number");
-        }
-        var proxyCall = sinon.create(callProto);
-        proxyCall.proxy = spy;
-        proxyCall.thisValue = thisValue;
-        proxyCall.args = args;
-        proxyCall.returnValue = returnValue;
-        proxyCall.exception = exception;
-        proxyCall.callId = id;
-
-        return proxyCall;
-    }
-    createSpyCall.toString = callProto.toString; // used by mocks
-
-    sinon.spyCall = createSpyCall;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = createSpyCall; });
-    } else if (commonJSModule) {
-        module.exports = createSpyCall;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-
-/**
-  * @depend ../sinon.js
-  * @depend call.js
-  */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
-  * Spy functions
-  *
-  * @author Christian Johansen (christian@cjohansen.no)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var push = Array.prototype.push;
-    var slice = Array.prototype.slice;
-    var callId = 0;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function spy(object, property) {
-        if (!property && typeof object == "function") {
-            return spy.create(object);
-        }
-
-        if (!object && !property) {
-            return spy.create(function () { });
-        }
-
-        var method = object[property];
-        return sinon.wrapMethod(object, property, spy.create(method));
-    }
-
-    function matchingFake(fakes, args, strict) {
-        if (!fakes) {
-            return;
-        }
-
-        for (var i = 0, l = fakes.length; i < l; i++) {
-            if (fakes[i].matches(args, strict)) {
-                return fakes[i];
-            }
-        }
-    }
-
-    function incrementCallCount() {
-        this.called = true;
-        this.callCount += 1;
-        this.notCalled = false;
-        this.calledOnce = this.callCount == 1;
-        this.calledTwice = this.callCount == 2;
-        this.calledThrice = this.callCount == 3;
-    }
-
-    function createCallProperties() {
-        this.firstCall = this.getCall(0);
-        this.secondCall = this.getCall(1);
-        this.thirdCall = this.getCall(2);
-        this.lastCall = this.getCall(this.callCount - 1);
-    }
-
-    var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
-    function createProxy(func) {
-        // Retain the function length:
-        var p;
-        if (func.length) {
-            eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) +
-                ") { return p.invoke(func, this, slice.call(arguments)); });");
-        }
-        else {
-            p = function proxy() {
-                return p.invoke(func, this, slice.call(arguments));
-            };
-        }
-        return p;
-    }
-
-    var uuid = 0;
-
-    // Public API
-    var spyApi = {
-        reset: function () {
-            this.called = false;
-            this.notCalled = true;
-            this.calledOnce = false;
-            this.calledTwice = false;
-            this.calledThrice = false;
-            this.callCount = 0;
-            this.firstCall = null;
-            this.secondCall = null;
-            this.thirdCall = null;
-            this.lastCall = null;
-            this.args = [];
-            this.returnValues = [];
-            this.thisValues = [];
-            this.exceptions = [];
-            this.callIds = [];
-            if (this.fakes) {
-                for (var i = 0; i < this.fakes.length; i++) {
-                    this.fakes[i].reset();
-                }
-            }
-        },
-
-        create: function create(func) {
-            var name;
-
-            if (typeof func != "function") {
-                func = function () { };
-            } else {
-                name = sinon.functionName(func);
-            }
-
-            var proxy = createProxy(func);
-
-            sinon.extend(proxy, spy);
-            delete proxy.create;
-            sinon.extend(proxy, func);
-
-            proxy.reset();
-            proxy.prototype = func.prototype;
-            proxy.displayName = name || "spy";
-            proxy.toString = sinon.functionToString;
-            proxy._create = sinon.spy.create;
-            proxy.id = "spy#" + uuid++;
-
-            return proxy;
-        },
-
-        invoke: function invoke(func, thisValue, args) {
-            var matching = matchingFake(this.fakes, args);
-            var exception, returnValue;
-
-            incrementCallCount.call(this);
-            push.call(this.thisValues, thisValue);
-            push.call(this.args, args);
-            push.call(this.callIds, callId++);
-
-            // Make call properties available from within the spied function:
-            createCallProperties.call(this);
-
-            try {
-                if (matching) {
-                    returnValue = matching.invoke(func, thisValue, args);
-                } else {
-                    returnValue = (this.func || func).apply(thisValue, args);
-                }
-
-                var thisCall = this.getCall(this.callCount - 1);
-                if (thisCall.calledWithNew() && typeof returnValue !== 'object') {
-                    returnValue = thisValue;
-                }
-            } catch (e) {
-                exception = e;
-            }
-
-            push.call(this.exceptions, exception);
-            push.call(this.returnValues, returnValue);
-
-            // Make return value and exception available in the calls:
-            createCallProperties.call(this);
-
-            if (exception !== undefined) {
-                throw exception;
-            }
-
-            return returnValue;
-        },
-
-        named: function named(name) {
-            this.displayName = name;
-            return this;
-        },
-
-        getCall: function getCall(i) {
-            if (i < 0 || i >= this.callCount) {
-                return null;
-            }
-
-            return sinon.spyCall(this, this.thisValues[i], this.args[i],
-                                    this.returnValues[i], this.exceptions[i],
-                                    this.callIds[i]);
-        },
-
-        getCalls: function () {
-            var calls = [];
-            var i;
-
-            for (i = 0; i < this.callCount; i++) {
-                calls.push(this.getCall(i));
-            }
-
-            return calls;
-        },
-
-        calledBefore: function calledBefore(spyFn) {
-            if (!this.called) {
-                return false;
-            }
-
-            if (!spyFn.called) {
-                return true;
-            }
-
-            return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
-        },
-
-        calledAfter: function calledAfter(spyFn) {
-            if (!this.called || !spyFn.called) {
-                return false;
-            }
-
-            return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
-        },
-
-        withArgs: function () {
-            var args = slice.call(arguments);
-
-            if (this.fakes) {
-                var match = matchingFake(this.fakes, args, true);
-
-                if (match) {
-                    return match;
-                }
-            } else {
-                this.fakes = [];
-            }
-
-            var original = this;
-            var fake = this._create();
-            fake.matchingAguments = args;
-            fake.parent = this;
-            push.call(this.fakes, fake);
-
-            fake.withArgs = function () {
-                return original.withArgs.apply(original, arguments);
-            };
-
-            for (var i = 0; i < this.args.length; i++) {
-                if (fake.matches(this.args[i])) {
-                    incrementCallCount.call(fake);
-                    push.call(fake.thisValues, this.thisValues[i]);
-                    push.call(fake.args, this.args[i]);
-                    push.call(fake.returnValues, this.returnValues[i]);
-                    push.call(fake.exceptions, this.exceptions[i]);
-                    push.call(fake.callIds, this.callIds[i]);
-                }
-            }
-            createCallProperties.call(fake);
-
-            return fake;
-        },
-
-        matches: function (args, strict) {
-            var margs = this.matchingAguments;
-
-            if (margs.length <= args.length &&
-                sinon.deepEqual(margs, args.slice(0, margs.length))) {
-                return !strict || margs.length == args.length;
-            }
-        },
-
-        printf: function (format) {
-            var spy = this;
-            var args = slice.call(arguments, 1);
-            var formatter;
-
-            return (format || "").replace(/%(.)/g, function (match, specifyer) {
-                formatter = spyApi.formatters[specifyer];
-
-                if (typeof formatter == "function") {
-                    return formatter.call(null, spy, args);
-                } else if (!isNaN(parseInt(specifyer, 10))) {
-                    return sinon.format(args[specifyer - 1]);
-                }
-
-                return "%" + specifyer;
-            });
-        }
-    };
-
-    function delegateToCalls(method, matchAny, actual, notCalled) {
-        spyApi[method] = function () {
-            if (!this.called) {
-                if (notCalled) {
-                    return notCalled.apply(this, arguments);
-                }
-                return false;
-            }
-
-            var currentCall;
-            var matches = 0;
-
-            for (var i = 0, l = this.callCount; i < l; i += 1) {
-                currentCall = this.getCall(i);
-
-                if (currentCall[actual || method].apply(currentCall, arguments)) {
-                    matches += 1;
-
-                    if (matchAny) {
-                        return true;
-                    }
-                }
-            }
-
-            return matches === this.callCount;
-        };
-    }
-
-    delegateToCalls("calledOn", true);
-    delegateToCalls("alwaysCalledOn", false, "calledOn");
-    delegateToCalls("calledWith", true);
-    delegateToCalls("calledWithMatch", true);
-    delegateToCalls("alwaysCalledWith", false, "calledWith");
-    delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
-    delegateToCalls("calledWithExactly", true);
-    delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
-    delegateToCalls("neverCalledWith", false, "notCalledWith",
-        function () { return true; });
-    delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch",
-        function () { return true; });
-    delegateToCalls("threw", true);
-    delegateToCalls("alwaysThrew", false, "threw");
-    delegateToCalls("returned", true);
-    delegateToCalls("alwaysReturned", false, "returned");
-    delegateToCalls("calledWithNew", true);
-    delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
-    delegateToCalls("callArg", false, "callArgWith", function () {
-        throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
-    });
-    spyApi.callArgWith = spyApi.callArg;
-    delegateToCalls("callArgOn", false, "callArgOnWith", function () {
-        throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
-    });
-    spyApi.callArgOnWith = spyApi.callArgOn;
-    delegateToCalls("yield", false, "yield", function () {
-        throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
-    });
-    // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
-    spyApi.invokeCallback = spyApi.yield;
-    delegateToCalls("yieldOn", false, "yieldOn", function () {
-        throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
-    });
-    delegateToCalls("yieldTo", false, "yieldTo", function (property) {
-        throw new Error(this.toString() + " cannot yield to '" + property +
-            "' since it was not yet invoked.");
-    });
-    delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
-        throw new Error(this.toString() + " cannot yield to '" + property +
-            "' since it was not yet invoked.");
-    });
-
-    spyApi.formatters = {
-        "c": function (spy) {
-            return sinon.timesInWords(spy.callCount);
-        },
-
-        "n": function (spy) {
-            return spy.toString();
-        },
-
-        "C": function (spy) {
-            var calls = [];
-
-            for (var i = 0, l = spy.callCount; i < l; ++i) {
-                var stringifiedCall = "    " + spy.getCall(i).toString();
-                if (/\n/.test(calls[i - 1])) {
-                    stringifiedCall = "\n" + stringifiedCall;
-                }
-                push.call(calls, stringifiedCall);
-            }
-
-            return calls.length > 0 ? "\n" + calls.join("\n") : "";
-        },
-
-        "t": function (spy) {
-            var objects = [];
-
-            for (var i = 0, l = spy.callCount; i < l; ++i) {
-                push.call(objects, sinon.format(spy.thisValues[i]));
-            }
-
-            return objects.join(", ");
-        },
-
-        "*": function (spy, args) {
-            var formatted = [];
-
-            for (var i = 0, l = args.length; i < l; ++i) {
-                push.call(formatted, sinon.format(args[i]));
-            }
-
-            return formatted.join(", ");
-        }
-    };
-
-    sinon.extend(spy, spyApi);
-
-    spy.spyCall = sinon.spyCall;
-    sinon.spy = spy;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = spy; });
-    } else if (commonJSModule) {
-        module.exports = spy;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global module, require, sinon, process, setImmediate, setTimeout*/
-/**
- * Stub behavior
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @author Tim Fischbach (mail@timfischbach.de)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    var slice = Array.prototype.slice;
-    var join = Array.prototype.join;
-    var proto;
-
-    var nextTick = (function () {
-        if (typeof process === "object" && typeof process.nextTick === "function") {
-            return process.nextTick;
-        } else if (typeof setImmediate === "function") {
-            return setImmediate;
-        } else {
-            return function (callback) {
-                setTimeout(callback, 0);
-            };
-        }
-    })();
-
-    function throwsException(error, message) {
-        if (typeof error == "string") {
-            this.exception = new Error(message || "");
-            this.exception.name = error;
-        } else if (!error) {
-            this.exception = new Error("Error");
-        } else {
-            this.exception = error;
-        }
-
-        return this;
-    }
-
-    function getCallback(behavior, args) {
-        var callArgAt = behavior.callArgAt;
-
-        if (callArgAt < 0) {
-            var callArgProp = behavior.callArgProp;
-
-            for (var i = 0, l = args.length; i < l; ++i) {
-                if (!callArgProp && typeof args[i] == "function") {
-                    return args[i];
-                }
-
-                if (callArgProp && args[i] &&
-                    typeof args[i][callArgProp] == "function") {
-                    return args[i][callArgProp];
-                }
-            }
-
-            return null;
-        }
-
-        return args[callArgAt];
-    }
-
-    function getCallbackError(behavior, func, args) {
-        if (behavior.callArgAt < 0) {
-            var msg;
-
-            if (behavior.callArgProp) {
-                msg = sinon.functionName(behavior.stub) +
-                    " expected to yield to '" + behavior.callArgProp +
-                    "', but no object with such a property was passed.";
-            } else {
-                msg = sinon.functionName(behavior.stub) +
-                    " expected to yield, but no callback was passed.";
-            }
-
-            if (args.length > 0) {
-                msg += " Received [" + join.call(args, ", ") + "]";
-            }
-
-            return msg;
-        }
-
-        return "argument at index " + behavior.callArgAt + " is not a function: " + func;
-    }
-
-    function callCallback(behavior, args) {
-        if (typeof behavior.callArgAt == "number") {
-            var func = getCallback(behavior, args);
-
-            if (typeof func != "function") {
-                throw new TypeError(getCallbackError(behavior, func, args));
-            }
-
-            if (behavior.callbackAsync) {
-                nextTick(function() {
-                    func.apply(behavior.callbackContext, behavior.callbackArguments);
-                });
-            } else {
-                func.apply(behavior.callbackContext, behavior.callbackArguments);
-            }
-        }
-    }
-
-    proto = {
-        create: function(stub) {
-            var behavior = sinon.extend({}, sinon.behavior);
-            delete behavior.create;
-            behavior.stub = stub;
-
-            return behavior;
-        },
-
-        isPresent: function() {
-            return (typeof this.callArgAt == 'number' ||
-                    this.exception ||
-                    typeof this.returnArgAt == 'number' ||
-                    this.returnThis ||
-                    this.returnValueDefined);
-        },
-
-        invoke: function(context, args) {
-            callCallback(this, args);
-
-            if (this.exception) {
-                throw this.exception;
-            } else if (typeof this.returnArgAt == 'number') {
-                return args[this.returnArgAt];
-            } else if (this.returnThis) {
-                return context;
-            }
-
-            return this.returnValue;
-        },
-
-        onCall: function(index) {
-            return this.stub.onCall(index);
-        },
-
-        onFirstCall: function() {
-            return this.stub.onFirstCall();
-        },
-
-        onSecondCall: function() {
-            return this.stub.onSecondCall();
-        },
-
-        onThirdCall: function() {
-            return this.stub.onThirdCall();
-        },
-
-        withArgs: function(/* arguments */) {
-            throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. ' +
-                            'Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.');
-        },
-
-        callsArg: function callsArg(pos) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = [];
-            this.callbackContext = undefined;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        callsArgOn: function callsArgOn(pos, context) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = [];
-            this.callbackContext = context;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        callsArgWith: function callsArgWith(pos) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = slice.call(arguments, 1);
-            this.callbackContext = undefined;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        callsArgOnWith: function callsArgWith(pos, context) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = slice.call(arguments, 2);
-            this.callbackContext = context;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yields: function () {
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 0);
-            this.callbackContext = undefined;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yieldsOn: function (context) {
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 1);
-            this.callbackContext = context;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yieldsTo: function (prop) {
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 1);
-            this.callbackContext = undefined;
-            this.callArgProp = prop;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yieldsToOn: function (prop, context) {
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 2);
-            this.callbackContext = context;
-            this.callArgProp = prop;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-
-        "throws": throwsException,
-        throwsException: throwsException,
-
-        returns: function returns(value) {
-            this.returnValue = value;
-            this.returnValueDefined = true;
-
-            return this;
-        },
-
-        returnsArg: function returnsArg(pos) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-
-            this.returnArgAt = pos;
-
-            return this;
-        },
-
-        returnsThis: function returnsThis() {
-            this.returnThis = true;
-
-            return this;
-        }
-    };
-
-    // create asynchronous versions of callsArg* and yields* methods
-    for (var method in proto) {
-        // need to avoid creating anotherasync versions of the newly added async methods
-        if (proto.hasOwnProperty(method) &&
-            method.match(/^(callsArg|yields)/) &&
-            !method.match(/Async/)) {
-            proto[method + 'Async'] = (function (syncFnName) {
-                return function () {
-                    var result = this[syncFnName].apply(this, arguments);
-                    this.callbackAsync = true;
-                    return result;
-                };
-            })(method);
-        }
-    }
-
-    sinon.behavior = proto;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = proto; });
-    } else if (commonJSModule) {
-        module.exports = proto;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend spy.js
- * @depend behavior.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global module, require, sinon*/
-/**
- * Stub functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function stub(object, property, func) {
-        if (!!func && typeof func != "function") {
-            throw new TypeError("Custom stub should be function");
-        }
-
-        var wrapper;
-
-        if (func) {
-            wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
-        } else {
-            wrapper = stub.create();
-        }
-
-        if (!object && typeof property === "undefined") {
-            return sinon.stub.create();
-        }
-
-        if (typeof property === "undefined" && typeof object == "object") {
-            for (var prop in object) {
-                if (typeof object[prop] === "function") {
-                    stub(object, prop);
-                }
-            }
-
-            return object;
-        }
-
-        return sinon.wrapMethod(object, property, wrapper);
-    }
-
-    function getDefaultBehavior(stub) {
-        return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub);
-    }
-
-    function getParentBehaviour(stub) {
-        return (stub.parent && getCurrentBehavior(stub.parent));
-    }
-
-    function getCurrentBehavior(stub) {
-        var behavior = stub.behaviors[stub.callCount - 1];
-        return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub);
-    }
-
-    var uuid = 0;
-
-    sinon.extend(stub, (function () {
-        var proto = {
-            create: function create() {
-                var functionStub = function () {
-                    return getCurrentBehavior(functionStub).invoke(this, arguments);
-                };
-
-                functionStub.id = "stub#" + uuid++;
-                var orig = functionStub;
-                functionStub = sinon.spy.create(functionStub);
-                functionStub.func = orig;
-
-                sinon.extend(functionStub, stub);
-                functionStub._create = sinon.stub.create;
-                functionStub.displayName = "stub";
-                functionStub.toString = sinon.functionToString;
-
-                functionStub.defaultBehavior = null;
-                functionStub.behaviors = [];
-
-                return functionStub;
-            },
-
-            resetBehavior: function () {
-                var i;
-
-                this.defaultBehavior = null;
-                this.behaviors = [];
-
-                delete this.returnValue;
-                delete this.returnArgAt;
-                this.returnThis = false;
-
-                if (this.fakes) {
-                    for (i = 0; i < this.fakes.length; i++) {
-                        this.fakes[i].resetBehavior();
-                    }
-                }
-            },
-
-            onCall: function(index) {
-                if (!this.behaviors[index]) {
-                    this.behaviors[index] = sinon.behavior.create(this);
-                }
-
-                return this.behaviors[index];
-            },
-
-            onFirstCall: function() {
-                return this.onCall(0);
-            },
-
-            onSecondCall: function() {
-                return this.onCall(1);
-            },
-
-            onThirdCall: function() {
-                return this.onCall(2);
-            }
-        };
-
-        for (var method in sinon.behavior) {
-            if (sinon.behavior.hasOwnProperty(method) &&
-                !proto.hasOwnProperty(method) &&
-                method != 'create' &&
-                method != 'withArgs' &&
-                method != 'invoke') {
-                proto[method] = (function(behaviorMethod) {
-                    return function() {
-                        this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
-                        this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
-                        return this;
-                    };
-                }(method));
-            }
-        }
-
-        return proto;
-    }()));
-
-    sinon.stub = stub;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = stub; });
-    } else if (commonJSModule) {
-        module.exports = stub;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- */
-/*jslint eqeqeq: false, onevar: false, nomen: false*/
-/*global module, require, sinon*/
-/**
- * Mock functions.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var push = [].push;
-    var match;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    match = sinon.match;
-
-    if (!match && commonJSModule) {
-        match = require("./match");
-    }
-
-    function mock(object) {
-        if (!object) {
-            return sinon.expectation.create("Anonymous mock");
-        }
-
-        return mock.create(object);
-    }
-
-    sinon.mock = mock;
-
-    sinon.extend(mock, (function () {
-        function each(collection, callback) {
-            if (!collection) {
-                return;
-            }
-
-            for (var i = 0, l = collection.length; i < l; i += 1) {
-                callback(collection[i]);
-            }
-        }
-
-        return {
-            create: function create(object) {
-                if (!object) {
-                    throw new TypeError("object is null");
-                }
-
-                var mockObject = sinon.extend({}, mock);
-                mockObject.object = object;
-                delete mockObject.create;
-
-                return mockObject;
-            },
-
-            expects: function expects(method) {
-                if (!method) {
-                    throw new TypeError("method is falsy");
-                }
-
-                if (!this.expectations) {
-                    this.expectations = {};
-                    this.proxies = [];
-                }
-
-                if (!this.expectations[method]) {
-                    this.expectations[method] = [];
-                    var mockObject = this;
-
-                    sinon.wrapMethod(this.object, method, function () {
-                        return mockObject.invokeMethod(method, this, arguments);
-                    });
-
-                    push.call(this.proxies, method);
-                }
-
-                var expectation = sinon.expectation.create(method);
-                push.call(this.expectations[method], expectation);
-
-                return expectation;
-            },
-
-            restore: function restore() {
-                var object = this.object;
-
-                each(this.proxies, function (proxy) {
-                    if (typeof object[proxy].restore == "function") {
-                        object[proxy].restore();
-                    }
-                });
-            },
-
-            verify: function verify() {
-                var expectations = this.expectations || {};
-                var messages = [], met = [];
-
-                each(this.proxies, function (proxy) {
-                    each(expectations[proxy], function (expectation) {
-                        if (!expectation.met()) {
-                            push.call(messages, expectation.toString());
-                        } else {
-                            push.call(met, expectation.toString());
-                        }
-                    });
-                });
-
-                this.restore();
-
-                if (messages.length > 0) {
-                    sinon.expectation.fail(messages.concat(met).join("\n"));
-                } else {
-                    sinon.expectation.pass(messages.concat(met).join("\n"));
-                }
-
-                return true;
-            },
-
-            invokeMethod: function invokeMethod(method, thisValue, args) {
-                var expectations = this.expectations && this.expectations[method];
-                var length = expectations && expectations.length || 0, i;
-
-                for (i = 0; i < length; i += 1) {
-                    if (!expectations[i].met() &&
-                        expectations[i].allowsCall(thisValue, args)) {
-                        return expectations[i].apply(thisValue, args);
-                    }
-                }
-
-                var messages = [], available, exhausted = 0;
-
-                for (i = 0; i < length; i += 1) {
-                    if (expectations[i].allowsCall(thisValue, args)) {
-                        available = available || expectations[i];
-                    } else {
-                        exhausted += 1;
-                    }
-                    push.call(messages, "    " + expectations[i].toString());
-                }
-
-                if (exhausted === 0) {
-                    return available.apply(thisValue, args);
-                }
-
-                messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
-                    proxy: method,
-                    args: args
-                }));
-
-                sinon.expectation.fail(messages.join("\n"));
-            }
-        };
-    }()));
-
-    var times = sinon.timesInWords;
-
-    sinon.expectation = (function () {
-        var slice = Array.prototype.slice;
-        var _invoke = sinon.spy.invoke;
-
-        function callCountInWords(callCount) {
-            if (callCount == 0) {
-                return "never called";
-            } else {
-                return "called " + times(callCount);
-            }
-        }
-
-        function expectedCallCountInWords(expectation) {
-            var min = expectation.minCalls;
-            var max = expectation.maxCalls;
-
-            if (typeof min == "number" && typeof max == "number") {
-                var str = times(min);
-
-                if (min != max) {
-                    str = "at least " + str + " and at most " + times(max);
-                }
-
-                return str;
-            }
-
-            if (typeof min == "number") {
-                return "at least " + times(min);
-            }
-
-            return "at most " + times(max);
-        }
-
-        function receivedMinCalls(expectation) {
-            var hasMinLimit = typeof expectation.minCalls == "number";
-            return !hasMinLimit || expectation.callCount >= expectation.minCalls;
-        }
-
-        function receivedMaxCalls(expectation) {
-            if (typeof expectation.maxCalls != "number") {
-                return false;
-            }
-
-            return expectation.callCount == expectation.maxCalls;
-        }
-
-        function verifyMatcher(possibleMatcher, arg){
-            if (match && match.isMatcher(possibleMatcher)) {
-                return possibleMatcher.test(arg);
-            } else {
-                return true;
-            }
-        }
-
-        return {
-            minCalls: 1,
-            maxCalls: 1,
-
-            create: function create(methodName) {
-                var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
-                delete expectation.create;
-                expectation.method = methodName;
-
-                return expectation;
-            },
-
-            invoke: function invoke(func, thisValue, args) {
-                this.verifyCallAllowed(thisValue, args);
-
-                return _invoke.apply(this, arguments);
-            },
-
-            atLeast: function atLeast(num) {
-                if (typeof num != "number") {
-                    throw new TypeError("'" + num + "' is not number");
-                }
-
-                if (!this.limitsSet) {
-                    this.maxCalls = null;
-                    this.limitsSet = true;
-                }
-
-                this.minCalls = num;
-
-                return this;
-            },
-
-            atMost: function atMost(num) {
-                if (typeof num != "number") {
-                    throw new TypeError("'" + num + "' is not number");
-                }
-
-                if (!this.limitsSet) {
-                    this.minCalls = null;
-                    this.limitsSet = true;
-                }
-
-                this.maxCalls = num;
-
-                return this;
-            },
-
-            never: function never() {
-                return this.exactly(0);
-            },
-
-            once: function once() {
-                return this.exactly(1);
-            },
-
-            twice: function twice() {
-                return this.exactly(2);
-            },
-
-            thrice: function thrice() {
-                return this.exactly(3);
-            },
-
-            exactly: function exactly(num) {
-                if (typeof num != "number") {
-                    throw new TypeError("'" + num + "' is not a number");
-                }
-
-                this.atLeast(num);
-                return this.atMost(num);
-            },
-
-            met: function met() {
-                return !this.failed && receivedMinCalls(this);
-            },
-
-            verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
-                if (receivedMaxCalls(this)) {
-                    this.failed = true;
-                    sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
-                }
-
-                if ("expectedThis" in this && this.expectedThis !== thisValue) {
-                    sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
-                        this.expectedThis);
-                }
-
-                if (!("expectedArguments" in this)) {
-                    return;
-                }
-
-                if (!args) {
-                    sinon.expectation.fail(this.method + " received no arguments, expected " +
-                        sinon.format(this.expectedArguments));
-                }
-
-                if (args.length < this.expectedArguments.length) {
-                    sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
-                        "), expected " + sinon.format(this.expectedArguments));
-                }
-
-                if (this.expectsExactArgCount &&
-                    args.length != this.expectedArguments.length) {
-                    sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
-                        "), expected " + sinon.format(this.expectedArguments));
-                }
-
-                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
-
-                    if (!verifyMatcher(this.expectedArguments[i],args[i])) {
-                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
-                            ", didn't match " + this.expectedArguments.toString());
-                    }
-
-                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
-                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
-                            ", expected " + sinon.format(this.expectedArguments));
-                    }
-                }
-            },
-
-            allowsCall: function allowsCall(thisValue, args) {
-                if (this.met() && receivedMaxCalls(this)) {
-                    return false;
-                }
-
-                if ("expectedThis" in this && this.expectedThis !== thisValue) {
-                    return false;
-                }
-
-                if (!("expectedArguments" in this)) {
-                    return true;
-                }
-
-                args = args || [];
-
-                if (args.length < this.expectedArguments.length) {
-                    return false;
-                }
-
-                if (this.expectsExactArgCount &&
-                    args.length != this.expectedArguments.length) {
-                    return false;
-                }
-
-                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
-                    if (!verifyMatcher(this.expectedArguments[i],args[i])) {
-                        return false;
-                    }
-
-                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
-                        return false;
-                    }
-                }
-
-                return true;
-            },
-
-            withArgs: function withArgs() {
-                this.expectedArguments = slice.call(arguments);
-                return this;
-            },
-
-            withExactArgs: function withExactArgs() {
-                this.withArgs.apply(this, arguments);
-                this.expectsExactArgCount = true;
-                return this;
-            },
-
-            on: function on(thisValue) {
-                this.expectedThis = thisValue;
-                return this;
-            },
-
-            toString: function () {
-                var args = (this.expectedArguments || []).slice();
-
-                if (!this.expectsExactArgCount) {
-                    push.call(args, "[...]");
-                }
-
-                var callStr = sinon.spyCall.toString.call({
-                    proxy: this.method || "anonymous mock expectation",
-                    args: args
-                });
-
-                var message = callStr.replace(", [...", "[, ...") + " " +
-                    expectedCallCountInWords(this);
-
-                if (this.met()) {
-                    return "Expectation met: " + message;
-                }
-
-                return "Expected " + message + " (" +
-                    callCountInWords(this.callCount) + ")";
-            },
-
-            verify: function verify() {
-                if (!this.met()) {
-                    sinon.expectation.fail(this.toString());
-                } else {
-                    sinon.expectation.pass(this.toString());
-                }
-
-                return true;
-            },
-
-            pass: function(message) {
-              sinon.assert.pass(message);
-            },
-            fail: function (message) {
-                var exception = new Error(message);
-                exception.name = "ExpectationError";
-
-                throw exception;
-            }
-        };
-    }());
-
-    sinon.mock = mock;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = mock; });
-    } else if (commonJSModule) {
-        module.exports = mock;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- * @depend mock.js
- */
-/*jslint eqeqeq: false, onevar: false, forin: true*/
-/*global module, require, sinon*/
-/**
- * Collections of stubs, spies and mocks.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var push = [].push;
-    var hasOwnProperty = Object.prototype.hasOwnProperty;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function getFakes(fakeCollection) {
-        if (!fakeCollection.fakes) {
-            fakeCollection.fakes = [];
-        }
-
-        return fakeCollection.fakes;
-    }
-
-    function each(fakeCollection, method) {
-        var fakes = getFakes(fakeCollection);
-
-        for (var i = 0, l = fakes.length; i < l; i += 1) {
-            if (typeof fakes[i][method] == "function") {
-                fakes[i][method]();
-            }
-        }
-    }
-
-    function compact(fakeCollection) {
-        var fakes = getFakes(fakeCollection);
-        var i = 0;
-        while (i < fakes.length) {
-          fakes.splice(i, 1);
-        }
-    }
-
-    var collection = {
-        verify: function resolve() {
-            each(this, "verify");
-        },
-
-        restore: function restore() {
-            each(this, "restore");
-            compact(this);
-        },
-
-        verifyAndRestore: function verifyAndRestore() {
-            var exception;
-
-            try {
-                this.verify();
-            } catch (e) {
-                exception = e;
-            }
-
-            this.restore();
-
-            if (exception) {
-                throw exception;
-            }
-        },
-
-        add: function add(fake) {
-            push.call(getFakes(this), fake);
-            return fake;
-        },
-
-        spy: function spy() {
-            return this.add(sinon.spy.apply(sinon, arguments));
-        },
-
-        stub: function stub(object, property, value) {
-            if (property) {
-                var original = object[property];
-
-                if (typeof original != "function") {
-                    if (!hasOwnProperty.call(object, property)) {
-                        throw new TypeError("Cannot stub non-existent own property " + property);
-                    }
-
-                    object[property] = value;
-
-                    return this.add({
-                        restore: function () {
-                            object[property] = original;
-                        }
-                    });
-                }
-            }
-            if (!property && !!object && typeof object == "object") {
-                var stubbedObj = sinon.stub.apply(sinon, arguments);
-
-                for (var prop in stubbedObj) {
-                    if (typeof stubbedObj[prop] === "function") {
-                        this.add(stubbedObj[prop]);
-                    }
-                }
-
-                return stubbedObj;
-            }
-
-            return this.add(sinon.stub.apply(sinon, arguments));
-        },
-
-        mock: function mock() {
-            return this.add(sinon.mock.apply(sinon, arguments));
-        },
-
-        inject: function inject(obj) {
-            var col = this;
-
-            obj.spy = function () {
-                return col.spy.apply(col, arguments);
-            };
-
-            obj.stub = function () {
-                return col.stub.apply(col, arguments);
-            };
-
-            obj.mock = function () {
-                return col.mock.apply(col, arguments);
-            };
-
-            return obj;
-        }
-    };
-
-    sinon.collection = collection;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = collection; });
-    } else if (commonJSModule) {
-        module.exports = collection;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
-/*global module, require, window*/
-/**
- * Fake timer API
- * setTimeout
- * setInterval
- * clearTimeout
- * clearInterval
- * tick
- * reset
- * Date
- *
- * Inspired by jsUnitMockTimeOut from JsUnit
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-if (typeof sinon == "undefined") {
-    var sinon = {};
-}
-
-(function (global) {
-    // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
-    // browsers, a number.
-    // see https://github.com/cjohansen/Sinon.JS/pull/436
-    var timeoutResult = setTimeout(function() {}, 0);
-    var addTimerReturnsObject = typeof timeoutResult === 'object';
-    clearTimeout(timeoutResult);
-
-    var id = 1;
-
-    function addTimer(args, recurring) {
-        if (args.length === 0) {
-            throw new Error("Function requires at least 1 parameter");
-        }
-
-        if (typeof args[0] === "undefined") {
-            throw new Error("Callback must be provided to timer calls");
-        }
-
-        var toId = id++;
-        var delay = args[1] || 0;
-
-        if (!this.timeouts) {
-            this.timeouts = {};
-        }
-
-        this.timeouts[toId] = {
-            id: toId,
-            func: args[0],
-            callAt: this.now + delay,
-            invokeArgs: Array.prototype.slice.call(args, 2)
-        };
-
-        if (recurring === true) {
-            this.timeouts[toId].interval = delay;
-        }
-
-        if (addTimerReturnsObject) {
-            return {
-                id: toId,
-                ref: function() {},
-                unref: function() {}
-            };
-        }
-        else {
-            return toId;
-        }
-    }
-
-    function parseTime(str) {
-        if (!str) {
-            return 0;
-        }
-
-        var strings = str.split(":");
-        var l = strings.length, i = l;
-        var ms = 0, parsed;
-
-        if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
-            throw new Error("tick only understands numbers and 'h:m:s'");
-        }
-
-        while (i--) {
-            parsed = parseInt(strings[i], 10);
-
-            if (parsed >= 60) {
-                throw new Error("Invalid time " + str);
-            }
-
-            ms += parsed * Math.pow(60, (l - i - 1));
-        }
-
-        return ms * 1000;
-    }
-
-    function createObject(object) {
-        var newObject;
-
-        if (Object.create) {
-            newObject = Object.create(object);
-        } else {
-            var F = function () {};
-            F.prototype = object;
-            newObject = new F();
-        }
-
-        newObject.Date.clock = newObject;
-        return newObject;
-    }
-
-    sinon.clock = {
-        now: 0,
-
-        create: function create(now) {
-            var clock = createObject(this);
-
-            if (typeof now == "number") {
-                clock.now = now;
-            }
-
-            if (!!now && typeof now == "object") {
-                throw new TypeError("now should be milliseconds since UNIX epoch");
-            }
-
-            return clock;
-        },
-
-        setTimeout: function setTimeout(callback, timeout) {
-            return addTimer.call(this, arguments, false);
-        },
-
-        clearTimeout: function clearTimeout(timerId) {
-            if (!timerId) {
-                // null appears to be allowed in most browsers, and appears to be relied upon by some libraries, like Bootstrap carousel
-                return;
-            }
-            if (!this.timeouts) {
-                this.timeouts = [];
-            }
-            // in Node, timerId is an object with .ref()/.unref(), and
-            // its .id field is the actual timer id.
-            if (typeof timerId === 'object') {
-              timerId = timerId.id
-            }
-            if (timerId in this.timeouts) {
-                delete this.timeouts[timerId];
-            }
-        },
-
-        setInterval: function setInterval(callback, timeout) {
-            return addTimer.call(this, arguments, true);
-        },
-
-        clearInterval: function clearInterval(timerId) {
-            this.clearTimeout(timerId);
-        },
-
-        setImmediate: function setImmediate(callback) {
-            var passThruArgs = Array.prototype.slice.call(arguments, 1);
-
-            return addTimer.call(this, [callback, 0].concat(passThruArgs), false);
-        },
-
-        clearImmediate: function clearImmediate(timerId) {
-            this.clearTimeout(timerId);
-        },
-
-        tick: function tick(ms) {
-            ms = typeof ms == "number" ? ms : parseTime(ms);
-            var tickFrom = this.now, tickTo = this.now + ms, previous = this.now;
-            var timer = this.firstTimerInRange(tickFrom, tickTo);
-
-            var firstException;
-            while (timer && tickFrom <= tickTo) {
-                if (this.timeouts[timer.id]) {
-                    tickFrom = this.now = timer.callAt;
-                    try {
-                      this.callTimer(timer);
-                    } catch (e) {
-                      firstException = firstException || e;
-                    }
-                }
-
-                timer = this.firstTimerInRange(previous, tickTo);
-                previous = tickFrom;
-            }
-
-            this.now = tickTo;
-
-            if (firstException) {
-              throw firstException;
-            }
-
-            return this.now;
-        },
-
-        firstTimerInRange: function (from, to) {
-            var timer, smallest = null, originalTimer;
-
-            for (var id in this.timeouts) {
-                if (this.timeouts.hasOwnProperty(id)) {
-                    if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) {
-                        continue;
-                    }
-
-                    if (smallest === null || this.timeouts[id].callAt < smallest) {
-                        originalTimer = this.timeouts[id];
-                        smallest = this.timeouts[id].callAt;
-
-                        timer = {
-                            func: this.timeouts[id].func,
-                            callAt: this.timeouts[id].callAt,
-                            interval: this.timeouts[id].interval,
-                            id: this.timeouts[id].id,
-                            invokeArgs: this.timeouts[id].invokeArgs
-                        };
-                    }
-                }
-            }
-
-            return timer || null;
-        },
-
-        callTimer: function (timer) {
-            if (typeof timer.interval == "number") {
-                this.timeouts[timer.id].callAt += timer.interval;
-            } else {
-                delete this.timeouts[timer.id];
-            }
-
-            try {
-                if (typeof timer.func == "function") {
-                    timer.func.apply(null, timer.invokeArgs);
-                } else {
-                    eval(timer.func);
-                }
-            } catch (e) {
-              var exception = e;
-            }
-
-            if (!this.timeouts[timer.id]) {
-                if (exception) {
-                  throw exception;
-                }
-                return;
-            }
-
-            if (exception) {
-              throw exception;
-            }
-        },
-
-        reset: function reset() {
-            this.timeouts = {};
-        },
-
-        Date: (function () {
-            var NativeDate = Date;
-
-            function ClockDate(year, month, date, hour, minute, second, ms) {
-                // Defensive and verbose to avoid potential harm in passing
-                // explicit undefined when user does not pass argument
-                switch (arguments.length) {
-                case 0:
-                    return new NativeDate(ClockDate.clock.now);
-                case 1:
-                    return new NativeDate(year);
-                case 2:
-                    return new NativeDate(year, month);
-                case 3:
-                    return new NativeDate(year, month, date);
-                case 4:
-                    return new NativeDate(year, month, date, hour);
-                case 5:
-                    return new NativeDate(year, month, date, hour, minute);
-                case 6:
-                    return new NativeDate(year, month, date, hour, minute, second);
-                default:
-                    return new NativeDate(year, month, date, hour, minute, second, ms);
-                }
-            }
-
-            return mirrorDateProperties(ClockDate, NativeDate);
-        }())
-    };
-
-    function mirrorDateProperties(target, source) {
-        if (source.now) {
-            target.now = function now() {
-                return target.clock.now;
-            };
-        } else {
-            delete target.now;
-        }
-
-        if (source.toSource) {
-            target.toSource = function toSource() {
-                return source.toSource();
-            };
-        } else {
-            delete target.toSource;
-        }
-
-        target.toString = function toString() {
-            return source.toString();
-        };
-
-        target.prototype = source.prototype;
-        target.parse = source.parse;
-        target.UTC = source.UTC;
-        target.prototype.toUTCString = source.prototype.toUTCString;
-
-        for (var prop in source) {
-            if (source.hasOwnProperty(prop)) {
-                target[prop] = source[prop];
-            }
-        }
-
-        return target;
-    }
-
-    var methods = ["Date", "setTimeout", "setInterval",
-                   "clearTimeout", "clearInterval"];
-
-    if (typeof global.setImmediate !== "undefined") {
-        methods.push("setImmediate");
-    }
-
-    if (typeof global.clearImmediate !== "undefined") {
-        methods.push("clearImmediate");
-    }
-
-    function restore() {
-        var method;
-
-        for (var i = 0, l = this.methods.length; i < l; i++) {
-            method = this.methods[i];
-
-            if (global[method].hadOwnProperty) {
-                global[method] = this["_" + method];
-            } else {
-                try {
-                    delete global[method];
-                } catch (e) {}
-            }
-        }
-
-        // Prevent multiple executions which will completely remove these props
-        this.methods = [];
-    }
-
-    function stubGlobal(method, clock) {
-        clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method);
-        clock["_" + method] = global[method];
-
-        if (method == "Date") {
-            var date = mirrorDateProperties(clock[method], global[method]);
-            global[method] = date;
-        } else {
-            global[method] = function () {
-                return clock[method].apply(clock, arguments);
-            };
-
-            for (var prop in clock[method]) {
-                if (clock[method].hasOwnProperty(prop)) {
-                    global[method][prop] = clock[method][prop];
-                }
-            }
-        }
-
-        global[method].clock = clock;
-    }
-
-    sinon.useFakeTimers = function useFakeTimers(now) {
-        var clock = sinon.clock.create(now);
-        clock.restore = restore;
-        clock.methods = Array.prototype.slice.call(arguments,
-                                                   typeof now == "number" ? 1 : 0);
-
-        if (clock.methods.length === 0) {
-            clock.methods = methods;
-        }
-
-        for (var i = 0, l = clock.methods.length; i < l; i++) {
-            stubGlobal(clock.methods[i], clock);
-        }
-
-        return clock;
-    };
-}(typeof global != "undefined" && typeof global !== "function" ? global : this));
-
-sinon.timers = {
-    setTimeout: setTimeout,
-    clearTimeout: clearTimeout,
-    setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
-    clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
-    setInterval: setInterval,
-    clearInterval: clearInterval,
-    Date: Date
-};
-
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = sinon;
-}
-
-/*jslint eqeqeq: false, onevar: false*/
-/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
-/**
- * Minimal Event interface implementation
- *
- * Original implementation by Sven Fuchs: https://gist.github.com/995028
- * Modifications and tests by Christian Johansen.
- *
- * @author Sven Fuchs (svenfuchs@artweb-design.de)
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2011 Sven Fuchs, Christian Johansen
- */
-
-if (typeof sinon == "undefined") {
-    this.sinon = {};
-}
-
-(function () {
-    var push = [].push;
-
-    sinon.Event = function Event(type, bubbles, cancelable, target) {
-        this.initEvent(type, bubbles, cancelable, target);
-    };
-
-    sinon.Event.prototype = {
-        initEvent: function(type, bubbles, cancelable, target) {
-            this.type = type;
-            this.bubbles = bubbles;
-            this.cancelable = cancelable;
-            this.target = target;
-        },
-
-        stopPropagation: function () {},
-
-        preventDefault: function () {
-            this.defaultPrevented = true;
-        }
-    };
-
-    sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) {
-        this.initEvent(type, false, false, target);
-        this.loaded = progressEventRaw.loaded || null;
-        this.total = progressEventRaw.total || null;
-    };
-
-    sinon.ProgressEvent.prototype = new sinon.Event();
-
-    sinon.ProgressEvent.prototype.constructor =  sinon.ProgressEvent;
-
-    sinon.CustomEvent = function CustomEvent(type, customData, target) {
-        this.initEvent(type, false, false, target);
-        this.detail = customData.detail || null;
-    };
-
-    sinon.CustomEvent.prototype = new sinon.Event();
-
-    sinon.CustomEvent.prototype.constructor =  sinon.CustomEvent;
-
-    sinon.EventTarget = {
-        addEventListener: function addEventListener(event, listener) {
-            this.eventListeners = this.eventListeners || {};
-            this.eventListeners[event] = this.eventListeners[event] || [];
-            push.call(this.eventListeners[event], listener);
-        },
-
-        removeEventListener: function removeEventListener(event, listener) {
-            var listeners = this.eventListeners && this.eventListeners[event] || [];
-
-            for (var i = 0, l = listeners.length; i < l; ++i) {
-                if (listeners[i] == listener) {
-                    return listeners.splice(i, 1);
-                }
-            }
-        },
-
-        dispatchEvent: function dispatchEvent(event) {
-            var type = event.type;
-            var listeners = this.eventListeners && this.eventListeners[type] || [];
-
-            for (var i = 0; i < listeners.length; i++) {
-                if (typeof listeners[i] == "function") {
-                    listeners[i].call(this, event);
-                } else {
-                    listeners[i].handleEvent(event);
-                }
-            }
-
-            return !!event.defaultPrevented;
-        }
-    };
-}());
-
-/**
- * @depend ../../sinon.js
- * @depend event.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
-/**
- * Fake XMLHttpRequest object
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-// wrapper for global
-(function(global) {
-    if (typeof sinon === "undefined") {
-        global.sinon = {};
-    }
-
-    var supportsProgress = typeof ProgressEvent !== "undefined";
-    var supportsCustomEvent = typeof CustomEvent !== "undefined";
-    sinon.xhr = { XMLHttpRequest: global.XMLHttpRequest };
-    var xhr = sinon.xhr;
-    xhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
-    xhr.GlobalActiveXObject = global.ActiveXObject;
-    xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined";
-    xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined";
-    xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX
-                                     ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false;
-    xhr.supportsCORS = xhr.supportsXHR && 'withCredentials' in (new sinon.xhr.GlobalXMLHttpRequest());
-
-    /*jsl:ignore*/
-    var unsafeHeaders = {
-        "Accept-Charset": true,
-        "Accept-Encoding": true,
-        "Connection": true,
-        "Content-Length": true,
-        "Cookie": true,
-        "Cookie2": true,
-        "Content-Transfer-Encoding": true,
-        "Date": true,
-        "Expect": true,
-        "Host": true,
-        "Keep-Alive": true,
-        "Referer": true,
-        "TE": true,
-        "Trailer": true,
-        "Transfer-Encoding": true,
-        "Upgrade": true,
-        "User-Agent": true,
-        "Via": true
-    };
-    /*jsl:end*/
-
-    function FakeXMLHttpRequest() {
-        this.readyState = FakeXMLHttpRequest.UNSENT;
-        this.requestHeaders = {};
-        this.requestBody = null;
-        this.status = 0;
-        this.statusText = "";
-        this.upload = new UploadProgress();
-        if (sinon.xhr.supportsCORS) {
-            this.withCredentials = false;
-        }
-
-
-        var xhr = this;
-        var events = ["loadstart", "load", "abort", "loadend"];
-
-        function addEventListener(eventName) {
-            xhr.addEventListener(eventName, function (event) {
-                var listener = xhr["on" + eventName];
-
-                if (listener && typeof listener == "function") {
-                    listener.call(this, event);
-                }
-            });
-        }
-
-        for (var i = events.length - 1; i >= 0; i--) {
-            addEventListener(events[i]);
-        }
-
-        if (typeof FakeXMLHttpRequest.onCreate == "function") {
-            FakeXMLHttpRequest.onCreate(this);
-        }
-    }
-
-    // An upload object is created for each
-    // FakeXMLHttpRequest and allows upload
-    // events to be simulated using uploadProgress
-    // and uploadError.
-    function UploadProgress() {
-        this.eventListeners = {
-            "progress": [],
-            "load": [],
-            "abort": [],
-            "error": []
-        }
-    }
-
-    UploadProgress.prototype.addEventListener = function(event, listener) {
-        this.eventListeners[event].push(listener);
-    };
-
-    UploadProgress.prototype.removeEventListener = function(event, listener) {
-        var listeners = this.eventListeners[event] || [];
-
-        for (var i = 0, l = listeners.length; i < l; ++i) {
-            if (listeners[i] == listener) {
-                return listeners.splice(i, 1);
-            }
-        }
-    };
-
-    UploadProgress.prototype.dispatchEvent = function(event) {
-        var listeners = this.eventListeners[event.type] || [];
-
-        for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
-            listener(event);
-        }
-    };
-
-    function verifyState(xhr) {
-        if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
-            throw new Error("INVALID_STATE_ERR");
-        }
-
-        if (xhr.sendFlag) {
-            throw new Error("INVALID_STATE_ERR");
-        }
-    }
-
-    // filtering to enable a white-list version of Sinon FakeXhr,
-    // where whitelisted requests are passed through to real XHR
-    function each(collection, callback) {
-        if (!collection) return;
-        for (var i = 0, l = collection.length; i < l; i += 1) {
-            callback(collection[i]);
-        }
-    }
-    function some(collection, callback) {
-        for (var index = 0; index < collection.length; index++) {
-            if(callback(collection[index]) === true) return true;
-        }
-        return false;
-    }
-    // largest arity in XHR is 5 - XHR#open
-    var apply = function(obj,method,args) {
-        switch(args.length) {
-        case 0: return obj[method]();
-        case 1: return obj[method](args[0]);
-        case 2: return obj[method](args[0],args[1]);
-        case 3: return obj[method](args[0],args[1],args[2]);
-        case 4: return obj[method](args[0],args[1],args[2],args[3]);
-        case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]);
-        }
-    };
-
-    FakeXMLHttpRequest.filters = [];
-    FakeXMLHttpRequest.addFilter = function(fn) {
-        this.filters.push(fn)
-    };
-    var IE6Re = /MSIE 6/;
-    FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) {
-        var xhr = new sinon.xhr.workingXHR();
-        each(["open","setRequestHeader","send","abort","getResponseHeader",
-              "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"],
-             function(method) {
-                 fakeXhr[method] = function() {
-                   return apply(xhr,method,arguments);
-                 };
-             });
-
-        var copyAttrs = function(args) {
-            each(args, function(attr) {
-              try {
-                fakeXhr[attr] = xhr[attr]
-              } catch(e) {
-                if(!IE6Re.test(navigator.userAgent)) throw e;
-              }
-            });
-        };
-
-        var stateChange = function() {
-            fakeXhr.readyState = xhr.readyState;
-            if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                copyAttrs(["status","statusText"]);
-            }
-            if(xhr.readyState >= FakeXMLHttpRequest.LOADING) {
-                copyAttrs(["responseText"]);
-            }
-            if(xhr.readyState === FakeXMLHttpRequest.DONE) {
-                copyAttrs(["responseXML"]);
-            }
-            if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
-        };
-        if(xhr.addEventListener) {
-          for(var event in fakeXhr.eventListeners) {
-              if(fakeXhr.eventListeners.hasOwnProperty(event)) {
-                  each(fakeXhr.eventListeners[event],function(handler) {
-                      xhr.addEventListener(event, handler);
-                  });
-              }
-          }
-          xhr.addEventListener("readystatechange",stateChange);
-        } else {
-          xhr.onreadystatechange = stateChange;
-        }
-        apply(xhr,"open",xhrArgs);
-    };
-    FakeXMLHttpRequest.useFilters = false;
-
-    function verifyRequestOpened(xhr) {
-        if (xhr.readyState != FakeXMLHttpRequest.OPENED) {
-            throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
-        }
-    }
-
-    function verifyRequestSent(xhr) {
-        if (xhr.readyState == FakeXMLHttpRequest.DONE) {
-            throw new Error("Request done");
-        }
-    }
-
-    function verifyHeadersReceived(xhr) {
-        if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
-            throw new Error("No headers received");
-        }
-    }
-
-    function verifyResponseBodyType(body) {
-        if (typeof body != "string") {
-            var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
-                                 body + ", which is not a string.");
-            error.name = "InvalidBodyException";
-            throw error;
-        }
-    }
-
-    sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
-        async: true,
-
-        open: function open(method, url, async, username, password) {
-            this.method = method;
-            this.url = url;
-            this.async = typeof async == "boolean" ? async : true;
-            this.username = username;
-            this.password = password;
-            this.responseText = null;
-            this.responseXML = null;
-            this.requestHeaders = {};
-            this.sendFlag = false;
-            if(sinon.FakeXMLHttpRequest.useFilters === true) {
-                var xhrArgs = arguments;
-                var defake = some(FakeXMLHttpRequest.filters,function(filter) {
-                    return filter.apply(this,xhrArgs)
-                });
-                if (defake) {
-                  return sinon.FakeXMLHttpRequest.defake(this,arguments);
-                }
-            }
-            this.readyStateChange(FakeXMLHttpRequest.OPENED);
-        },
-
-        readyStateChange: function readyStateChange(state) {
-            this.readyState = state;
-
-            if (typeof this.onreadystatechange == "function") {
-                try {
-                    this.onreadystatechange();
-                } catch (e) {
-                    sinon.logError("Fake XHR onreadystatechange handler", e);
-                }
-            }
-
-            this.dispatchEvent(new sinon.Event("readystatechange"));
-
-            switch (this.readyState) {
-                case FakeXMLHttpRequest.DONE:
-                    this.dispatchEvent(new sinon.Event("load", false, false, this));
-                    this.dispatchEvent(new sinon.Event("loadend", false, false, this));
-                    this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
-                    if (supportsProgress) {
-                        this.upload.dispatchEvent(new sinon.ProgressEvent('progress', {loaded: 100, total: 100}));
-                    }
-                    break;
-            }
-        },
-
-        setRequestHeader: function setRequestHeader(header, value) {
-            verifyState(this);
-
-            if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
-                throw new Error("Refused to set unsafe header \"" + header + "\"");
-            }
-
-            if (this.requestHeaders[header]) {
-                this.requestHeaders[header] += "," + value;
-            } else {
-                this.requestHeaders[header] = value;
-            }
-        },
-
-        // Helps testing
-        setResponseHeaders: function setResponseHeaders(headers) {
-            verifyRequestOpened(this);
-            this.responseHeaders = {};
-
-            for (var header in headers) {
-                if (headers.hasOwnProperty(header)) {
-                    this.responseHeaders[header] = headers[header];
-                }
-            }
-
-            if (this.async) {
-                this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
-            } else {
-                this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
-            }
-        },
-
-        // Currently treats ALL data as a DOMString (i.e. no Document)
-        send: function send(data) {
-            verifyState(this);
-
-            if (!/^(get|head)$/i.test(this.method)) {
-                if (this.requestHeaders["Content-Type"]) {
-                    var value = this.requestHeaders["Content-Type"].split(";");
-                    this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8";
-                } else {
-                    this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
-                }
-
-                this.requestBody = data;
-            }
-
-            this.errorFlag = false;
-            this.sendFlag = this.async;
-            this.readyStateChange(FakeXMLHttpRequest.OPENED);
-
-            if (typeof this.onSend == "function") {
-                this.onSend(this);
-            }
-
-            this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
-        },
-
-        abort: function abort() {
-            this.aborted = true;
-            this.responseText = null;
-            this.errorFlag = true;
-            this.requestHeaders = {};
-
-            if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) {
-                this.readyStateChange(sinon.FakeXMLHttpRequest.DONE);
-                this.sendFlag = false;
-            }
-
-            this.readyState = sinon.FakeXMLHttpRequest.UNSENT;
-
-            this.dispatchEvent(new sinon.Event("abort", false, false, this));
-
-            this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
-
-            if (typeof this.onerror === "function") {
-                this.onerror();
-            }
-        },
-
-        getResponseHeader: function getResponseHeader(header) {
-            if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                return null;
-            }
-
-            if (/^Set-Cookie2?$/i.test(header)) {
-                return null;
-            }
-
-            header = header.toLowerCase();
-
-            for (var h in this.responseHeaders) {
-                if (h.toLowerCase() == header) {
-                    return this.responseHeaders[h];
-                }
-            }
-
-            return null;
-        },
-
-        getAllResponseHeaders: function getAllResponseHeaders() {
-            if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                return "";
-            }
-
-            var headers = "";
-
-            for (var header in this.responseHeaders) {
-                if (this.responseHeaders.hasOwnProperty(header) &&
-                    !/^Set-Cookie2?$/i.test(header)) {
-                    headers += header + ": " + this.responseHeaders[header] + "\r\n";
-                }
-            }
-
-            return headers;
-        },
-
-        setResponseBody: function setResponseBody(body) {
-            verifyRequestSent(this);
-            verifyHeadersReceived(this);
-            verifyResponseBodyType(body);
-
-            var chunkSize = this.chunkSize || 10;
-            var index = 0;
-            this.responseText = "";
-
-            do {
-                if (this.async) {
-                    this.readyStateChange(FakeXMLHttpRequest.LOADING);
-                }
-
-                this.responseText += body.substring(index, index + chunkSize);
-                index += chunkSize;
-            } while (index < body.length);
-
-            var type = this.getResponseHeader("Content-Type");
-
-            if (this.responseText &&
-                (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
-                try {
-                    this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
-                } catch (e) {
-                    // Unable to parse XML - no biggie
-                }
-            }
-
-            if (this.async) {
-                this.readyStateChange(FakeXMLHttpRequest.DONE);
-            } else {
-                this.readyState = FakeXMLHttpRequest.DONE;
-            }
-        },
-
-        respond: function respond(status, headers, body) {
-            this.status = typeof status == "number" ? status : 200;
-            this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
-            this.setResponseHeaders(headers || {});
-            this.setResponseBody(body || "");
-        },
-
-        uploadProgress: function uploadProgress(progressEventRaw) {
-            if (supportsProgress) {
-                this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
-            }
-        },
-
-        uploadError: function uploadError(error) {
-            if (supportsCustomEvent) {
-                this.upload.dispatchEvent(new sinon.CustomEvent("error", {"detail": error}));
-            }
-        }
-    });
-
-    sinon.extend(FakeXMLHttpRequest, {
-        UNSENT: 0,
-        OPENED: 1,
-        HEADERS_RECEIVED: 2,
-        LOADING: 3,
-        DONE: 4
-    });
-
-    // Borrowed from JSpec
-    FakeXMLHttpRequest.parseXML = function parseXML(text) {
-        var xmlDoc;
-
-        if (typeof DOMParser != "undefined") {
-            var parser = new DOMParser();
-            xmlDoc = parser.parseFromString(text, "text/xml");
-        } else {
-            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
-            xmlDoc.async = "false";
-            xmlDoc.loadXML(text);
-        }
-
-        return xmlDoc;
-    };
-
-    FakeXMLHttpRequest.statusCodes = {
-        100: "Continue",
-        101: "Switching Protocols",
-        200: "OK",
-        201: "Created",
-        202: "Accepted",
-        203: "Non-Authoritative Information",
-        204: "No Content",
-        205: "Reset Content",
-        206: "Partial Content",
-        300: "Multiple Choice",
-        301: "Moved Permanently",
-        302: "Found",
-        303: "See Other",
-        304: "Not Modified",
-        305: "Use Proxy",
-        307: "Temporary Redirect",
-        400: "Bad Request",
-        401: "Unauthorized",
-        402: "Payment Required",
-        403: "Forbidden",
-        404: "Not Found",
-        405: "Method Not Allowed",
-        406: "Not Acceptable",
-        407: "Proxy Authentication Required",
-        408: "Request Timeout",
-        409: "Conflict",
-        410: "Gone",
-        411: "Length Required",
-        412: "Precondition Failed",
-        413: "Request Entity Too Large",
-        414: "Request-URI Too Long",
-        415: "Unsupported Media Type",
-        416: "Requested Range Not Satisfiable",
-        417: "Expectation Failed",
-        422: "Unprocessable Entity",
-        500: "Internal Server Error",
-        501: "Not Implemented",
-        502: "Bad Gateway",
-        503: "Service Unavailable",
-        504: "Gateway Timeout",
-        505: "HTTP Version Not Supported"
-    };
-
-    sinon.useFakeXMLHttpRequest = function () {
-        sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
-            if (xhr.supportsXHR) {
-                global.XMLHttpRequest = xhr.GlobalXMLHttpRequest;
-            }
-
-            if (xhr.supportsActiveX) {
-                global.ActiveXObject = xhr.GlobalActiveXObject;
-            }
-
-            delete sinon.FakeXMLHttpRequest.restore;
-
-            if (keepOnCreate !== true) {
-                delete sinon.FakeXMLHttpRequest.onCreate;
-            }
-        };
-        if (xhr.supportsXHR) {
-            global.XMLHttpRequest = sinon.FakeXMLHttpRequest;
-        }
-
-        if (xhr.supportsActiveX) {
-            global.ActiveXObject = function ActiveXObject(objId) {
-                if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
-
-                    return new sinon.FakeXMLHttpRequest();
-                }
-
-                return new xhr.GlobalActiveXObject(objId);
-            };
-        }
-
-        return sinon.FakeXMLHttpRequest;
-    };
-
-    sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
-
-})((function(){ return typeof global === "object" ? global : this; })());
-
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = sinon;
-}
-
-/**
- * @depend fake_xml_http_request.js
- */
-/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/
-/*global module, require, window*/
-/**
- * The Sinon "server" mimics a web server that receives requests from
- * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
- * both synchronously and asynchronously. To respond synchronuously, canned
- * answers have to be provided upfront.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-if (typeof sinon == "undefined") {
-    var sinon = {};
-}
-
-sinon.fakeServer = (function () {
-    var push = [].push;
-    function F() {}
-
-    function create(proto) {
-        F.prototype = proto;
-        return new F();
-    }
-
-    function responseArray(handler) {
-        var response = handler;
-
-        if (Object.prototype.toString.call(handler) != "[object Array]") {
-            response = [200, {}, handler];
-        }
-
-        if (typeof response[2] != "string") {
-            throw new TypeError("Fake server response body should be string, but was " +
-                                typeof response[2]);
-        }
-
-        return response;
-    }
-
-    var wloc = typeof window !== "undefined" ? window.location : {};
-    var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
-
-    function matchOne(response, reqMethod, reqUrl) {
-        var rmeth = response.method;
-        var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase();
-        var url = response.url;
-        var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl));
-
-        return matchMethod && matchUrl;
-    }
-
-    function match(response, request) {
-        var requestUrl = request.url;
-
-        if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
-            requestUrl = requestUrl.replace(rCurrLoc, "");
-        }
-
-        if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
-            if (typeof response.response == "function") {
-                var ru = response.url;
-                var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []);
-                return response.response.apply(response, args);
-            }
-
-            return true;
-        }
-
-        return false;
-    }
-
-    return {
-        create: function () {
-            var server = create(this);
-            this.xhr = sinon.useFakeXMLHttpRequest();
-            server.requests = [];
-
-            this.xhr.onCreate = function (xhrObj) {
-                server.addRequest(xhrObj);
-            };
-
-            return server;
-        },
-
-        addRequest: function addRequest(xhrObj) {
-            var server = this;
-            push.call(this.requests, xhrObj);
-
-            xhrObj.onSend = function () {
-                server.handleRequest(this);
-
-                if (server.autoRespond && !server.responding) {
-                    setTimeout(function () {
-                        server.responding = false;
-                        server.respond();
-                    }, server.autoRespondAfter || 10);
-
-                    server.responding = true;
-                }
-            };
-        },
-
-        getHTTPMethod: function getHTTPMethod(request) {
-            if (this.fakeHTTPMethods && /post/i.test(request.method)) {
-                var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
-                return !!matches ? matches[1] : request.method;
-            }
-
-            return request.method;
-        },
-
-        handleRequest: function handleRequest(xhr) {
-            if (xhr.async) {
-                if (!this.queue) {
-                    this.queue = [];
-                }
-
-                push.call(this.queue, xhr);
-            } else {
-                this.processRequest(xhr);
-            }
-        },
-
-        log: function(response, request) {
-            var str;
-
-            str =  "Request:\n"  + sinon.format(request)  + "\n\n";
-            str += "Response:\n" + sinon.format(response) + "\n\n";
-
-            sinon.log(str);
-        },
-
-        respondWith: function respondWith(method, url, body) {
-            if (arguments.length == 1 && typeof method != "function") {
-                this.response = responseArray(method);
-                return;
-            }
-
-            if (!this.responses) { this.responses = []; }
-
-            if (arguments.length == 1) {
-                body = method;
-                url = method = null;
-            }
-
-            if (arguments.length == 2) {
-                body = url;
-                url = method;
-                method = null;
-            }
-
-            push.call(this.responses, {
-                method: method,
-                url: url,
-                response: typeof body == "function" ? body : responseArray(body)
-            });
-        },
-
-        respond: function respond() {
-            if (arguments.length > 0) this.respondWith.apply(this, arguments);
-            var queue = this.queue || [];
-            var requests = queue.splice(0, queue.length);
-            var request;
-
-            while(request = requests.shift()) {
-                this.processRequest(request);
-            }
-        },
-
-        processRequest: function processRequest(request) {
-            try {
-                if (request.aborted) {
-                    return;
-                }
-
-                var response = this.response || [404, {}, ""];
-
-                if (this.responses) {
-                    for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
-                        if (match.call(this, this.responses[i], request)) {
-                            response = this.responses[i].response;
-                            break;
-                        }
-                    }
-                }
-
-                if (request.readyState != 4) {
-                    sinon.fakeServer.log(response, request);
-
-                    request.respond(response[0], response[1], response[2]);
-                }
-            } catch (e) {
-                sinon.logError("Fake server request processing", e);
-            }
-        },
-
-        restore: function restore() {
-            return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
-        }
-    };
-}());
-
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = sinon;
-}
-
-/**
- * @depend fake_server.js
- * @depend fake_timers.js
- */
-/*jslint browser: true, eqeqeq: false, onevar: false*/
-/*global sinon*/
-/**
- * Add-on for sinon.fakeServer that automatically handles a fake timer along with
- * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
- * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
- * it polls the object for completion with setInterval. Dispite the direct
- * motivation, there is nothing jQuery-specific in this file, so it can be used
- * in any environment where the ajax implementation depends on setInterval or
- * setTimeout.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function () {
-    function Server() {}
-    Server.prototype = sinon.fakeServer;
-
-    sinon.fakeServerWithClock = new Server();
-
-    sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
-        if (xhr.async) {
-            if (typeof setTimeout.clock == "object") {
-                this.clock = setTimeout.clock;
-            } else {
-                this.clock = sinon.useFakeTimers();
-                this.resetClock = true;
-            }
-
-            if (!this.longestTimeout) {
-                var clockSetTimeout = this.clock.setTimeout;
-                var clockSetInterval = this.clock.setInterval;
-                var server = this;
-
-                this.clock.setTimeout = function (fn, timeout) {
-                    server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
-
-                    return clockSetTimeout.apply(this, arguments);
-                };
-
-                this.clock.setInterval = function (fn, timeout) {
-                    server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
-
-                    return clockSetInterval.apply(this, arguments);
-                };
-            }
-        }
-
-        return sinon.fakeServer.addRequest.call(this, xhr);
-    };
-
-    sinon.fakeServerWithClock.respond = function respond() {
-        var returnVal = sinon.fakeServer.respond.apply(this, arguments);
-
-        if (this.clock) {
-            this.clock.tick(this.longestTimeout || 0);
-            this.longestTimeout = 0;
-
-            if (this.resetClock) {
-                this.clock.restore();
-                this.resetClock = false;
-            }
-        }
-
-        return returnVal;
-    };
-
-    sinon.fakeServerWithClock.restore = function restore() {
-        if (this.clock) {
-            this.clock.restore();
-        }
-
-        return sinon.fakeServer.restore.apply(this, arguments);
-    };
-}());
-
-/**
- * @depend ../sinon.js
- * @depend collection.js
- * @depend util/fake_timers.js
- * @depend util/fake_server_with_clock.js
- */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global require, module*/
-/**
- * Manages fake collections as well as fake utilities such as Sinon's
- * timers and fake XHR implementation in one convenient object.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-if (typeof module !== "undefined" && module.exports && typeof require == "function") {
-    var sinon = require("../sinon");
-    sinon.extend(sinon, require("./util/fake_timers"));
-}
-
-(function () {
-    var push = [].push;
-
-    function exposeValue(sandbox, config, key, value) {
-        if (!value) {
-            return;
-        }
-
-        if (config.injectInto && !(key in config.injectInto)) {
-            config.injectInto[key] = value;
-            sandbox.injectedKeys.push(key);
-        } else {
-            push.call(sandbox.args, value);
-        }
-    }
-
-    function prepareSandboxFromConfig(config) {
-        var sandbox = sinon.create(sinon.sandbox);
-
-        if (config.useFakeServer) {
-            if (typeof config.useFakeServer == "object") {
-                sandbox.serverPrototype = config.useFakeServer;
-            }
-
-            sandbox.useFakeServer();
-        }
-
-        if (config.useFakeTimers) {
-            if (typeof config.useFakeTimers == "object") {
-                sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
-            } else {
-                sandbox.useFakeTimers();
-            }
-        }
-
-        return sandbox;
-    }
-
-    sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
-        useFakeTimers: function useFakeTimers() {
-            this.clock = sinon.useFakeTimers.apply(sinon, arguments);
-
-            return this.add(this.clock);
-        },
-
-        serverPrototype: sinon.fakeServer,
-
-        useFakeServer: function useFakeServer() {
-            var proto = this.serverPrototype || sinon.fakeServer;
-
-            if (!proto || !proto.create) {
-                return null;
-            }
-
-            this.server = proto.create();
-            return this.add(this.server);
-        },
-
-        inject: function (obj) {
-            sinon.collection.inject.call(this, obj);
-
-            if (this.clock) {
-                obj.clock = this.clock;
-            }
-
-            if (this.server) {
-                obj.server = this.server;
-                obj.requests = this.server.requests;
-            }
-
-            return obj;
-        },
-
-        restore: function () {
-            sinon.collection.restore.apply(this, arguments);
-            this.restoreContext();
-        },
-
-        restoreContext: function () {
-            if (this.injectedKeys) {
-                for (var i = 0, j = this.injectedKeys.length; i < j; i++) {
-                    delete this.injectInto[this.injectedKeys[i]];
-                }
-                this.injectedKeys = [];
-            }
-        },
-
-        create: function (config) {
-            if (!config) {
-                return sinon.create(sinon.sandbox);
-            }
-
-            var sandbox = prepareSandboxFromConfig(config);
-            sandbox.args = sandbox.args || [];
-            sandbox.injectedKeys = [];
-            sandbox.injectInto = config.injectInto;
-            var prop, value, exposed = sandbox.inject({});
-
-            if (config.properties) {
-                for (var i = 0, l = config.properties.length; i < l; i++) {
-                    prop = config.properties[i];
-                    value = exposed[prop] || prop == "sandbox" && sandbox;
-                    exposeValue(sandbox, config, prop, value);
-                }
-            } else {
-                exposeValue(sandbox, config, "sandbox", value);
-            }
-
-            return sandbox;
-        }
-    });
-
-    sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = sinon.sandbox; });
-    } else if (typeof module !== 'undefined' && module.exports) {
-        module.exports = sinon.sandbox;
-    }
-}());
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- * @depend mock.js
- * @depend sandbox.js
- */
-/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Test function, sandboxes fakes
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function test(callback) {
-        var type = typeof callback;
-
-        if (type != "function") {
-            throw new TypeError("sinon.test needs to wrap a test function, got " + type);
-        }
-
-        function sinonSandboxedTest() {
-            var config = sinon.getConfig(sinon.config);
-            config.injectInto = config.injectIntoThis && this || config.injectInto;
-            var sandbox = sinon.sandbox.create(config);
-            var exception, result;
-            var args = Array.prototype.slice.call(arguments).concat(sandbox.args);
-
-            try {
-                result = callback.apply(this, args);
-            } catch (e) {
-                exception = e;
-            }
-
-            if (typeof exception !== "undefined") {
-                sandbox.restore();
-                throw exception;
-            }
-            else {
-                sandbox.verifyAndRestore();
-            }
-
-            return result;
-        };
-
-        if (callback.length) {
-            return function sinonAsyncSandboxedTest(callback) {
-                return sinonSandboxedTest.apply(this, arguments);
-            };
-        }
-
-        return sinonSandboxedTest;
-    }
-
-    test.config = {
-        injectIntoThis: true,
-        injectInto: null,
-        properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-        useFakeTimers: true,
-        useFakeServer: true
-    };
-
-    sinon.test = test;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = test; });
-    } else if (commonJSModule) {
-        module.exports = test;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend test.js
- */
-/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/
-/*global module, require, sinon*/
-/**
- * Test case, sandboxes all test functions
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon || !Object.prototype.hasOwnProperty) {
-        return;
-    }
-
-    function createTest(property, setUp, tearDown) {
-        return function () {
-            if (setUp) {
-                setUp.apply(this, arguments);
-            }
-
-            var exception, result;
-
-            try {
-                result = property.apply(this, arguments);
-            } catch (e) {
-                exception = e;
-            }
-
-            if (tearDown) {
-                tearDown.apply(this, arguments);
-            }
-
-            if (exception) {
-                throw exception;
-            }
-
-            return result;
-        };
-    }
-
-    function testCase(tests, prefix) {
-        /*jsl:ignore*/
-        if (!tests || typeof tests != "object") {
-            throw new TypeError("sinon.testCase needs an object with test functions");
-        }
-        /*jsl:end*/
-
-        prefix = prefix || "test";
-        var rPrefix = new RegExp("^" + prefix);
-        var methods = {}, testName, property, method;
-        var setUp = tests.setUp;
-        var tearDown = tests.tearDown;
-
-        for (testName in tests) {
-            if (tests.hasOwnProperty(testName)) {
-                property = tests[testName];
-
-                if (/^(setUp|tearDown)$/.test(testName)) {
-                    continue;
-                }
-
-                if (typeof property == "function" && rPrefix.test(testName)) {
-                    method = property;
-
-                    if (setUp || tearDown) {
-                        method = createTest(property, setUp, tearDown);
-                    }
-
-                    methods[testName] = sinon.test(method);
-                } else {
-                    methods[testName] = tests[testName];
-                }
-            }
-        }
-
-        return methods;
-    }
-
-    sinon.testCase = testCase;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = testCase; });
-    } else if (commonJSModule) {
-        module.exports = testCase;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- */
-/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Assertions matching the test spy retrieval interface.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon, global) {
-    var commonJSModule = typeof module !== "undefined" && module.exports && typeof require == "function";
-    var slice = Array.prototype.slice;
-    var assert;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function verifyIsStub() {
-        var method;
-
-        for (var i = 0, l = arguments.length; i < l; ++i) {
-            method = arguments[i];
-
-            if (!method) {
-                assert.fail("fake is not a spy");
-            }
-
-            if (typeof method != "function") {
-                assert.fail(method + " is not a function");
-            }
-
-            if (typeof method.getCall != "function") {
-                assert.fail(method + " is not stubbed");
-            }
-        }
-    }
-
-    function failAssertion(object, msg) {
-        object = object || global;
-        var failMethod = object.fail || assert.fail;
-        failMethod.call(object, msg);
-    }
-
-    function mirrorPropAsAssertion(name, method, message) {
-        if (arguments.length == 2) {
-            message = method;
-            method = name;
-        }
-
-        assert[name] = function (fake) {
-            verifyIsStub(fake);
-
-            var args = slice.call(arguments, 1);
-            var failed = false;
-
-            if (typeof method == "function") {
-                failed = !method(fake);
-            } else {
-                failed = typeof fake[method] == "function" ?
-                    !fake[method].apply(fake, args) : !fake[method];
-            }
-
-            if (failed) {
-                failAssertion(this, fake.printf.apply(fake, [message].concat(args)));
-            } else {
-                assert.pass(name);
-            }
-        };
-    }
-
-    function exposedName(prefix, prop) {
-        return !prefix || /^fail/.test(prop) ? prop :
-            prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
-    }
-
-    assert = {
-        failException: "AssertError",
-
-        fail: function fail(message) {
-            var error = new Error(message);
-            error.name = this.failException || assert.failException;
-
-            throw error;
-        },
-
-        pass: function pass(assertion) {},
-
-        callOrder: function assertCallOrder() {
-            verifyIsStub.apply(null, arguments);
-            var expected = "", actual = "";
-
-            if (!sinon.calledInOrder(arguments)) {
-                try {
-                    expected = [].join.call(arguments, ", ");
-                    var calls = slice.call(arguments);
-                    var i = calls.length;
-                    while (i) {
-                        if (!calls[--i].called) {
-                            calls.splice(i, 1);
-                        }
-                    }
-                    actual = sinon.orderByFirstCall(calls).join(", ");
-                } catch (e) {
-                    // If this fails, we'll just fall back to the blank string
-                }
-
-                failAssertion(this, "expected " + expected + " to be " +
-                              "called in order but were called as " + actual);
-            } else {
-                assert.pass("callOrder");
-            }
-        },
-
-        callCount: function assertCallCount(method, count) {
-            verifyIsStub(method);
-
-            if (method.callCount != count) {
-                var msg = "expected %n to be called " + sinon.timesInWords(count) +
-                    " but was called %c%C";
-                failAssertion(this, method.printf(msg));
-            } else {
-                assert.pass("callCount");
-            }
-        },
-
-        expose: function expose(target, options) {
-            if (!target) {
-                throw new TypeError("target is null or undefined");
-            }
-
-            var o = options || {};
-            var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
-            var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
-
-            for (var method in this) {
-                if (method != "export" && (includeFail || !/^(fail)/.test(method))) {
-                    target[exposedName(prefix, method)] = this[method];
-                }
-            }
-
-            return target;
-        },
-
-        match: function match(actual, expectation) {
-            var matcher = sinon.match(expectation);
-            if (matcher.test(actual)) {
-                assert.pass("match");
-            } else {
-                var formatted = [
-                    "expected value to match",
-                    "    expected = " + sinon.format(expectation),
-                    "    actual = " + sinon.format(actual)
-                ]
-                failAssertion(this, formatted.join("\n"));
-            }
-        }
-    };
-
-    mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
-    mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; },
-                          "expected %n to not have been called but was called %c%C");
-    mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
-    mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
-    mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
-    mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
-    mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
-    mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
-    mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
-    mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
-    mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
-    mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
-    mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
-    mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
-    mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
-    mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
-    mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
-    mirrorPropAsAssertion("threw", "%n did not throw exception%C");
-    mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
-
-    sinon.assert = assert;
-
-    if (typeof define === "function" && define.amd) {
-        define(["module"], function(module) { module.exports = assert; });
-    } else if (commonJSModule) {
-        module.exports = assert;
-    }
-}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
-
-/**
- * @depend ../../sinon.js
- * @depend event.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global sinon, module, require, XDomainRequest*/
-/**
- * Fake XDomainRequest object
- */
-
-if (typeof sinon == "undefined") {
-    this.sinon = {};
-}
-sinon.xdr = { XDomainRequest: this.XDomainRequest };
-
-// wrapper for global
-(function (global) {
-    var xdr = sinon.xdr;
-    xdr.GlobalXDomainRequest = global.XDomainRequest;
-    xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined";
-    xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest :  false;
-
-    function FakeXDomainRequest() {
-        this.readyState = FakeXDomainRequest.UNSENT;
-        this.requestBody = null;
-        this.requestHeaders = {};
-        this.status = 0;
-        this.timeout = null;
-
-        if (typeof FakeXDomainRequest.onCreate == "function") {
-            FakeXDomainRequest.onCreate(this);
-        }
-    }
-
-    function verifyState(xdr) {
-        if (xdr.readyState !== FakeXDomainRequest.OPENED) {
-            throw new Error("INVALID_STATE_ERR");
-        }
-
-        if (xdr.sendFlag) {
-            throw new Error("INVALID_STATE_ERR");
-        }
-    }
-
-    function verifyRequestSent(xdr) {
-        if (xdr.readyState == FakeXDomainRequest.UNSENT) {
-            throw new Error("Request not sent");
-        }
-        if (xdr.readyState == FakeXDomainRequest.DONE) {
-            throw new Error("Request done");
-        }
-    }
-
-    function verifyResponseBodyType(body) {
-        if (typeof body != "string") {
-            var error = new Error("Attempted to respond to fake XDomainRequest with " +
-                                  body + ", which is not a string.");
-            error.name = "InvalidBodyException";
-            throw error;
-        }
-    }
-
-    sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, {
-        open: function open(method, url) {
-            this.method = method;
-            this.url = url;
-
-            this.responseText = null;
-            this.sendFlag = false;
-
-            this.readyStateChange(FakeXDomainRequest.OPENED);
-        },
-
-        readyStateChange: function readyStateChange(state) {
-            this.readyState = state;
-            var eventName = '';
-            switch (this.readyState) {
-            case FakeXDomainRequest.UNSENT:
-                break;
-            case FakeXDomainRequest.OPENED:
-                break;
-            case FakeXDomainRequest.LOADING:
-                if (this.sendFlag){
-                    //raise the progress event
-                    eventName = 'onprogress';
-                }
-                break;
-            case FakeXDomainRequest.DONE:
-                if (this.isTimeout){
-                    eventName = 'ontimeout'
-                }
-                else if (this.errorFlag || (this.status < 200 || this.status > 299)) {
-                    eventName = 'onerror';
-                }
-                else {
-                    eventName = 'onload'
-                }
-                break;
-            }
-
-            // raising event (if defined)
-            if (eventName) {
-                if (typeof this[eventName] == "function") {
-                    try {
-                        this[eventName]();
-                    } catch (e) {
-                        sinon.logError("Fake XHR " + eventName + " handler", e);
-                    }
-                }
-            }
-        },
-
-        send: function send(data) {
-            verifyState(this);
-
-            if (!/^(get|head)$/i.test(this.method)) {
-                this.requestBody = data;
-            }
-            this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
-
-            this.errorFlag = false;
-            this.sendFlag = true;
-            this.readyStateChange(FakeXDomainRequest.OPENED);
-
-            if (typeof this.onSend == "function") {
-                this.onSend(this);
-            }
-        },
-
-        abort: function abort() {
-            this.aborted = true;
-            this.responseText = null;
-            this.errorFlag = true;
-
-            if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) {
-                this.readyStateChange(sinon.FakeXDomainRequest.DONE);
-                this.sendFlag = false;
-            }
-        },
-
-        setResponseBody: function setResponseBody(body) {
-            verifyRequestSent(this);
-            verifyResponseBodyType(body);
-
-            var chunkSize = this.chunkSize || 10;
-            var index = 0;
-            this.responseText = "";
-
-            do {
-                this.readyStateChange(FakeXDomainRequest.LOADING);
-                this.responseText += body.substring(index, index + chunkSize);
-                index += chunkSize;
-            } while (index < body.length);
-
-            this.readyStateChange(FakeXDomainRequest.DONE);
-        },
-
-        respond: function respond(status, contentType, body) {
-            // content-type ignored, since XDomainRequest does not carry this
-            // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease
-            // test integration across browsers
-            this.status = typeof status == "number" ? status : 200;
-            this.setResponseBody(body || "");
-        },
-
-        simulatetimeout: function(){
-            this.status = 0;
-            this.isTimeout = true;
-            // Access to this should actually throw an error
-            this.responseText = undefined;
-            this.readyStateChange(FakeXDomainRequest.DONE);
-        }
-    });
-
-    sinon.extend(FakeXDomainRequest, {
-        UNSENT: 0,
-        OPENED: 1,
-        LOADING: 3,
-        DONE: 4
-    });
-
-    sinon.useFakeXDomainRequest = function () {
-        sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) {
-            if (xdr.supportsXDR) {
-                global.XDomainRequest = xdr.GlobalXDomainRequest;
-            }
-
-            delete sinon.FakeXDomainRequest.restore;
-
-            if (keepOnCreate !== true) {
-                delete sinon.FakeXDomainRequest.onCreate;
-            }
-        };
-        if (xdr.supportsXDR) {
-            global.XDomainRequest = sinon.FakeXDomainRequest;
-        }
-        return sinon.FakeXDomainRequest;
-    };
-
-    sinon.FakeXDomainRequest = FakeXDomainRequest;
-})(this);
-
-if (typeof module == "object" && typeof require == "function") {
-    module.exports = sinon;
-}
-
-return sinon;}.call(typeof window != 'undefined' && window || {}));
diff --git a/resources/lib/sinonjs/sinon-1.15.4.js b/resources/lib/sinonjs/sinon-1.15.4.js
new file mode 100644 (file)
index 0000000..20bc9e2
--- /dev/null
@@ -0,0 +1,5949 @@
+/**
+ * Sinon.JS 1.15.4, 2015/06/27
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ * 
+ * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright notice,
+ *       this list of conditions and the following disclaimer in the documentation
+ *       and/or other materials provided with the distribution.
+ *     * Neither the name of Christian Johansen nor the names of his contributors
+ *       may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+(function (root, factory) {
+  'use strict';
+  if (typeof define === 'function' && define.amd) {
+    define('sinon', [], function () {
+      return (root.sinon = factory());
+    });
+  } else if (typeof exports === 'object') {
+    module.exports = factory();
+  } else {
+    root.sinon = factory();
+  }
+}(this, function () {
+  'use strict';
+  var samsam, formatio, lolex;
+  (function () {
+                function define(mod, deps, fn) {
+                  if (mod == "samsam") {
+                    samsam = deps();
+                  } else if (typeof deps === "function" && mod.length === 0) {
+                    lolex = deps();
+                  } else if (typeof fn === "function") {
+                    formatio = fn(samsam);
+                  }
+                }
+    define.amd = {};
+((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
+ (typeof module === "object" &&
+      function (m) { module.exports = m(); }) || // Node
+ function (m) { this.samsam = m(); } // Browser globals
+)(function () {
+    var o = Object.prototype;
+    var div = typeof document !== "undefined" && document.createElement("div");
+
+    function isNaN(value) {
+        // Unlike global isNaN, this avoids type coercion
+        // typeof check avoids IE host object issues, hat tip to
+        // lodash
+        var val = value; // JsLint thinks value !== value is "weird"
+        return typeof value === "number" && value !== val;
+    }
+
+    function getClass(value) {
+        // Returns the internal [[Class]] by calling Object.prototype.toString
+        // with the provided value as this. Return value is a string, naming the
+        // internal class, e.g. "Array"
+        return o.toString.call(value).split(/[ \]]/)[1];
+    }
+
+    /**
+     * @name samsam.isArguments
+     * @param Object object
+     *
+     * Returns ``true`` if ``object`` is an ``arguments`` object,
+     * ``false`` otherwise.
+     */
+    function isArguments(object) {
+        if (getClass(object) === 'Arguments') { return true; }
+        if (typeof object !== "object" || typeof object.length !== "number" ||
+                getClass(object) === "Array") {
+            return false;
+        }
+        if (typeof object.callee == "function") { return true; }
+        try {
+            object[object.length] = 6;
+            delete object[object.length];
+        } catch (e) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @name samsam.isElement
+     * @param Object object
+     *
+     * Returns ``true`` if ``object`` is a DOM element node. Unlike
+     * Underscore.js/lodash, this function will return ``false`` if ``object``
+     * is an *element-like* object, i.e. a regular object with a ``nodeType``
+     * property that holds the value ``1``.
+     */
+    function isElement(object) {
+        if (!object || object.nodeType !== 1 || !div) { return false; }
+        try {
+            object.appendChild(div);
+            object.removeChild(div);
+        } catch (e) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * @name samsam.keys
+     * @param Object object
+     *
+     * Return an array of own property names.
+     */
+    function keys(object) {
+        var ks = [], prop;
+        for (prop in object) {
+            if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
+        }
+        return ks;
+    }
+
+    /**
+     * @name samsam.isDate
+     * @param Object value
+     *
+     * Returns true if the object is a ``Date``, or *date-like*. Duck typing
+     * of date objects work by checking that the object has a ``getTime``
+     * function whose return value equals the return value from the object's
+     * ``valueOf``.
+     */
+    function isDate(value) {
+        return typeof value.getTime == "function" &&
+            value.getTime() == value.valueOf();
+    }
+
+    /**
+     * @name samsam.isNegZero
+     * @param Object value
+     *
+     * Returns ``true`` if ``value`` is ``-0``.
+     */
+    function isNegZero(value) {
+        return value === 0 && 1 / value === -Infinity;
+    }
+
+    /**
+     * @name samsam.equal
+     * @param Object obj1
+     * @param Object obj2
+     *
+     * Returns ``true`` if two objects are strictly equal. Compared to
+     * ``===`` there are two exceptions:
+     *
+     *   - NaN is considered equal to NaN
+     *   - -0 and +0 are not considered equal
+     */
+    function identical(obj1, obj2) {
+        if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
+            return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
+        }
+    }
+
+
+    /**
+     * @name samsam.deepEqual
+     * @param Object obj1
+     * @param Object obj2
+     *
+     * Deep equal comparison. Two values are "deep equal" if:
+     *
+     *   - They are equal, according to samsam.identical
+     *   - They are both date objects representing the same time
+     *   - They are both arrays containing elements that are all deepEqual
+     *   - They are objects with the same set of properties, and each property
+     *     in ``obj1`` is deepEqual to the corresponding property in ``obj2``
+     *
+     * Supports cyclic objects.
+     */
+    function deepEqualCyclic(obj1, obj2) {
+
+        // used for cyclic comparison
+        // contain already visited objects
+        var objects1 = [],
+            objects2 = [],
+        // contain pathes (position in the object structure)
+        // of the already visited objects
+        // indexes same as in objects arrays
+            paths1 = [],
+            paths2 = [],
+        // contains combinations of already compared objects
+        // in the manner: { "$1['ref']$2['ref']": true }
+            compared = {};
+
+        /**
+         * used to check, if the value of a property is an object
+         * (cyclic logic is only needed for objects)
+         * only needed for cyclic logic
+         */
+        function isObject(value) {
+
+            if (typeof value === 'object' && value !== null &&
+                    !(value instanceof Boolean) &&
+                    !(value instanceof Date)    &&
+                    !(value instanceof Number)  &&
+                    !(value instanceof RegExp)  &&
+                    !(value instanceof String)) {
+
+                return true;
+            }
+
+            return false;
+        }
+
+        /**
+         * returns the index of the given object in the
+         * given objects array, -1 if not contained
+         * only needed for cyclic logic
+         */
+        function getIndex(objects, obj) {
+
+            var i;
+            for (i = 0; i < objects.length; i++) {
+                if (objects[i] === obj) {
+                    return i;
+                }
+            }
+
+            return -1;
+        }
+
+        // does the recursion for the deep equal check
+        return (function deepEqual(obj1, obj2, path1, path2) {
+            var type1 = typeof obj1;
+            var type2 = typeof obj2;
+
+            // == null also matches undefined
+            if (obj1 === obj2 ||
+                    isNaN(obj1) || isNaN(obj2) ||
+                    obj1 == null || obj2 == null ||
+                    type1 !== "object" || type2 !== "object") {
+
+                return identical(obj1, obj2);
+            }
+
+            // Elements are only equal if identical(expected, actual)
+            if (isElement(obj1) || isElement(obj2)) { return false; }
+
+            var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
+            if (isDate1 || isDate2) {
+                if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
+                    return false;
+                }
+            }
+
+            if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
+                if (obj1.toString() !== obj2.toString()) { return false; }
+            }
+
+            var class1 = getClass(obj1);
+            var class2 = getClass(obj2);
+            var keys1 = keys(obj1);
+            var keys2 = keys(obj2);
+
+            if (isArguments(obj1) || isArguments(obj2)) {
+                if (obj1.length !== obj2.length) { return false; }
+            } else {
+                if (type1 !== type2 || class1 !== class2 ||
+                        keys1.length !== keys2.length) {
+                    return false;
+                }
+            }
+
+            var key, i, l,
+                // following vars are used for the cyclic logic
+                value1, value2,
+                isObject1, isObject2,
+                index1, index2,
+                newPath1, newPath2;
+
+            for (i = 0, l = keys1.length; i < l; i++) {
+                key = keys1[i];
+                if (!o.hasOwnProperty.call(obj2, key)) {
+                    return false;
+                }
+
+                // Start of the cyclic logic
+
+                value1 = obj1[key];
+                value2 = obj2[key];
+
+                isObject1 = isObject(value1);
+                isObject2 = isObject(value2);
+
+                // determine, if the objects were already visited
+                // (it's faster to check for isObject first, than to
+                // get -1 from getIndex for non objects)
+                index1 = isObject1 ? getIndex(objects1, value1) : -1;
+                index2 = isObject2 ? getIndex(objects2, value2) : -1;
+
+                // determine the new pathes of the objects
+                // - for non cyclic objects the current path will be extended
+                //   by current property name
+                // - for cyclic objects the stored path is taken
+                newPath1 = index1 !== -1
+                    ? paths1[index1]
+                    : path1 + '[' + JSON.stringify(key) + ']';
+                newPath2 = index2 !== -1
+                    ? paths2[index2]
+                    : path2 + '[' + JSON.stringify(key) + ']';
+
+                // stop recursion if current objects are already compared
+                if (compared[newPath1 + newPath2]) {
+                    return true;
+                }
+
+                // remember the current objects and their pathes
+                if (index1 === -1 && isObject1) {
+                    objects1.push(value1);
+                    paths1.push(newPath1);
+                }
+                if (index2 === -1 && isObject2) {
+                    objects2.push(value2);
+                    paths2.push(newPath2);
+                }
+
+                // remember that the current objects are already compared
+                if (isObject1 && isObject2) {
+                    compared[newPath1 + newPath2] = true;
+                }
+
+                // End of cyclic logic
+
+                // neither value1 nor value2 is a cycle
+                // continue with next level
+                if (!deepEqual(value1, value2, newPath1, newPath2)) {
+                    return false;
+                }
+            }
+
+            return true;
+
+        }(obj1, obj2, '$1', '$2'));
+    }
+
+    var match;
+
+    function arrayContains(array, subset) {
+        if (subset.length === 0) { return true; }
+        var i, l, j, k;
+        for (i = 0, l = array.length; i < l; ++i) {
+            if (match(array[i], subset[0])) {
+                for (j = 0, k = subset.length; j < k; ++j) {
+                    if (!match(array[i + j], subset[j])) { return false; }
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @name samsam.match
+     * @param Object object
+     * @param Object matcher
+     *
+     * Compare arbitrary value ``object`` with matcher.
+     */
+    match = function match(object, matcher) {
+        if (matcher && typeof matcher.test === "function") {
+            return matcher.test(object);
+        }
+
+        if (typeof matcher === "function") {
+            return matcher(object) === true;
+        }
+
+        if (typeof matcher === "string") {
+            matcher = matcher.toLowerCase();
+            var notNull = typeof object === "string" || !!object;
+            return notNull &&
+                (String(object)).toLowerCase().indexOf(matcher) >= 0;
+        }
+
+        if (typeof matcher === "number") {
+            return matcher === object;
+        }
+
+        if (typeof matcher === "boolean") {
+            return matcher === object;
+        }
+
+        if (typeof(matcher) === "undefined") {
+            return typeof(object) === "undefined";
+        }
+
+        if (matcher === null) {
+            return object === null;
+        }
+
+        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
+            return arrayContains(object, matcher);
+        }
+
+        if (matcher && typeof matcher === "object") {
+            if (matcher === object) {
+                return true;
+            }
+            var prop;
+            for (prop in matcher) {
+                var value = object[prop];
+                if (typeof value === "undefined" &&
+                        typeof object.getAttribute === "function") {
+                    value = object.getAttribute(prop);
+                }
+                if (matcher[prop] === null || typeof matcher[prop] === 'undefined') {
+                    if (value !== matcher[prop]) {
+                        return false;
+                    }
+                } else if (typeof  value === "undefined" || !match(value, matcher[prop])) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        throw new Error("Matcher was not a string, a number, a " +
+                        "function, a boolean or an object");
+    };
+
+    return {
+        isArguments: isArguments,
+        isElement: isElement,
+        isDate: isDate,
+        isNegZero: isNegZero,
+        identical: identical,
+        deepEqual: deepEqualCyclic,
+        match: match,
+        keys: keys
+    };
+});
+((typeof define === "function" && define.amd && function (m) {
+    define("formatio", ["samsam"], m);
+}) || (typeof module === "object" && function (m) {
+    module.exports = m(require("samsam"));
+}) || function (m) { this.formatio = m(this.samsam); }
+)(function (samsam) {
+    
+    var formatio = {
+        excludeConstructors: ["Object", /^.$/],
+        quoteStrings: true,
+        limitChildrenCount: 0
+    };
+
+    var hasOwn = Object.prototype.hasOwnProperty;
+
+    var specialObjects = [];
+    if (typeof global !== "undefined") {
+        specialObjects.push({ object: global, value: "[object global]" });
+    }
+    if (typeof document !== "undefined") {
+        specialObjects.push({
+            object: document,
+            value: "[object HTMLDocument]"
+        });
+    }
+    if (typeof window !== "undefined") {
+        specialObjects.push({ object: window, value: "[object Window]" });
+    }
+
+    function functionName(func) {
+        if (!func) { return ""; }
+        if (func.displayName) { return func.displayName; }
+        if (func.name) { return func.name; }
+        var matches = func.toString().match(/function\s+([^\(]+)/m);
+        return (matches && matches[1]) || "";
+    }
+
+    function constructorName(f, object) {
+        var name = functionName(object && object.constructor);
+        var excludes = f.excludeConstructors ||
+                formatio.excludeConstructors || [];
+
+        var i, l;
+        for (i = 0, l = excludes.length; i < l; ++i) {
+            if (typeof excludes[i] === "string" && excludes[i] === name) {
+                return "";
+            } else if (excludes[i].test && excludes[i].test(name)) {
+                return "";
+            }
+        }
+
+        return name;
+    }
+
+    function isCircular(object, objects) {
+        if (typeof object !== "object") { return false; }
+        var i, l;
+        for (i = 0, l = objects.length; i < l; ++i) {
+            if (objects[i] === object) { return true; }
+        }
+        return false;
+    }
+
+    function ascii(f, object, processed, indent) {
+        if (typeof object === "string") {
+            var qs = f.quoteStrings;
+            var quote = typeof qs !== "boolean" || qs;
+            return processed || quote ? '"' + object + '"' : object;
+        }
+
+        if (typeof object === "function" && !(object instanceof RegExp)) {
+            return ascii.func(object);
+        }
+
+        processed = processed || [];
+
+        if (isCircular(object, processed)) { return "[Circular]"; }
+
+        if (Object.prototype.toString.call(object) === "[object Array]") {
+            return ascii.array.call(f, object, processed);
+        }
+
+        if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
+        if (samsam.isElement(object)) { return ascii.element(object); }
+
+        if (typeof object.toString === "function" &&
+                object.toString !== Object.prototype.toString) {
+            return object.toString();
+        }
+
+        var i, l;
+        for (i = 0, l = specialObjects.length; i < l; i++) {
+            if (object === specialObjects[i].object) {
+                return specialObjects[i].value;
+            }
+        }
+
+        return ascii.object.call(f, object, processed, indent);
+    }
+
+    ascii.func = function (func) {
+        return "function " + functionName(func) + "() {}";
+    };
+
+    ascii.array = function (array, processed) {
+        processed = processed || [];
+        processed.push(array);
+        var pieces = [];
+        var i, l;
+        l = (this.limitChildrenCount > 0) ? 
+            Math.min(this.limitChildrenCount, array.length) : array.length;
+
+        for (i = 0; i < l; ++i) {
+            pieces.push(ascii(this, array[i], processed));
+        }
+
+        if(l < array.length)
+            pieces.push("[... " + (array.length - l) + " more elements]");
+
+        return "[" + pieces.join(", ") + "]";
+    };
+
+    ascii.object = function (object, processed, indent) {
+        processed = processed || [];
+        processed.push(object);
+        indent = indent || 0;
+        var pieces = [], properties = samsam.keys(object).sort();
+        var length = 3;
+        var prop, str, obj, i, k, l;
+        l = (this.limitChildrenCount > 0) ? 
+            Math.min(this.limitChildrenCount, properties.length) : properties.length;
+
+        for (i = 0; i < l; ++i) {
+            prop = properties[i];
+            obj = object[prop];
+
+            if (isCircular(obj, processed)) {
+                str = "[Circular]";
+            } else {
+                str = ascii(this, obj, processed, indent + 2);
+            }
+
+            str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
+            length += str.length;
+            pieces.push(str);
+        }
+
+        var cons = constructorName(this, object);
+        var prefix = cons ? "[" + cons + "] " : "";
+        var is = "";
+        for (i = 0, k = indent; i < k; ++i) { is += " "; }
+
+        if(l < properties.length)
+            pieces.push("[... " + (properties.length - l) + " more elements]");
+
+        if (length + indent > 80) {
+            return prefix + "{\n  " + is + pieces.join(",\n  " + is) + "\n" +
+                is + "}";
+        }
+        return prefix + "{ " + pieces.join(", ") + " }";
+    };
+
+    ascii.element = function (element) {
+        var tagName = element.tagName.toLowerCase();
+        var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
+
+        for (i = 0, l = attrs.length; i < l; ++i) {
+            attr = attrs.item(i);
+            attrName = attr.nodeName.toLowerCase().replace("html:", "");
+            val = attr.nodeValue;
+            if (attrName !== "contenteditable" || val !== "inherit") {
+                if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
+            }
+        }
+
+        var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
+        var content = element.innerHTML;
+
+        if (content.length > 20) {
+            content = content.substr(0, 20) + "[...]";
+        }
+
+        var res = formatted + pairs.join(" ") + ">" + content +
+                "</" + tagName + ">";
+
+        return res.replace(/ contentEditable="inherit"/, "");
+    };
+
+    function Formatio(options) {
+        for (var opt in options) {
+            this[opt] = options[opt];
+        }
+    }
+
+    Formatio.prototype = {
+        functionName: functionName,
+
+        configure: function (options) {
+            return new Formatio(options);
+        },
+
+        constructorName: function (object) {
+            return constructorName(this, object);
+        },
+
+        ascii: function (object, processed, indent) {
+            return ascii(this, object, processed, indent);
+        }
+    };
+
+    return Formatio.prototype;
+});
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (global){
+/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
+/*global global*/
+/**
+ * @author Christian Johansen (christian@cjohansen.no) and contributors
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+// node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
+// browsers, a number.
+// see https://github.com/cjohansen/Sinon.JS/pull/436
+var timeoutResult = setTimeout(function() {}, 0);
+var addTimerReturnsObject = typeof timeoutResult === "object";
+clearTimeout(timeoutResult);
+
+var NativeDate = Date;
+var id = 1;
+
+/**
+ * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
+ * number of milliseconds. This is used to support human-readable strings passed
+ * to clock.tick()
+ */
+function parseTime(str) {
+    if (!str) {
+        return 0;
+    }
+
+    var strings = str.split(":");
+    var l = strings.length, i = l;
+    var ms = 0, parsed;
+
+    if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
+        throw new Error("tick only understands numbers and 'h:m:s'");
+    }
+
+    while (i--) {
+        parsed = parseInt(strings[i], 10);
+
+        if (parsed >= 60) {
+            throw new Error("Invalid time " + str);
+        }
+
+        ms += parsed * Math.pow(60, (l - i - 1));
+    }
+
+    return ms * 1000;
+}
+
+/**
+ * Used to grok the `now` parameter to createClock.
+ */
+function getEpoch(epoch) {
+    if (!epoch) { return 0; }
+    if (typeof epoch.getTime === "function") { return epoch.getTime(); }
+    if (typeof epoch === "number") { return epoch; }
+    throw new TypeError("now should be milliseconds since UNIX epoch");
+}
+
+function inRange(from, to, timer) {
+    return timer && timer.callAt >= from && timer.callAt <= to;
+}
+
+function mirrorDateProperties(target, source) {
+    if (source.now) {
+        target.now = function now() {
+            return target.clock.now;
+        };
+    } else {
+        delete target.now;
+    }
+
+    if (source.toSource) {
+        target.toSource = function toSource() {
+            return source.toSource();
+        };
+    } else {
+        delete target.toSource;
+    }
+
+    target.toString = function toString() {
+        return source.toString();
+    };
+
+    target.prototype = source.prototype;
+    target.parse = source.parse;
+    target.UTC = source.UTC;
+    target.prototype.toUTCString = source.prototype.toUTCString;
+
+    for (var prop in source) {
+        if (source.hasOwnProperty(prop)) {
+            target[prop] = source[prop];
+        }
+    }
+
+    return target;
+}
+
+function createDate() {
+    function ClockDate(year, month, date, hour, minute, second, ms) {
+        // Defensive and verbose to avoid potential harm in passing
+        // explicit undefined when user does not pass argument
+        switch (arguments.length) {
+        case 0:
+            return new NativeDate(ClockDate.clock.now);
+        case 1:
+            return new NativeDate(year);
+        case 2:
+            return new NativeDate(year, month);
+        case 3:
+            return new NativeDate(year, month, date);
+        case 4:
+            return new NativeDate(year, month, date, hour);
+        case 5:
+            return new NativeDate(year, month, date, hour, minute);
+        case 6:
+            return new NativeDate(year, month, date, hour, minute, second);
+        default:
+            return new NativeDate(year, month, date, hour, minute, second, ms);
+        }
+    }
+
+    return mirrorDateProperties(ClockDate, NativeDate);
+}
+
+function addTimer(clock, timer) {
+    if (typeof timer.func === "undefined") {
+        throw new Error("Callback must be provided to timer calls");
+    }
+
+    if (!clock.timers) {
+        clock.timers = {};
+    }
+
+    timer.id = id++;
+    timer.createdAt = clock.now;
+    timer.callAt = clock.now + (timer.delay || 0);
+
+    clock.timers[timer.id] = timer;
+
+    if (addTimerReturnsObject) {
+        return {
+            id: timer.id,
+            ref: function() {},
+            unref: function() {}
+        };
+    }
+    else {
+        return timer.id;
+    }
+}
+
+function firstTimerInRange(clock, from, to) {
+    var timers = clock.timers, timer = null;
+
+    for (var id in timers) {
+        if (!inRange(from, to, timers[id])) {
+            continue;
+        }
+
+        if (!timer || ~compareTimers(timer, timers[id])) {
+            timer = timers[id];
+        }
+    }
+
+    return timer;
+}
+
+function compareTimers(a, b) {
+    // Sort first by absolute timing
+    if (a.callAt < b.callAt) {
+        return -1;
+    }
+    if (a.callAt > b.callAt) {
+        return 1;
+    }
+
+    // Sort next by immediate, immediate timers take precedence
+    if (a.immediate && !b.immediate) {
+        return -1;
+    }
+    if (!a.immediate && b.immediate) {
+        return 1;
+    }
+
+    // Sort next by creation time, earlier-created timers take precedence
+    if (a.createdAt < b.createdAt) {
+        return -1;
+    }
+    if (a.createdAt > b.createdAt) {
+        return 1;
+    }
+
+    // Sort next by id, lower-id timers take precedence
+    if (a.id < b.id) {
+        return -1;
+    }
+    if (a.id > b.id) {
+        return 1;
+    }
+
+    // As timer ids are unique, no fallback `0` is necessary
+}
+
+function callTimer(clock, timer) {
+    if (typeof timer.interval == "number") {
+        clock.timers[timer.id].callAt += timer.interval;
+    } else {
+        delete clock.timers[timer.id];
+    }
+
+    try {
+        if (typeof timer.func == "function") {
+            timer.func.apply(null, timer.args);
+        } else {
+            eval(timer.func);
+        }
+    } catch (e) {
+        var exception = e;
+    }
+
+    if (!clock.timers[timer.id]) {
+        if (exception) {
+            throw exception;
+        }
+        return;
+    }
+
+    if (exception) {
+        throw exception;
+    }
+}
+
+function uninstall(clock, target) {
+    var method;
+
+    for (var i = 0, l = clock.methods.length; i < l; i++) {
+        method = clock.methods[i];
+
+        if (target[method].hadOwnProperty) {
+            target[method] = clock["_" + method];
+        } else {
+            try {
+                delete target[method];
+            } catch (e) {}
+        }
+    }
+
+    // Prevent multiple executions which will completely remove these props
+    clock.methods = [];
+}
+
+function hijackMethod(target, method, clock) {
+    clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
+    clock["_" + method] = target[method];
+
+    if (method == "Date") {
+        var date = mirrorDateProperties(clock[method], target[method]);
+        target[method] = date;
+    } else {
+        target[method] = function () {
+            return clock[method].apply(clock, arguments);
+        };
+
+        for (var prop in clock[method]) {
+            if (clock[method].hasOwnProperty(prop)) {
+                target[method][prop] = clock[method][prop];
+            }
+        }
+    }
+
+    target[method].clock = clock;
+}
+
+var timers = {
+    setTimeout: setTimeout,
+    clearTimeout: clearTimeout,
+    setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+    clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
+    setInterval: setInterval,
+    clearInterval: clearInterval,
+    Date: Date
+};
+
+var keys = Object.keys || function (obj) {
+    var ks = [];
+    for (var key in obj) {
+        ks.push(key);
+    }
+    return ks;
+};
+
+exports.timers = timers;
+
+var createClock = exports.createClock = function (now) {
+    var clock = {
+        now: getEpoch(now),
+        timeouts: {},
+        Date: createDate()
+    };
+
+    clock.Date.clock = clock;
+
+    clock.setTimeout = function setTimeout(func, timeout) {
+        return addTimer(clock, {
+            func: func,
+            args: Array.prototype.slice.call(arguments, 2),
+            delay: timeout
+        });
+    };
+
+    clock.clearTimeout = function clearTimeout(timerId) {
+        if (!timerId) {
+            // null appears to be allowed in most browsers, and appears to be
+            // relied upon by some libraries, like Bootstrap carousel
+            return;
+        }
+        if (!clock.timers) {
+            clock.timers = [];
+        }
+        // in Node, timerId is an object with .ref()/.unref(), and
+        // its .id field is the actual timer id.
+        if (typeof timerId === "object") {
+            timerId = timerId.id
+        }
+        if (timerId in clock.timers) {
+            delete clock.timers[timerId];
+        }
+    };
+
+    clock.setInterval = function setInterval(func, timeout) {
+        return addTimer(clock, {
+            func: func,
+            args: Array.prototype.slice.call(arguments, 2),
+            delay: timeout,
+            interval: timeout
+        });
+    };
+
+    clock.clearInterval = function clearInterval(timerId) {
+        clock.clearTimeout(timerId);
+    };
+
+    clock.setImmediate = function setImmediate(func) {
+        return addTimer(clock, {
+            func: func,
+            args: Array.prototype.slice.call(arguments, 1),
+            immediate: true
+        });
+    };
+
+    clock.clearImmediate = function clearImmediate(timerId) {
+        clock.clearTimeout(timerId);
+    };
+
+    clock.tick = function tick(ms) {
+        ms = typeof ms == "number" ? ms : parseTime(ms);
+        var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now;
+        var timer = firstTimerInRange(clock, tickFrom, tickTo);
+
+        var firstException;
+        while (timer && tickFrom <= tickTo) {
+            if (clock.timers[timer.id]) {
+                tickFrom = clock.now = timer.callAt;
+                try {
+                    callTimer(clock, timer);
+                } catch (e) {
+                    firstException = firstException || e;
+                }
+            }
+
+            timer = firstTimerInRange(clock, previous, tickTo);
+            previous = tickFrom;
+        }
+
+        clock.now = tickTo;
+
+        if (firstException) {
+            throw firstException;
+        }
+
+        return clock.now;
+    };
+
+    clock.reset = function reset() {
+        clock.timers = {};
+    };
+
+    return clock;
+};
+
+exports.install = function install(target, now, toFake) {
+    if (typeof target === "number") {
+        toFake = now;
+        now = target;
+        target = null;
+    }
+
+    if (!target) {
+        target = global;
+    }
+
+    var clock = createClock(now);
+
+    clock.uninstall = function () {
+        uninstall(clock, target);
+    };
+
+    clock.methods = toFake || [];
+
+    if (clock.methods.length === 0) {
+        clock.methods = keys(timers);
+    }
+
+    for (var i = 0, l = clock.methods.length; i < l; i++) {
+        hijackMethod(target, clock.methods[i], clock);
+    }
+
+    return clock;
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}]},{},[1])(1)
+});
+  })();
+  var define;
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+var sinon = (function () {
+"use strict";
+
+    var sinon;
+    var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        sinon = module.exports = require("./sinon/util/core");
+        require("./sinon/extend");
+        require("./sinon/typeOf");
+        require("./sinon/times_in_words");
+        require("./sinon/spy");
+        require("./sinon/call");
+        require("./sinon/behavior");
+        require("./sinon/stub");
+        require("./sinon/mock");
+        require("./sinon/collection");
+        require("./sinon/assert");
+        require("./sinon/sandbox");
+        require("./sinon/test");
+        require("./sinon/test_case");
+        require("./sinon/match");
+        require("./sinon/format");
+        require("./sinon/log_error");
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+        sinon = module.exports;
+    } else {
+        sinon = {};
+    }
+
+    return sinon;
+}());
+
+/**
+ * @depend ../../sinon.js
+ */
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var div = typeof document != "undefined" && document.createElement("div");
+    var hasOwn = Object.prototype.hasOwnProperty;
+
+    function isDOMNode(obj) {
+        var success = false;
+
+        try {
+            obj.appendChild(div);
+            success = div.parentNode == obj;
+        } catch (e) {
+            return false;
+        } finally {
+            try {
+                obj.removeChild(div);
+            } catch (e) {
+                // Remove failed, not much we can do about that
+            }
+        }
+
+        return success;
+    }
+
+    function isElement(obj) {
+        return div && obj && obj.nodeType === 1 && isDOMNode(obj);
+    }
+
+    function isFunction(obj) {
+        return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
+    }
+
+    function isReallyNaN(val) {
+        return typeof val === "number" && isNaN(val);
+    }
+
+    function mirrorProperties(target, source) {
+        for (var prop in source) {
+            if (!hasOwn.call(target, prop)) {
+                target[prop] = source[prop];
+            }
+        }
+    }
+
+    function isRestorable(obj) {
+        return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
+    }
+
+    // Cheap way to detect if we have ES5 support.
+    var hasES5Support = "keys" in Object;
+
+    function makeApi(sinon) {
+        sinon.wrapMethod = function wrapMethod(object, property, method) {
+            if (!object) {
+                throw new TypeError("Should wrap property of object");
+            }
+
+            if (typeof method != "function" && typeof method != "object") {
+                throw new TypeError("Method wrapper should be a function or a property descriptor");
+            }
+
+            function checkWrappedMethod(wrappedMethod) {
+                if (!isFunction(wrappedMethod)) {
+                    error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+                                        property + " as function");
+                } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
+                    error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+                } else if (wrappedMethod.calledBefore) {
+                    var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
+                    error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
+                }
+
+                if (error) {
+                    if (wrappedMethod && wrappedMethod.stackTrace) {
+                        error.stack += "\n--------------\n" + wrappedMethod.stackTrace;
+                    }
+                    throw error;
+                }
+            }
+
+            var error, wrappedMethod;
+
+            // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
+            // when using hasOwn.call on objects from other frames.
+            var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
+
+            if (hasES5Support) {
+                var methodDesc = (typeof method == "function") ? {value: method} : method,
+                    wrappedMethodDesc = sinon.getPropertyDescriptor(object, property),
+                    i;
+
+                if (!wrappedMethodDesc) {
+                    error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+                                        property + " as function");
+                } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {
+                    error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+                }
+                if (error) {
+                    if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) {
+                        error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace;
+                    }
+                    throw error;
+                }
+
+                var types = sinon.objectKeys(methodDesc);
+                for (i = 0; i < types.length; i++) {
+                    wrappedMethod = wrappedMethodDesc[types[i]];
+                    checkWrappedMethod(wrappedMethod);
+                }
+
+                mirrorProperties(methodDesc, wrappedMethodDesc);
+                for (i = 0; i < types.length; i++) {
+                    mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
+                }
+                Object.defineProperty(object, property, methodDesc);
+            } else {
+                wrappedMethod = object[property];
+                checkWrappedMethod(wrappedMethod);
+                object[property] = method;
+                method.displayName = property;
+            }
+
+            method.displayName = property;
+
+            // Set up a stack trace which can be used later to find what line of
+            // code the original method was created on.
+            method.stackTrace = (new Error("Stack Trace for original")).stack;
+
+            method.restore = function () {
+                // For prototype properties try to reset by delete first.
+                // If this fails (ex: localStorage on mobile safari) then force a reset
+                // via direct assignment.
+                if (!owned) {
+                    // In some cases `delete` may throw an error
+                    try {
+                        delete object[property];
+                    } catch (e) {}
+                    // For native code functions `delete` fails without throwing an error
+                    // on Chrome < 43, PhantomJS, etc.
+                } else if (hasES5Support) {
+                    Object.defineProperty(object, property, wrappedMethodDesc);
+                }
+
+                // Use strict equality comparison to check failures then force a reset
+                // via direct assignment.
+                if (object[property] === method) {
+                    object[property] = wrappedMethod;
+                }
+            };
+
+            method.restore.sinon = true;
+
+            if (!hasES5Support) {
+                mirrorProperties(method, wrappedMethod);
+            }
+
+            return method;
+        };
+
+        sinon.create = function create(proto) {
+            var F = function () {};
+            F.prototype = proto;
+            return new F();
+        };
+
+        sinon.deepEqual = function deepEqual(a, b) {
+            if (sinon.match && sinon.match.isMatcher(a)) {
+                return a.test(b);
+            }
+
+            if (typeof a != "object" || typeof b != "object") {
+                if (isReallyNaN(a) && isReallyNaN(b)) {
+                    return true;
+                } else {
+                    return a === b;
+                }
+            }
+
+            if (isElement(a) || isElement(b)) {
+                return a === b;
+            }
+
+            if (a === b) {
+                return true;
+            }
+
+            if ((a === null && b !== null) || (a !== null && b === null)) {
+                return false;
+            }
+
+            if (a instanceof RegExp && b instanceof RegExp) {
+                return (a.source === b.source) && (a.global === b.global) &&
+                    (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
+            }
+
+            var aString = Object.prototype.toString.call(a);
+            if (aString != Object.prototype.toString.call(b)) {
+                return false;
+            }
+
+            if (aString == "[object Date]") {
+                return a.valueOf() === b.valueOf();
+            }
+
+            var prop, aLength = 0, bLength = 0;
+
+            if (aString == "[object Array]" && a.length !== b.length) {
+                return false;
+            }
+
+            for (prop in a) {
+                aLength += 1;
+
+                if (!(prop in b)) {
+                    return false;
+                }
+
+                if (!deepEqual(a[prop], b[prop])) {
+                    return false;
+                }
+            }
+
+            for (prop in b) {
+                bLength += 1;
+            }
+
+            return aLength == bLength;
+        };
+
+        sinon.functionName = function functionName(func) {
+            var name = func.displayName || func.name;
+
+            // Use function decomposition as a last resort to get function
+            // name. Does not rely on function decomposition to work - if it
+            // doesn't debugging will be slightly less informative
+            // (i.e. toString will say 'spy' rather than 'myFunc').
+            if (!name) {
+                var matches = func.toString().match(/function ([^\s\(]+)/);
+                name = matches && matches[1];
+            }
+
+            return name;
+        };
+
+        sinon.functionToString = function toString() {
+            if (this.getCall && this.callCount) {
+                var thisValue, prop, i = this.callCount;
+
+                while (i--) {
+                    thisValue = this.getCall(i).thisValue;
+
+                    for (prop in thisValue) {
+                        if (thisValue[prop] === this) {
+                            return prop;
+                        }
+                    }
+                }
+            }
+
+            return this.displayName || "sinon fake";
+        };
+
+        sinon.objectKeys = function objectKeys(obj) {
+            if (obj !== Object(obj)) {
+                throw new TypeError("sinon.objectKeys called on a non-object");
+            }
+
+            var keys = [];
+            var key;
+            for (key in obj) {
+                if (hasOwn.call(obj, key)) {
+                    keys.push(key);
+                }
+            }
+
+            return keys;
+        };
+
+        sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) {
+            var proto = object, descriptor;
+            while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) {
+                proto = Object.getPrototypeOf(proto);
+            }
+            return descriptor;
+        }
+
+        sinon.getConfig = function (custom) {
+            var config = {};
+            custom = custom || {};
+            var defaults = sinon.defaultConfig;
+
+            for (var prop in defaults) {
+                if (defaults.hasOwnProperty(prop)) {
+                    config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
+                }
+            }
+
+            return config;
+        };
+
+        sinon.defaultConfig = {
+            injectIntoThis: true,
+            injectInto: null,
+            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+            useFakeTimers: true,
+            useFakeServer: true
+        };
+
+        sinon.timesInWords = function timesInWords(count) {
+            return count == 1 && "once" ||
+                count == 2 && "twice" ||
+                count == 3 && "thrice" ||
+                (count || 0) + " times";
+        };
+
+        sinon.calledInOrder = function (spies) {
+            for (var i = 1, l = spies.length; i < l; i++) {
+                if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
+                    return false;
+                }
+            }
+
+            return true;
+        };
+
+        sinon.orderByFirstCall = function (spies) {
+            return spies.sort(function (a, b) {
+                // uuid, won't ever be equal
+                var aCall = a.getCall(0);
+                var bCall = b.getCall(0);
+                var aId = aCall && aCall.callId || -1;
+                var bId = bCall && bCall.callId || -1;
+
+                return aId < bId ? -1 : 1;
+            });
+        };
+
+        sinon.createStubInstance = function (constructor) {
+            if (typeof constructor !== "function") {
+                throw new TypeError("The constructor should be a function.");
+            }
+            return sinon.stub(sinon.create(constructor.prototype));
+        };
+
+        sinon.restore = function (object) {
+            if (object !== null && typeof object === "object") {
+                for (var prop in object) {
+                    if (isRestorable(object[prop])) {
+                        object[prop].restore();
+                    }
+                }
+            } else if (isRestorable(object)) {
+                object.restore();
+            }
+        };
+
+        return sinon;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports) {
+        makeApi(exports);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+
+(function (sinon) {
+    function makeApi(sinon) {
+
+        // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+        var hasDontEnumBug = (function () {
+            var obj = {
+                constructor: function () {
+                    return "0";
+                },
+                toString: function () {
+                    return "1";
+                },
+                valueOf: function () {
+                    return "2";
+                },
+                toLocaleString: function () {
+                    return "3";
+                },
+                prototype: function () {
+                    return "4";
+                },
+                isPrototypeOf: function () {
+                    return "5";
+                },
+                propertyIsEnumerable: function () {
+                    return "6";
+                },
+                hasOwnProperty: function () {
+                    return "7";
+                },
+                length: function () {
+                    return "8";
+                },
+                unique: function () {
+                    return "9"
+                }
+            };
+
+            var result = [];
+            for (var prop in obj) {
+                result.push(obj[prop]());
+            }
+            return result.join("") !== "0123456789";
+        })();
+
+        /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
+         *         override properties in previous sources.
+         *
+         * target - The Object to extend
+         * sources - Objects to copy properties from.
+         *
+         * Returns the extended target
+         */
+        function extend(target /*, sources */) {
+            var sources = Array.prototype.slice.call(arguments, 1),
+                source, i, prop;
+
+            for (i = 0; i < sources.length; i++) {
+                source = sources[i];
+
+                for (prop in source) {
+                    if (source.hasOwnProperty(prop)) {
+                        target[prop] = source[prop];
+                    }
+                }
+
+                // Make sure we copy (own) toString method even when in JScript with DontEnum bug
+                // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+                if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) {
+                    target.toString = source.toString;
+                }
+            }
+
+            return target;
+        };
+
+        sinon.extend = extend;
+        return sinon.extend;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+
+(function (sinon) {
+    function makeApi(sinon) {
+
+        function timesInWords(count) {
+            switch (count) {
+                case 1:
+                    return "once";
+                case 2:
+                    return "twice";
+                case 3:
+                    return "thrice";
+                default:
+                    return (count || 0) + " times";
+            }
+        }
+
+        sinon.timesInWords = timesInWords;
+        return sinon.timesInWords;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (sinon, formatio) {
+    function makeApi(sinon) {
+        function typeOf(value) {
+            if (value === null) {
+                return "null";
+            } else if (value === undefined) {
+                return "undefined";
+            }
+            var string = Object.prototype.toString.call(value);
+            return string.substring(8, string.length - 1).toLowerCase();
+        };
+
+        sinon.typeOf = typeOf;
+        return sinon.typeOf;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(
+    (typeof sinon == "object" && sinon || null),
+    (typeof formatio == "object" && formatio)
+));
+
+/**
+ * @depend util/core.js
+ * @depend typeOf.js
+ */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Match functions
+ *
+ * @author Maximilian Antoni (mail@maxantoni.de)
+ * @license BSD
+ *
+ * Copyright (c) 2012 Maximilian Antoni
+ */
+
+(function (sinon) {
+    function makeApi(sinon) {
+        function assertType(value, type, name) {
+            var actual = sinon.typeOf(value);
+            if (actual !== type) {
+                throw new TypeError("Expected type of " + name + " to be " +
+                    type + ", but was " + actual);
+            }
+        }
+
+        var matcher = {
+            toString: function () {
+                return this.message;
+            }
+        };
+
+        function isMatcher(object) {
+            return matcher.isPrototypeOf(object);
+        }
+
+        function matchObject(expectation, actual) {
+            if (actual === null || actual === undefined) {
+                return false;
+            }
+            for (var key in expectation) {
+                if (expectation.hasOwnProperty(key)) {
+                    var exp = expectation[key];
+                    var act = actual[key];
+                    if (match.isMatcher(exp)) {
+                        if (!exp.test(act)) {
+                            return false;
+                        }
+                    } else if (sinon.typeOf(exp) === "object") {
+                        if (!matchObject(exp, act)) {
+                            return false;
+                        }
+                    } else if (!sinon.deepEqual(exp, act)) {
+                        return false;
+                    }
+                }
+            }
+            return true;
+        }
+
+        matcher.or = function (m2) {
+            if (!arguments.length) {
+                throw new TypeError("Matcher expected");
+            } else if (!isMatcher(m2)) {
+                m2 = match(m2);
+            }
+            var m1 = this;
+            var or = sinon.create(matcher);
+            or.test = function (actual) {
+                return m1.test(actual) || m2.test(actual);
+            };
+            or.message = m1.message + ".or(" + m2.message + ")";
+            return or;
+        };
+
+        matcher.and = function (m2) {
+            if (!arguments.length) {
+                throw new TypeError("Matcher expected");
+            } else if (!isMatcher(m2)) {
+                m2 = match(m2);
+            }
+            var m1 = this;
+            var and = sinon.create(matcher);
+            and.test = function (actual) {
+                return m1.test(actual) && m2.test(actual);
+            };
+            and.message = m1.message + ".and(" + m2.message + ")";
+            return and;
+        };
+
+        var match = function (expectation, message) {
+            var m = sinon.create(matcher);
+            var type = sinon.typeOf(expectation);
+            switch (type) {
+            case "object":
+                if (typeof expectation.test === "function") {
+                    m.test = function (actual) {
+                        return expectation.test(actual) === true;
+                    };
+                    m.message = "match(" + sinon.functionName(expectation.test) + ")";
+                    return m;
+                }
+                var str = [];
+                for (var key in expectation) {
+                    if (expectation.hasOwnProperty(key)) {
+                        str.push(key + ": " + expectation[key]);
+                    }
+                }
+                m.test = function (actual) {
+                    return matchObject(expectation, actual);
+                };
+                m.message = "match(" + str.join(", ") + ")";
+                break;
+            case "number":
+                m.test = function (actual) {
+                    return expectation == actual;
+                };
+                break;
+            case "string":
+                m.test = function (actual) {
+                    if (typeof actual !== "string") {
+                        return false;
+                    }
+                    return actual.indexOf(expectation) !== -1;
+                };
+                m.message = "match(\"" + expectation + "\")";
+                break;
+            case "regexp":
+                m.test = function (actual) {
+                    if (typeof actual !== "string") {
+                        return false;
+                    }
+                    return expectation.test(actual);
+                };
+                break;
+            case "function":
+                m.test = expectation;
+                if (message) {
+                    m.message = message;
+                } else {
+                    m.message = "match(" + sinon.functionName(expectation) + ")";
+                }
+                break;
+            default:
+                m.test = function (actual) {
+                    return sinon.deepEqual(expectation, actual);
+                };
+            }
+            if (!m.message) {
+                m.message = "match(" + expectation + ")";
+            }
+            return m;
+        };
+
+        match.isMatcher = isMatcher;
+
+        match.any = match(function () {
+            return true;
+        }, "any");
+
+        match.defined = match(function (actual) {
+            return actual !== null && actual !== undefined;
+        }, "defined");
+
+        match.truthy = match(function (actual) {
+            return !!actual;
+        }, "truthy");
+
+        match.falsy = match(function (actual) {
+            return !actual;
+        }, "falsy");
+
+        match.same = function (expectation) {
+            return match(function (actual) {
+                return expectation === actual;
+            }, "same(" + expectation + ")");
+        };
+
+        match.typeOf = function (type) {
+            assertType(type, "string", "type");
+            return match(function (actual) {
+                return sinon.typeOf(actual) === type;
+            }, "typeOf(\"" + type + "\")");
+        };
+
+        match.instanceOf = function (type) {
+            assertType(type, "function", "type");
+            return match(function (actual) {
+                return actual instanceof type;
+            }, "instanceOf(" + sinon.functionName(type) + ")");
+        };
+
+        function createPropertyMatcher(propertyTest, messagePrefix) {
+            return function (property, value) {
+                assertType(property, "string", "property");
+                var onlyProperty = arguments.length === 1;
+                var message = messagePrefix + "(\"" + property + "\"";
+                if (!onlyProperty) {
+                    message += ", " + value;
+                }
+                message += ")";
+                return match(function (actual) {
+                    if (actual === undefined || actual === null ||
+                            !propertyTest(actual, property)) {
+                        return false;
+                    }
+                    return onlyProperty || sinon.deepEqual(value, actual[property]);
+                }, message);
+            };
+        }
+
+        match.has = createPropertyMatcher(function (actual, property) {
+            if (typeof actual === "object") {
+                return property in actual;
+            }
+            return actual[property] !== undefined;
+        }, "has");
+
+        match.hasOwn = createPropertyMatcher(function (actual, property) {
+            return actual.hasOwnProperty(property);
+        }, "hasOwn");
+
+        match.bool = match.typeOf("boolean");
+        match.number = match.typeOf("number");
+        match.string = match.typeOf("string");
+        match.object = match.typeOf("object");
+        match.func = match.typeOf("function");
+        match.array = match.typeOf("array");
+        match.regexp = match.typeOf("regexp");
+        match.date = match.typeOf("date");
+
+        sinon.match = match;
+        return match;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./typeOf");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (sinon, formatio) {
+    function makeApi(sinon) {
+        function valueFormatter(value) {
+            return "" + value;
+        }
+
+        function getFormatioFormatter() {
+            var formatter = formatio.configure({
+                    quoteStrings: false,
+                    limitChildrenCount: 250
+                });
+
+            function format() {
+                return formatter.ascii.apply(formatter, arguments);
+            };
+
+            return format;
+        }
+
+        function getNodeFormatter(value) {
+            function format(value) {
+                return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
+            };
+
+            try {
+                var util = require("util");
+            } catch (e) {
+                /* Node, but no util module - would be very old, but better safe than sorry */
+            }
+
+            return util ? format : valueFormatter;
+        }
+
+        var isNode = typeof module !== "undefined" && module.exports && typeof require == "function",
+            formatter;
+
+        if (isNode) {
+            try {
+                formatio = require("formatio");
+            } catch (e) {}
+        }
+
+        if (formatio) {
+            formatter = getFormatioFormatter()
+        } else if (isNode) {
+            formatter = getNodeFormatter();
+        } else {
+            formatter = valueFormatter;
+        }
+
+        sinon.format = formatter;
+        return sinon.format;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(
+    (typeof sinon == "object" && sinon || null),
+    (typeof formatio == "object" && formatio)
+));
+
+/**
+  * @depend util/core.js
+  * @depend match.js
+  * @depend format.js
+  */
+/**
+  * Spy calls
+  *
+  * @author Christian Johansen (christian@cjohansen.no)
+  * @author Maximilian Antoni (mail@maxantoni.de)
+  * @license BSD
+  *
+  * Copyright (c) 2010-2013 Christian Johansen
+  * Copyright (c) 2013 Maximilian Antoni
+  */
+
+(function (sinon) {
+    function makeApi(sinon) {
+        function throwYieldError(proxy, text, args) {
+            var msg = sinon.functionName(proxy) + text;
+            if (args.length) {
+                msg += " Received [" + slice.call(args).join(", ") + "]";
+            }
+            throw new Error(msg);
+        }
+
+        var slice = Array.prototype.slice;
+
+        var callProto = {
+            calledOn: function calledOn(thisValue) {
+                if (sinon.match && sinon.match.isMatcher(thisValue)) {
+                    return thisValue.test(this.thisValue);
+                }
+                return this.thisValue === thisValue;
+            },
+
+            calledWith: function calledWith() {
+                var l = arguments.length;
+                if (l > this.args.length) {
+                    return false;
+                }
+                for (var i = 0; i < l; i += 1) {
+                    if (!sinon.deepEqual(arguments[i], this.args[i])) {
+                        return false;
+                    }
+                }
+
+                return true;
+            },
+
+            calledWithMatch: function calledWithMatch() {
+                var l = arguments.length;
+                if (l > this.args.length) {
+                    return false;
+                }
+                for (var i = 0; i < l; i += 1) {
+                    var actual = this.args[i];
+                    var expectation = arguments[i];
+                    if (!sinon.match || !sinon.match(expectation).test(actual)) {
+                        return false;
+                    }
+                }
+                return true;
+            },
+
+            calledWithExactly: function calledWithExactly() {
+                return arguments.length == this.args.length &&
+                    this.calledWith.apply(this, arguments);
+            },
+
+            notCalledWith: function notCalledWith() {
+                return !this.calledWith.apply(this, arguments);
+            },
+
+            notCalledWithMatch: function notCalledWithMatch() {
+                return !this.calledWithMatch.apply(this, arguments);
+            },
+
+            returned: function returned(value) {
+                return sinon.deepEqual(value, this.returnValue);
+            },
+
+            threw: function threw(error) {
+                if (typeof error === "undefined" || !this.exception) {
+                    return !!this.exception;
+                }
+
+                return this.exception === error || this.exception.name === error;
+            },
+
+            calledWithNew: function calledWithNew() {
+                return this.proxy.prototype && this.thisValue instanceof this.proxy;
+            },
+
+            calledBefore: function (other) {
+                return this.callId < other.callId;
+            },
+
+            calledAfter: function (other) {
+                return this.callId > other.callId;
+            },
+
+            callArg: function (pos) {
+                this.args[pos]();
+            },
+
+            callArgOn: function (pos, thisValue) {
+                this.args[pos].apply(thisValue);
+            },
+
+            callArgWith: function (pos) {
+                this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
+            },
+
+            callArgOnWith: function (pos, thisValue) {
+                var args = slice.call(arguments, 2);
+                this.args[pos].apply(thisValue, args);
+            },
+
+            yield: function () {
+                this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
+            },
+
+            yieldOn: function (thisValue) {
+                var args = this.args;
+                for (var i = 0, l = args.length; i < l; ++i) {
+                    if (typeof args[i] === "function") {
+                        args[i].apply(thisValue, slice.call(arguments, 1));
+                        return;
+                    }
+                }
+                throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
+            },
+
+            yieldTo: function (prop) {
+                this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
+            },
+
+            yieldToOn: function (prop, thisValue) {
+                var args = this.args;
+                for (var i = 0, l = args.length; i < l; ++i) {
+                    if (args[i] && typeof args[i][prop] === "function") {
+                        args[i][prop].apply(thisValue, slice.call(arguments, 2));
+                        return;
+                    }
+                }
+                throwYieldError(this.proxy, " cannot yield to '" + prop +
+                    "' since no callback was passed.", args);
+            },
+
+            toString: function () {
+                var callStr = this.proxy.toString() + "(";
+                var args = [];
+
+                for (var i = 0, l = this.args.length; i < l; ++i) {
+                    args.push(sinon.format(this.args[i]));
+                }
+
+                callStr = callStr + args.join(", ") + ")";
+
+                if (typeof this.returnValue != "undefined") {
+                    callStr += " => " + sinon.format(this.returnValue);
+                }
+
+                if (this.exception) {
+                    callStr += " !" + this.exception.name;
+
+                    if (this.exception.message) {
+                        callStr += "(" + this.exception.message + ")";
+                    }
+                }
+
+                return callStr;
+            }
+        };
+
+        callProto.invokeCallback = callProto.yield;
+
+        function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
+            if (typeof id !== "number") {
+                throw new TypeError("Call id is not a number");
+            }
+            var proxyCall = sinon.create(callProto);
+            proxyCall.proxy = spy;
+            proxyCall.thisValue = thisValue;
+            proxyCall.args = args;
+            proxyCall.returnValue = returnValue;
+            proxyCall.exception = exception;
+            proxyCall.callId = id;
+
+            return proxyCall;
+        }
+        createSpyCall.toString = callProto.toString; // used by mocks
+
+        sinon.spyCall = createSpyCall;
+        return createSpyCall;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./match");
+        require("./format");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+  * @depend times_in_words.js
+  * @depend util/core.js
+  * @depend extend.js
+  * @depend call.js
+  * @depend format.js
+  */
+/**
+  * Spy functions
+  *
+  * @author Christian Johansen (christian@cjohansen.no)
+  * @license BSD
+  *
+  * Copyright (c) 2010-2013 Christian Johansen
+  */
+
+(function (sinon) {
+
+    function makeApi(sinon) {
+        var push = Array.prototype.push;
+        var slice = Array.prototype.slice;
+        var callId = 0;
+
+        function spy(object, property, types) {
+            if (!property && typeof object == "function") {
+                return spy.create(object);
+            }
+
+            if (!object && !property) {
+                return spy.create(function () { });
+            }
+
+            if (types) {
+                var methodDesc = sinon.getPropertyDescriptor(object, property);
+                for (var i = 0; i < types.length; i++) {
+                    methodDesc[types[i]] = spy.create(methodDesc[types[i]]);
+                }
+                return sinon.wrapMethod(object, property, methodDesc);
+            } else {
+                var method = object[property];
+                return sinon.wrapMethod(object, property, spy.create(method));
+            }
+        }
+
+        function matchingFake(fakes, args, strict) {
+            if (!fakes) {
+                return;
+            }
+
+            for (var i = 0, l = fakes.length; i < l; i++) {
+                if (fakes[i].matches(args, strict)) {
+                    return fakes[i];
+                }
+            }
+        }
+
+        function incrementCallCount() {
+            this.called = true;
+            this.callCount += 1;
+            this.notCalled = false;
+            this.calledOnce = this.callCount == 1;
+            this.calledTwice = this.callCount == 2;
+            this.calledThrice = this.callCount == 3;
+        }
+
+        function createCallProperties() {
+            this.firstCall = this.getCall(0);
+            this.secondCall = this.getCall(1);
+            this.thirdCall = this.getCall(2);
+            this.lastCall = this.getCall(this.callCount - 1);
+        }
+
+        var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
+        function createProxy(func, proxyLength) {
+            // Retain the function length:
+            var p;
+            if (proxyLength) {
+                eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) +
+                    ") { return p.invoke(func, this, slice.call(arguments)); });");
+            } else {
+                p = function proxy() {
+                    return p.invoke(func, this, slice.call(arguments));
+                };
+            }
+            p.isSinonProxy = true;
+            return p;
+        }
+
+        var uuid = 0;
+
+        // Public API
+        var spyApi = {
+            reset: function () {
+                if (this.invoking) {
+                    var err = new Error("Cannot reset Sinon function while invoking it. " +
+                                        "Move the call to .reset outside of the callback.");
+                    err.name = "InvalidResetException";
+                    throw err;
+                }
+
+                this.called = false;
+                this.notCalled = true;
+                this.calledOnce = false;
+                this.calledTwice = false;
+                this.calledThrice = false;
+                this.callCount = 0;
+                this.firstCall = null;
+                this.secondCall = null;
+                this.thirdCall = null;
+                this.lastCall = null;
+                this.args = [];
+                this.returnValues = [];
+                this.thisValues = [];
+                this.exceptions = [];
+                this.callIds = [];
+                if (this.fakes) {
+                    for (var i = 0; i < this.fakes.length; i++) {
+                        this.fakes[i].reset();
+                    }
+                }
+
+                return this;
+            },
+
+            create: function create(func, spyLength) {
+                var name;
+
+                if (typeof func != "function") {
+                    func = function () { };
+                } else {
+                    name = sinon.functionName(func);
+                }
+
+                if (!spyLength) {
+                    spyLength = func.length;
+                }
+
+                var proxy = createProxy(func, spyLength);
+
+                sinon.extend(proxy, spy);
+                delete proxy.create;
+                sinon.extend(proxy, func);
+
+                proxy.reset();
+                proxy.prototype = func.prototype;
+                proxy.displayName = name || "spy";
+                proxy.toString = sinon.functionToString;
+                proxy.instantiateFake = sinon.spy.create;
+                proxy.id = "spy#" + uuid++;
+
+                return proxy;
+            },
+
+            invoke: function invoke(func, thisValue, args) {
+                var matching = matchingFake(this.fakes, args);
+                var exception, returnValue;
+
+                incrementCallCount.call(this);
+                push.call(this.thisValues, thisValue);
+                push.call(this.args, args);
+                push.call(this.callIds, callId++);
+
+                // Make call properties available from within the spied function:
+                createCallProperties.call(this);
+
+                try {
+                    this.invoking = true;
+
+                    if (matching) {
+                        returnValue = matching.invoke(func, thisValue, args);
+                    } else {
+                        returnValue = (this.func || func).apply(thisValue, args);
+                    }
+
+                    var thisCall = this.getCall(this.callCount - 1);
+                    if (thisCall.calledWithNew() && typeof returnValue !== "object") {
+                        returnValue = thisValue;
+                    }
+                } catch (e) {
+                    exception = e;
+                } finally {
+                    delete this.invoking;
+                }
+
+                push.call(this.exceptions, exception);
+                push.call(this.returnValues, returnValue);
+
+                // Make return value and exception available in the calls:
+                createCallProperties.call(this);
+
+                if (exception !== undefined) {
+                    throw exception;
+                }
+
+                return returnValue;
+            },
+
+            named: function named(name) {
+                this.displayName = name;
+                return this;
+            },
+
+            getCall: function getCall(i) {
+                if (i < 0 || i >= this.callCount) {
+                    return null;
+                }
+
+                return sinon.spyCall(this, this.thisValues[i], this.args[i],
+                                        this.returnValues[i], this.exceptions[i],
+                                        this.callIds[i]);
+            },
+
+            getCalls: function () {
+                var calls = [];
+                var i;
+
+                for (i = 0; i < this.callCount; i++) {
+                    calls.push(this.getCall(i));
+                }
+
+                return calls;
+            },
+
+            calledBefore: function calledBefore(spyFn) {
+                if (!this.called) {
+                    return false;
+                }
+
+                if (!spyFn.called) {
+                    return true;
+                }
+
+                return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
+            },
+
+            calledAfter: function calledAfter(spyFn) {
+                if (!this.called || !spyFn.called) {
+                    return false;
+                }
+
+                return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
+            },
+
+            withArgs: function () {
+                var args = slice.call(arguments);
+
+                if (this.fakes) {
+                    var match = matchingFake(this.fakes, args, true);
+
+                    if (match) {
+                        return match;
+                    }
+                } else {
+                    this.fakes = [];
+                }
+
+                var original = this;
+                var fake = this.instantiateFake();
+                fake.matchingAguments = args;
+                fake.parent = this;
+                push.call(this.fakes, fake);
+
+                fake.withArgs = function () {
+                    return original.withArgs.apply(original, arguments);
+                };
+
+                for (var i = 0; i < this.args.length; i++) {
+                    if (fake.matches(this.args[i])) {
+                        incrementCallCount.call(fake);
+                        push.call(fake.thisValues, this.thisValues[i]);
+                        push.call(fake.args, this.args[i]);
+                        push.call(fake.returnValues, this.returnValues[i]);
+                        push.call(fake.exceptions, this.exceptions[i]);
+                        push.call(fake.callIds, this.callIds[i]);
+                    }
+                }
+                createCallProperties.call(fake);
+
+                return fake;
+            },
+
+            matches: function (args, strict) {
+                var margs = this.matchingAguments;
+
+                if (margs.length <= args.length &&
+                    sinon.deepEqual(margs, args.slice(0, margs.length))) {
+                    return !strict || margs.length == args.length;
+                }
+            },
+
+            printf: function (format) {
+                var spy = this;
+                var args = slice.call(arguments, 1);
+                var formatter;
+
+                return (format || "").replace(/%(.)/g, function (match, specifyer) {
+                    formatter = spyApi.formatters[specifyer];
+
+                    if (typeof formatter == "function") {
+                        return formatter.call(null, spy, args);
+                    } else if (!isNaN(parseInt(specifyer, 10))) {
+                        return sinon.format(args[specifyer - 1]);
+                    }
+
+                    return "%" + specifyer;
+                });
+            }
+        };
+
+        function delegateToCalls(method, matchAny, actual, notCalled) {
+            spyApi[method] = function () {
+                if (!this.called) {
+                    if (notCalled) {
+                        return notCalled.apply(this, arguments);
+                    }
+                    return false;
+                }
+
+                var currentCall;
+                var matches = 0;
+
+                for (var i = 0, l = this.callCount; i < l; i += 1) {
+                    currentCall = this.getCall(i);
+
+                    if (currentCall[actual || method].apply(currentCall, arguments)) {
+                        matches += 1;
+
+                        if (matchAny) {
+                            return true;
+                        }
+                    }
+                }
+
+                return matches === this.callCount;
+            };
+        }
+
+        delegateToCalls("calledOn", true);
+        delegateToCalls("alwaysCalledOn", false, "calledOn");
+        delegateToCalls("calledWith", true);
+        delegateToCalls("calledWithMatch", true);
+        delegateToCalls("alwaysCalledWith", false, "calledWith");
+        delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
+        delegateToCalls("calledWithExactly", true);
+        delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
+        delegateToCalls("neverCalledWith", false, "notCalledWith", function () {
+            return true;
+        });
+        delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () {
+            return true;
+        });
+        delegateToCalls("threw", true);
+        delegateToCalls("alwaysThrew", false, "threw");
+        delegateToCalls("returned", true);
+        delegateToCalls("alwaysReturned", false, "returned");
+        delegateToCalls("calledWithNew", true);
+        delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
+        delegateToCalls("callArg", false, "callArgWith", function () {
+            throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+        });
+        spyApi.callArgWith = spyApi.callArg;
+        delegateToCalls("callArgOn", false, "callArgOnWith", function () {
+            throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+        });
+        spyApi.callArgOnWith = spyApi.callArgOn;
+        delegateToCalls("yield", false, "yield", function () {
+            throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+        });
+        // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
+        spyApi.invokeCallback = spyApi.yield;
+        delegateToCalls("yieldOn", false, "yieldOn", function () {
+            throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+        });
+        delegateToCalls("yieldTo", false, "yieldTo", function (property) {
+            throw new Error(this.toString() + " cannot yield to '" + property +
+                "' since it was not yet invoked.");
+        });
+        delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
+            throw new Error(this.toString() + " cannot yield to '" + property +
+                "' since it was not yet invoked.");
+        });
+
+        spyApi.formatters = {
+            c: function (spy) {
+                return sinon.timesInWords(spy.callCount);
+            },
+
+            n: function (spy) {
+                return spy.toString();
+            },
+
+            C: function (spy) {
+                var calls = [];
+
+                for (var i = 0, l = spy.callCount; i < l; ++i) {
+                    var stringifiedCall = "    " + spy.getCall(i).toString();
+                    if (/\n/.test(calls[i - 1])) {
+                        stringifiedCall = "\n" + stringifiedCall;
+                    }
+                    push.call(calls, stringifiedCall);
+                }
+
+                return calls.length > 0 ? "\n" + calls.join("\n") : "";
+            },
+
+            t: function (spy) {
+                var objects = [];
+
+                for (var i = 0, l = spy.callCount; i < l; ++i) {
+                    push.call(objects, sinon.format(spy.thisValues[i]));
+                }
+
+                return objects.join(", ");
+            },
+
+            "*": function (spy, args) {
+                var formatted = [];
+
+                for (var i = 0, l = args.length; i < l; ++i) {
+                    push.call(formatted, sinon.format(args[i]));
+                }
+
+                return formatted.join(", ");
+            }
+        };
+
+        sinon.extend(spy, spyApi);
+
+        spy.spyCall = sinon.spyCall;
+        sinon.spy = spy;
+
+        return spy;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./call");
+        require("./extend");
+        require("./times_in_words");
+        require("./format");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ */
+/**
+ * Stub behavior
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Tim Fischbach (mail@timfischbach.de)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var slice = Array.prototype.slice;
+    var join = Array.prototype.join;
+    var useLeftMostCallback = -1;
+    var useRightMostCallback = -2;
+
+    var nextTick = (function () {
+        if (typeof process === "object" && typeof process.nextTick === "function") {
+            return process.nextTick;
+        } else if (typeof setImmediate === "function") {
+            return setImmediate;
+        } else {
+            return function (callback) {
+                setTimeout(callback, 0);
+            };
+        }
+    })();
+
+    function throwsException(error, message) {
+        if (typeof error == "string") {
+            this.exception = new Error(message || "");
+            this.exception.name = error;
+        } else if (!error) {
+            this.exception = new Error("Error");
+        } else {
+            this.exception = error;
+        }
+
+        return this;
+    }
+
+    function getCallback(behavior, args) {
+        var callArgAt = behavior.callArgAt;
+
+        if (callArgAt >= 0) {
+            return args[callArgAt];
+        }
+
+        var argumentList;
+
+        if (callArgAt === useLeftMostCallback) {
+            argumentList = args;
+        }
+
+        if (callArgAt === useRightMostCallback) {
+            argumentList = slice.call(args).reverse();
+        }
+
+        var callArgProp = behavior.callArgProp;
+
+        for (var i = 0, l = argumentList.length; i < l; ++i) {
+            if (!callArgProp && typeof argumentList[i] == "function") {
+                return argumentList[i];
+            }
+
+            if (callArgProp && argumentList[i] &&
+                typeof argumentList[i][callArgProp] == "function") {
+                return argumentList[i][callArgProp];
+            }
+        }
+
+        return null;
+    }
+
+    function makeApi(sinon) {
+        function getCallbackError(behavior, func, args) {
+            if (behavior.callArgAt < 0) {
+                var msg;
+
+                if (behavior.callArgProp) {
+                    msg = sinon.functionName(behavior.stub) +
+                        " expected to yield to '" + behavior.callArgProp +
+                        "', but no object with such a property was passed.";
+                } else {
+                    msg = sinon.functionName(behavior.stub) +
+                        " expected to yield, but no callback was passed.";
+                }
+
+                if (args.length > 0) {
+                    msg += " Received [" + join.call(args, ", ") + "]";
+                }
+
+                return msg;
+            }
+
+            return "argument at index " + behavior.callArgAt + " is not a function: " + func;
+        }
+
+        function callCallback(behavior, args) {
+            if (typeof behavior.callArgAt == "number") {
+                var func = getCallback(behavior, args);
+
+                if (typeof func != "function") {
+                    throw new TypeError(getCallbackError(behavior, func, args));
+                }
+
+                if (behavior.callbackAsync) {
+                    nextTick(function () {
+                        func.apply(behavior.callbackContext, behavior.callbackArguments);
+                    });
+                } else {
+                    func.apply(behavior.callbackContext, behavior.callbackArguments);
+                }
+            }
+        }
+
+        var proto = {
+            create: function create(stub) {
+                var behavior = sinon.extend({}, sinon.behavior);
+                delete behavior.create;
+                behavior.stub = stub;
+
+                return behavior;
+            },
+
+            isPresent: function isPresent() {
+                return (typeof this.callArgAt == "number" ||
+                        this.exception ||
+                        typeof this.returnArgAt == "number" ||
+                        this.returnThis ||
+                        this.returnValueDefined);
+            },
+
+            invoke: function invoke(context, args) {
+                callCallback(this, args);
+
+                if (this.exception) {
+                    throw this.exception;
+                } else if (typeof this.returnArgAt == "number") {
+                    return args[this.returnArgAt];
+                } else if (this.returnThis) {
+                    return context;
+                }
+
+                return this.returnValue;
+            },
+
+            onCall: function onCall(index) {
+                return this.stub.onCall(index);
+            },
+
+            onFirstCall: function onFirstCall() {
+                return this.stub.onFirstCall();
+            },
+
+            onSecondCall: function onSecondCall() {
+                return this.stub.onSecondCall();
+            },
+
+            onThirdCall: function onThirdCall() {
+                return this.stub.onThirdCall();
+            },
+
+            withArgs: function withArgs(/* arguments */) {
+                throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " +
+                                "Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments.");
+            },
+
+            callsArg: function callsArg(pos) {
+                if (typeof pos != "number") {
+                    throw new TypeError("argument index is not number");
+                }
+
+                this.callArgAt = pos;
+                this.callbackArguments = [];
+                this.callbackContext = undefined;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            callsArgOn: function callsArgOn(pos, context) {
+                if (typeof pos != "number") {
+                    throw new TypeError("argument index is not number");
+                }
+                if (typeof context != "object") {
+                    throw new TypeError("argument context is not an object");
+                }
+
+                this.callArgAt = pos;
+                this.callbackArguments = [];
+                this.callbackContext = context;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            callsArgWith: function callsArgWith(pos) {
+                if (typeof pos != "number") {
+                    throw new TypeError("argument index is not number");
+                }
+
+                this.callArgAt = pos;
+                this.callbackArguments = slice.call(arguments, 1);
+                this.callbackContext = undefined;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            callsArgOnWith: function callsArgWith(pos, context) {
+                if (typeof pos != "number") {
+                    throw new TypeError("argument index is not number");
+                }
+                if (typeof context != "object") {
+                    throw new TypeError("argument context is not an object");
+                }
+
+                this.callArgAt = pos;
+                this.callbackArguments = slice.call(arguments, 2);
+                this.callbackContext = context;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yields: function () {
+                this.callArgAt = useLeftMostCallback;
+                this.callbackArguments = slice.call(arguments, 0);
+                this.callbackContext = undefined;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yieldsRight: function () {
+                this.callArgAt = useRightMostCallback;
+                this.callbackArguments = slice.call(arguments, 0);
+                this.callbackContext = undefined;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yieldsOn: function (context) {
+                if (typeof context != "object") {
+                    throw new TypeError("argument context is not an object");
+                }
+
+                this.callArgAt = useLeftMostCallback;
+                this.callbackArguments = slice.call(arguments, 1);
+                this.callbackContext = context;
+                this.callArgProp = undefined;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yieldsTo: function (prop) {
+                this.callArgAt = useLeftMostCallback;
+                this.callbackArguments = slice.call(arguments, 1);
+                this.callbackContext = undefined;
+                this.callArgProp = prop;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            yieldsToOn: function (prop, context) {
+                if (typeof context != "object") {
+                    throw new TypeError("argument context is not an object");
+                }
+
+                this.callArgAt = useLeftMostCallback;
+                this.callbackArguments = slice.call(arguments, 2);
+                this.callbackContext = context;
+                this.callArgProp = prop;
+                this.callbackAsync = false;
+
+                return this;
+            },
+
+            throws: throwsException,
+            throwsException: throwsException,
+
+            returns: function returns(value) {
+                this.returnValue = value;
+                this.returnValueDefined = true;
+
+                return this;
+            },
+
+            returnsArg: function returnsArg(pos) {
+                if (typeof pos != "number") {
+                    throw new TypeError("argument index is not number");
+                }
+
+                this.returnArgAt = pos;
+
+                return this;
+            },
+
+            returnsThis: function returnsThis() {
+                this.returnThis = true;
+
+                return this;
+            }
+        };
+
+        // create asynchronous versions of callsArg* and yields* methods
+        for (var method in proto) {
+            // need to avoid creating anotherasync versions of the newly added async methods
+            if (proto.hasOwnProperty(method) &&
+                method.match(/^(callsArg|yields)/) &&
+                !method.match(/Async/)) {
+                proto[method + "Async"] = (function (syncFnName) {
+                    return function () {
+                        var result = this[syncFnName].apply(this, arguments);
+                        this.callbackAsync = true;
+                        return result;
+                    };
+                })(method);
+            }
+        }
+
+        sinon.behavior = proto;
+        return proto;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./extend");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend spy.js
+ * @depend behavior.js
+ */
+/**
+ * Stub functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    function makeApi(sinon) {
+        function stub(object, property, func) {
+            if (!!func && typeof func != "function" && typeof func != "object") {
+                throw new TypeError("Custom stub should be a function or a property descriptor");
+            }
+
+            var wrapper;
+
+            if (func) {
+                if (typeof func == "function") {
+                    wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
+                } else {
+                    wrapper = func;
+                    if (sinon.spy && sinon.spy.create) {
+                        var types = sinon.objectKeys(wrapper);
+                        for (var i = 0; i < types.length; i++) {
+                            wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]);
+                        }
+                    }
+                }
+            } else {
+                var stubLength = 0;
+                if (typeof object == "object" && typeof object[property] == "function") {
+                    stubLength = object[property].length;
+                }
+                wrapper = stub.create(stubLength);
+            }
+
+            if (!object && typeof property === "undefined") {
+                return sinon.stub.create();
+            }
+
+            if (typeof property === "undefined" && typeof object == "object") {
+                for (var prop in object) {
+                    if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") {
+                        stub(object, prop);
+                    }
+                }
+
+                return object;
+            }
+
+            return sinon.wrapMethod(object, property, wrapper);
+        }
+
+        function getDefaultBehavior(stub) {
+            return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub);
+        }
+
+        function getParentBehaviour(stub) {
+            return (stub.parent && getCurrentBehavior(stub.parent));
+        }
+
+        function getCurrentBehavior(stub) {
+            var behavior = stub.behaviors[stub.callCount - 1];
+            return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub);
+        }
+
+        var uuid = 0;
+
+        var proto = {
+            create: function create(stubLength) {
+                var functionStub = function () {
+                    return getCurrentBehavior(functionStub).invoke(this, arguments);
+                };
+
+                functionStub.id = "stub#" + uuid++;
+                var orig = functionStub;
+                functionStub = sinon.spy.create(functionStub, stubLength);
+                functionStub.func = orig;
+
+                sinon.extend(functionStub, stub);
+                functionStub.instantiateFake = sinon.stub.create;
+                functionStub.displayName = "stub";
+                functionStub.toString = sinon.functionToString;
+
+                functionStub.defaultBehavior = null;
+                functionStub.behaviors = [];
+
+                return functionStub;
+            },
+
+            resetBehavior: function () {
+                var i;
+
+                this.defaultBehavior = null;
+                this.behaviors = [];
+
+                delete this.returnValue;
+                delete this.returnArgAt;
+                this.returnThis = false;
+
+                if (this.fakes) {
+                    for (i = 0; i < this.fakes.length; i++) {
+                        this.fakes[i].resetBehavior();
+                    }
+                }
+            },
+
+            onCall: function onCall(index) {
+                if (!this.behaviors[index]) {
+                    this.behaviors[index] = sinon.behavior.create(this);
+                }
+
+                return this.behaviors[index];
+            },
+
+            onFirstCall: function onFirstCall() {
+                return this.onCall(0);
+            },
+
+            onSecondCall: function onSecondCall() {
+                return this.onCall(1);
+            },
+
+            onThirdCall: function onThirdCall() {
+                return this.onCall(2);
+            }
+        };
+
+        for (var method in sinon.behavior) {
+            if (sinon.behavior.hasOwnProperty(method) &&
+                !proto.hasOwnProperty(method) &&
+                method != "create" &&
+                method != "withArgs" &&
+                method != "invoke") {
+                proto[method] = (function (behaviorMethod) {
+                    return function () {
+                        this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
+                        this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
+                        return this;
+                    };
+                }(method));
+            }
+        }
+
+        sinon.extend(stub, proto);
+        sinon.stub = stub;
+
+        return stub;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./behavior");
+        require("./spy");
+        require("./extend");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend call.js
+ * @depend extend.js
+ * @depend match.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend format.js
+ */
+/**
+ * Mock functions.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    function makeApi(sinon) {
+        var push = [].push;
+        var match = sinon.match;
+
+        function mock(object) {
+            // if (typeof console !== undefined && console.warn) {
+            //     console.warn("mock will be removed from Sinon.JS v2.0");
+            // }
+
+            if (!object) {
+                return sinon.expectation.create("Anonymous mock");
+            }
+
+            return mock.create(object);
+        }
+
+        function each(collection, callback) {
+            if (!collection) {
+                return;
+            }
+
+            for (var i = 0, l = collection.length; i < l; i += 1) {
+                callback(collection[i]);
+            }
+        }
+
+        sinon.extend(mock, {
+            create: function create(object) {
+                if (!object) {
+                    throw new TypeError("object is null");
+                }
+
+                var mockObject = sinon.extend({}, mock);
+                mockObject.object = object;
+                delete mockObject.create;
+
+                return mockObject;
+            },
+
+            expects: function expects(method) {
+                if (!method) {
+                    throw new TypeError("method is falsy");
+                }
+
+                if (!this.expectations) {
+                    this.expectations = {};
+                    this.proxies = [];
+                }
+
+                if (!this.expectations[method]) {
+                    this.expectations[method] = [];
+                    var mockObject = this;
+
+                    sinon.wrapMethod(this.object, method, function () {
+                        return mockObject.invokeMethod(method, this, arguments);
+                    });
+
+                    push.call(this.proxies, method);
+                }
+
+                var expectation = sinon.expectation.create(method);
+                push.call(this.expectations[method], expectation);
+
+                return expectation;
+            },
+
+            restore: function restore() {
+                var object = this.object;
+
+                each(this.proxies, function (proxy) {
+                    if (typeof object[proxy].restore == "function") {
+                        object[proxy].restore();
+                    }
+                });
+            },
+
+            verify: function verify() {
+                var expectations = this.expectations || {};
+                var messages = [], met = [];
+
+                each(this.proxies, function (proxy) {
+                    each(expectations[proxy], function (expectation) {
+                        if (!expectation.met()) {
+                            push.call(messages, expectation.toString());
+                        } else {
+                            push.call(met, expectation.toString());
+                        }
+                    });
+                });
+
+                this.restore();
+
+                if (messages.length > 0) {
+                    sinon.expectation.fail(messages.concat(met).join("\n"));
+                } else if (met.length > 0) {
+                    sinon.expectation.pass(messages.concat(met).join("\n"));
+                }
+
+                return true;
+            },
+
+            invokeMethod: function invokeMethod(method, thisValue, args) {
+                var expectations = this.expectations && this.expectations[method];
+                var length = expectations && expectations.length || 0, i;
+
+                for (i = 0; i < length; i += 1) {
+                    if (!expectations[i].met() &&
+                        expectations[i].allowsCall(thisValue, args)) {
+                        return expectations[i].apply(thisValue, args);
+                    }
+                }
+
+                var messages = [], available, exhausted = 0;
+
+                for (i = 0; i < length; i += 1) {
+                    if (expectations[i].allowsCall(thisValue, args)) {
+                        available = available || expectations[i];
+                    } else {
+                        exhausted += 1;
+                    }
+                    push.call(messages, "    " + expectations[i].toString());
+                }
+
+                if (exhausted === 0) {
+                    return available.apply(thisValue, args);
+                }
+
+                messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
+                    proxy: method,
+                    args: args
+                }));
+
+                sinon.expectation.fail(messages.join("\n"));
+            }
+        });
+
+        var times = sinon.timesInWords;
+        var slice = Array.prototype.slice;
+
+        function callCountInWords(callCount) {
+            if (callCount == 0) {
+                return "never called";
+            } else {
+                return "called " + times(callCount);
+            }
+        }
+
+        function expectedCallCountInWords(expectation) {
+            var min = expectation.minCalls;
+            var max = expectation.maxCalls;
+
+            if (typeof min == "number" && typeof max == "number") {
+                var str = times(min);
+
+                if (min != max) {
+                    str = "at least " + str + " and at most " + times(max);
+                }
+
+                return str;
+            }
+
+            if (typeof min == "number") {
+                return "at least " + times(min);
+            }
+
+            return "at most " + times(max);
+        }
+
+        function receivedMinCalls(expectation) {
+            var hasMinLimit = typeof expectation.minCalls == "number";
+            return !hasMinLimit || expectation.callCount >= expectation.minCalls;
+        }
+
+        function receivedMaxCalls(expectation) {
+            if (typeof expectation.maxCalls != "number") {
+                return false;
+            }
+
+            return expectation.callCount == expectation.maxCalls;
+        }
+
+        function verifyMatcher(possibleMatcher, arg) {
+            if (match && match.isMatcher(possibleMatcher)) {
+                return possibleMatcher.test(arg);
+            } else {
+                return true;
+            }
+        }
+
+        sinon.expectation = {
+            minCalls: 1,
+            maxCalls: 1,
+
+            create: function create(methodName) {
+                var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
+                delete expectation.create;
+                expectation.method = methodName;
+
+                return expectation;
+            },
+
+            invoke: function invoke(func, thisValue, args) {
+                this.verifyCallAllowed(thisValue, args);
+
+                return sinon.spy.invoke.apply(this, arguments);
+            },
+
+            atLeast: function atLeast(num) {
+                if (typeof num != "number") {
+                    throw new TypeError("'" + num + "' is not number");
+                }
+
+                if (!this.limitsSet) {
+                    this.maxCalls = null;
+                    this.limitsSet = true;
+                }
+
+                this.minCalls = num;
+
+                return this;
+            },
+
+            atMost: function atMost(num) {
+                if (typeof num != "number") {
+                    throw new TypeError("'" + num + "' is not number");
+                }
+
+                if (!this.limitsSet) {
+                    this.minCalls = null;
+                    this.limitsSet = true;
+                }
+
+                this.maxCalls = num;
+
+                return this;
+            },
+
+            never: function never() {
+                return this.exactly(0);
+            },
+
+            once: function once() {
+                return this.exactly(1);
+            },
+
+            twice: function twice() {
+                return this.exactly(2);
+            },
+
+            thrice: function thrice() {
+                return this.exactly(3);
+            },
+
+            exactly: function exactly(num) {
+                if (typeof num != "number") {
+                    throw new TypeError("'" + num + "' is not a number");
+                }
+
+                this.atLeast(num);
+                return this.atMost(num);
+            },
+
+            met: function met() {
+                return !this.failed && receivedMinCalls(this);
+            },
+
+            verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
+                if (receivedMaxCalls(this)) {
+                    this.failed = true;
+                    sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
+                }
+
+                if ("expectedThis" in this && this.expectedThis !== thisValue) {
+                    sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
+                        this.expectedThis);
+                }
+
+                if (!("expectedArguments" in this)) {
+                    return;
+                }
+
+                if (!args) {
+                    sinon.expectation.fail(this.method + " received no arguments, expected " +
+                        sinon.format(this.expectedArguments));
+                }
+
+                if (args.length < this.expectedArguments.length) {
+                    sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
+                        "), expected " + sinon.format(this.expectedArguments));
+                }
+
+                if (this.expectsExactArgCount &&
+                    args.length != this.expectedArguments.length) {
+                    sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
+                        "), expected " + sinon.format(this.expectedArguments));
+                }
+
+                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+
+                    if (!verifyMatcher(this.expectedArguments[i], args[i])) {
+                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+                            ", didn't match " + this.expectedArguments.toString());
+                    }
+
+                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+                            ", expected " + sinon.format(this.expectedArguments));
+                    }
+                }
+            },
+
+            allowsCall: function allowsCall(thisValue, args) {
+                if (this.met() && receivedMaxCalls(this)) {
+                    return false;
+                }
+
+                if ("expectedThis" in this && this.expectedThis !== thisValue) {
+                    return false;
+                }
+
+                if (!("expectedArguments" in this)) {
+                    return true;
+                }
+
+                args = args || [];
+
+                if (args.length < this.expectedArguments.length) {
+                    return false;
+                }
+
+                if (this.expectsExactArgCount &&
+                    args.length != this.expectedArguments.length) {
+                    return false;
+                }
+
+                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+                    if (!verifyMatcher(this.expectedArguments[i], args[i])) {
+                        return false;
+                    }
+
+                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+                        return false;
+                    }
+                }
+
+                return true;
+            },
+
+            withArgs: function withArgs() {
+                this.expectedArguments = slice.call(arguments);
+                return this;
+            },
+
+            withExactArgs: function withExactArgs() {
+                this.withArgs.apply(this, arguments);
+                this.expectsExactArgCount = true;
+                return this;
+            },
+
+            on: function on(thisValue) {
+                this.expectedThis = thisValue;
+                return this;
+            },
+
+            toString: function () {
+                var args = (this.expectedArguments || []).slice();
+
+                if (!this.expectsExactArgCount) {
+                    push.call(args, "[...]");
+                }
+
+                var callStr = sinon.spyCall.toString.call({
+                    proxy: this.method || "anonymous mock expectation",
+                    args: args
+                });
+
+                var message = callStr.replace(", [...", "[, ...") + " " +
+                    expectedCallCountInWords(this);
+
+                if (this.met()) {
+                    return "Expectation met: " + message;
+                }
+
+                return "Expected " + message + " (" +
+                    callCountInWords(this.callCount) + ")";
+            },
+
+            verify: function verify() {
+                if (!this.met()) {
+                    sinon.expectation.fail(this.toString());
+                } else {
+                    sinon.expectation.pass(this.toString());
+                }
+
+                return true;
+            },
+
+            pass: function pass(message) {
+                sinon.assert.pass(message);
+            },
+
+            fail: function fail(message) {
+                var exception = new Error(message);
+                exception.name = "ExpectationError";
+
+                throw exception;
+            }
+        };
+
+        sinon.mock = mock;
+        return mock;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./times_in_words");
+        require("./call");
+        require("./extend");
+        require("./match");
+        require("./spy");
+        require("./stub");
+        require("./format");
+
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend mock.js
+ */
+/**
+ * Collections of stubs, spies and mocks.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    var push = [].push;
+    var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+    function getFakes(fakeCollection) {
+        if (!fakeCollection.fakes) {
+            fakeCollection.fakes = [];
+        }
+
+        return fakeCollection.fakes;
+    }
+
+    function each(fakeCollection, method) {
+        var fakes = getFakes(fakeCollection);
+
+        for (var i = 0, l = fakes.length; i < l; i += 1) {
+            if (typeof fakes[i][method] == "function") {
+                fakes[i][method]();
+            }
+        }
+    }
+
+    function compact(fakeCollection) {
+        var fakes = getFakes(fakeCollection);
+        var i = 0;
+        while (i < fakes.length) {
+            fakes.splice(i, 1);
+        }
+    }
+
+    function makeApi(sinon) {
+        var collection = {
+            verify: function resolve() {
+                each(this, "verify");
+            },
+
+            restore: function restore() {
+                each(this, "restore");
+                compact(this);
+            },
+
+            reset: function restore() {
+                each(this, "reset");
+            },
+
+            verifyAndRestore: function verifyAndRestore() {
+                var exception;
+
+                try {
+                    this.verify();
+                } catch (e) {
+                    exception = e;
+                }
+
+                this.restore();
+
+                if (exception) {
+                    throw exception;
+                }
+            },
+
+            add: function add(fake) {
+                push.call(getFakes(this), fake);
+                return fake;
+            },
+
+            spy: function spy() {
+                return this.add(sinon.spy.apply(sinon, arguments));
+            },
+
+            stub: function stub(object, property, value) {
+                if (property) {
+                    var original = object[property];
+
+                    if (typeof original != "function") {
+                        if (!hasOwnProperty.call(object, property)) {
+                            throw new TypeError("Cannot stub non-existent own property " + property);
+                        }
+
+                        object[property] = value;
+
+                        return this.add({
+                            restore: function () {
+                                object[property] = original;
+                            }
+                        });
+                    }
+                }
+                if (!property && !!object && typeof object == "object") {
+                    var stubbedObj = sinon.stub.apply(sinon, arguments);
+
+                    for (var prop in stubbedObj) {
+                        if (typeof stubbedObj[prop] === "function") {
+                            this.add(stubbedObj[prop]);
+                        }
+                    }
+
+                    return stubbedObj;
+                }
+
+                return this.add(sinon.stub.apply(sinon, arguments));
+            },
+
+            mock: function mock() {
+                return this.add(sinon.mock.apply(sinon, arguments));
+            },
+
+            inject: function inject(obj) {
+                var col = this;
+
+                obj.spy = function () {
+                    return col.spy.apply(col, arguments);
+                };
+
+                obj.stub = function () {
+                    return col.stub.apply(col, arguments);
+                };
+
+                obj.mock = function () {
+                    return col.mock.apply(col, arguments);
+                };
+
+                return obj;
+            }
+        };
+
+        sinon.collection = collection;
+        return collection;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./mock");
+        require("./spy");
+        require("./stub");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/*global lolex */
+
+/**
+ * Fake timer API
+ * setTimeout
+ * setInterval
+ * clearTimeout
+ * clearInterval
+ * tick
+ * reset
+ * Date
+ *
+ * Inspired by jsUnitMockTimeOut from JsUnit
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+    var sinon = {};
+}
+
+(function (global) {
+    function makeApi(sinon, lol) {
+        var llx = typeof lolex !== "undefined" ? lolex : lol;
+
+        sinon.useFakeTimers = function () {
+            var now, methods = Array.prototype.slice.call(arguments);
+
+            if (typeof methods[0] === "string") {
+                now = 0;
+            } else {
+                now = methods.shift();
+            }
+
+            var clock = llx.install(now || 0, methods);
+            clock.restore = clock.uninstall;
+            return clock;
+        };
+
+        sinon.clock = {
+            create: function (now) {
+                return llx.createClock(now);
+            }
+        };
+
+        sinon.timers = {
+            setTimeout: setTimeout,
+            clearTimeout: clearTimeout,
+            setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+            clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined),
+            setInterval: setInterval,
+            clearInterval: clearInterval,
+            Date: Date
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, epxorts, module, lolex) {
+        var sinon = require("./core");
+        makeApi(sinon, lolex);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module, require("lolex"));
+    } else {
+        makeApi(sinon);
+    }
+}(typeof global != "undefined" && typeof global !== "function" ? global : this));
+
+/**
+ * Minimal Event interface implementation
+ *
+ * Original implementation by Sven Fuchs: https://gist.github.com/995028
+ * Modifications and tests by Christian Johansen.
+ *
+ * @author Sven Fuchs (svenfuchs@artweb-design.de)
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2011 Sven Fuchs, Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+    this.sinon = {};
+}
+
+(function () {
+    var push = [].push;
+
+    function makeApi(sinon) {
+        sinon.Event = function Event(type, bubbles, cancelable, target) {
+            this.initEvent(type, bubbles, cancelable, target);
+        };
+
+        sinon.Event.prototype = {
+            initEvent: function (type, bubbles, cancelable, target) {
+                this.type = type;
+                this.bubbles = bubbles;
+                this.cancelable = cancelable;
+                this.target = target;
+            },
+
+            stopPropagation: function () {},
+
+            preventDefault: function () {
+                this.defaultPrevented = true;
+            }
+        };
+
+        sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) {
+            this.initEvent(type, false, false, target);
+            this.loaded = progressEventRaw.loaded || null;
+            this.total = progressEventRaw.total || null;
+            this.lengthComputable = !!progressEventRaw.total;
+        };
+
+        sinon.ProgressEvent.prototype = new sinon.Event();
+
+        sinon.ProgressEvent.prototype.constructor =  sinon.ProgressEvent;
+
+        sinon.CustomEvent = function CustomEvent(type, customData, target) {
+            this.initEvent(type, false, false, target);
+            this.detail = customData.detail || null;
+        };
+
+        sinon.CustomEvent.prototype = new sinon.Event();
+
+        sinon.CustomEvent.prototype.constructor =  sinon.CustomEvent;
+
+        sinon.EventTarget = {
+            addEventListener: function addEventListener(event, listener) {
+                this.eventListeners = this.eventListeners || {};
+                this.eventListeners[event] = this.eventListeners[event] || [];
+                push.call(this.eventListeners[event], listener);
+            },
+
+            removeEventListener: function removeEventListener(event, listener) {
+                var listeners = this.eventListeners && this.eventListeners[event] || [];
+
+                for (var i = 0, l = listeners.length; i < l; ++i) {
+                    if (listeners[i] == listener) {
+                        return listeners.splice(i, 1);
+                    }
+                }
+            },
+
+            dispatchEvent: function dispatchEvent(event) {
+                var type = event.type;
+                var listeners = this.eventListeners && this.eventListeners[type] || [];
+
+                for (var i = 0; i < listeners.length; i++) {
+                    if (typeof listeners[i] == "function") {
+                        listeners[i].call(this, event);
+                    } else {
+                        listeners[i].handleEvent(event);
+                    }
+                }
+
+                return !!event.defaultPrevented;
+            }
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require) {
+        var sinon = require("./core");
+        makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require);
+    } else {
+        makeApi(sinon);
+    }
+}());
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Logs errors
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (sinon) {
+    // cache a reference to setTimeout, so that our reference won't be stubbed out
+    // when using fake timers and errors will still get logged
+    // https://github.com/cjohansen/Sinon.JS/issues/381
+    var realSetTimeout = setTimeout;
+
+    function makeApi(sinon) {
+
+        function log() {}
+
+        function logError(label, err) {
+            var msg = label + " threw exception: ";
+
+            sinon.log(msg + "[" + err.name + "] " + err.message);
+
+            if (err.stack) {
+                sinon.log(err.stack);
+            }
+
+            logError.setTimeout(function () {
+                err.message = msg + err.message;
+                throw err;
+            }, 0);
+        };
+
+        // wrap realSetTimeout with something we can stub in tests
+        logError.setTimeout = function (func, timeout) {
+            realSetTimeout(func, timeout);
+        }
+
+        var exports = {};
+        exports.log = sinon.log = log;
+        exports.logError = sinon.logError = logError;
+
+        return exports;
+    }
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        module.exports = makeApi(sinon);
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XDomainRequest object
+ */
+
+if (typeof sinon == "undefined") {
+    this.sinon = {};
+}
+
+// wrapper for global
+(function (global) {
+    var xdr = { XDomainRequest: global.XDomainRequest };
+    xdr.GlobalXDomainRequest = global.XDomainRequest;
+    xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined";
+    xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest :  false;
+
+    function makeApi(sinon) {
+        sinon.xdr = xdr;
+
+        function FakeXDomainRequest() {
+            this.readyState = FakeXDomainRequest.UNSENT;
+            this.requestBody = null;
+            this.requestHeaders = {};
+            this.status = 0;
+            this.timeout = null;
+
+            if (typeof FakeXDomainRequest.onCreate == "function") {
+                FakeXDomainRequest.onCreate(this);
+            }
+        }
+
+        function verifyState(xdr) {
+            if (xdr.readyState !== FakeXDomainRequest.OPENED) {
+                throw new Error("INVALID_STATE_ERR");
+            }
+
+            if (xdr.sendFlag) {
+                throw new Error("INVALID_STATE_ERR");
+            }
+        }
+
+        function verifyRequestSent(xdr) {
+            if (xdr.readyState == FakeXDomainRequest.UNSENT) {
+                throw new Error("Request not sent");
+            }
+            if (xdr.readyState == FakeXDomainRequest.DONE) {
+                throw new Error("Request done");
+            }
+        }
+
+        function verifyResponseBodyType(body) {
+            if (typeof body != "string") {
+                var error = new Error("Attempted to respond to fake XDomainRequest with " +
+                                    body + ", which is not a string.");
+                error.name = "InvalidBodyException";
+                throw error;
+            }
+        }
+
+        sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, {
+            open: function open(method, url) {
+                this.method = method;
+                this.url = url;
+
+                this.responseText = null;
+                this.sendFlag = false;
+
+                this.readyStateChange(FakeXDomainRequest.OPENED);
+            },
+
+            readyStateChange: function readyStateChange(state) {
+                this.readyState = state;
+                var eventName = "";
+                switch (this.readyState) {
+                case FakeXDomainRequest.UNSENT:
+                    break;
+                case FakeXDomainRequest.OPENED:
+                    break;
+                case FakeXDomainRequest.LOADING:
+                    if (this.sendFlag) {
+                        //raise the progress event
+                        eventName = "onprogress";
+                    }
+                    break;
+                case FakeXDomainRequest.DONE:
+                    if (this.isTimeout) {
+                        eventName = "ontimeout"
+                    } else if (this.errorFlag || (this.status < 200 || this.status > 299)) {
+                        eventName = "onerror";
+                    } else {
+                        eventName = "onload"
+                    }
+                    break;
+                }
+
+                // raising event (if defined)
+                if (eventName) {
+                    if (typeof this[eventName] == "function") {
+                        try {
+                            this[eventName]();
+                        } catch (e) {
+                            sinon.logError("Fake XHR " + eventName + " handler", e);
+                        }
+                    }
+                }
+            },
+
+            send: function send(data) {
+                verifyState(this);
+
+                if (!/^(get|head)$/i.test(this.method)) {
+                    this.requestBody = data;
+                }
+                this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+
+                this.errorFlag = false;
+                this.sendFlag = true;
+                this.readyStateChange(FakeXDomainRequest.OPENED);
+
+                if (typeof this.onSend == "function") {
+                    this.onSend(this);
+                }
+            },
+
+            abort: function abort() {
+                this.aborted = true;
+                this.responseText = null;
+                this.errorFlag = true;
+
+                if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) {
+                    this.readyStateChange(sinon.FakeXDomainRequest.DONE);
+                    this.sendFlag = false;
+                }
+            },
+
+            setResponseBody: function setResponseBody(body) {
+                verifyRequestSent(this);
+                verifyResponseBodyType(body);
+
+                var chunkSize = this.chunkSize || 10;
+                var index = 0;
+                this.responseText = "";
+
+                do {
+                    this.readyStateChange(FakeXDomainRequest.LOADING);
+                    this.responseText += body.substring(index, index + chunkSize);
+                    index += chunkSize;
+                } while (index < body.length);
+
+                this.readyStateChange(FakeXDomainRequest.DONE);
+            },
+
+            respond: function respond(status, contentType, body) {
+                // content-type ignored, since XDomainRequest does not carry this
+                // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease
+                // test integration across browsers
+                this.status = typeof status == "number" ? status : 200;
+                this.setResponseBody(body || "");
+            },
+
+            simulatetimeout: function simulatetimeout() {
+                this.status = 0;
+                this.isTimeout = true;
+                // Access to this should actually throw an error
+                this.responseText = undefined;
+                this.readyStateChange(FakeXDomainRequest.DONE);
+            }
+        });
+
+        sinon.extend(FakeXDomainRequest, {
+            UNSENT: 0,
+            OPENED: 1,
+            LOADING: 3,
+            DONE: 4
+        });
+
+        sinon.useFakeXDomainRequest = function useFakeXDomainRequest() {
+            sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) {
+                if (xdr.supportsXDR) {
+                    global.XDomainRequest = xdr.GlobalXDomainRequest;
+                }
+
+                delete sinon.FakeXDomainRequest.restore;
+
+                if (keepOnCreate !== true) {
+                    delete sinon.FakeXDomainRequest.onCreate;
+                }
+            };
+            if (xdr.supportsXDR) {
+                global.XDomainRequest = sinon.FakeXDomainRequest;
+            }
+            return sinon.FakeXDomainRequest;
+        };
+
+        sinon.FakeXDomainRequest = FakeXDomainRequest;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./core");
+        require("../extend");
+        require("./event");
+        require("../log_error");
+        makeApi(sinon);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else {
+        makeApi(sinon);
+    }
+})(typeof global !== "undefined" ? global : self);
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XMLHttpRequest object
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (global) {
+
+    var supportsProgress = typeof ProgressEvent !== "undefined";
+    var supportsCustomEvent = typeof CustomEvent !== "undefined";
+    var supportsFormData = typeof FormData !== "undefined";
+    var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest };
+    sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
+    sinonXhr.GlobalActiveXObject = global.ActiveXObject;
+    sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined";
+    sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined";
+    sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX
+                                     ? function () {
+                                        return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0")
+                                    } : false;
+    sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest());
+
+    /*jsl:ignore*/
+    var unsafeHeaders = {
+        "Accept-Charset": true,
+        "Accept-Encoding": true,
+        Connection: true,
+        "Content-Length": true,
+        Cookie: true,
+        Cookie2: true,
+        "Content-Transfer-Encoding": true,
+        Date: true,
+        Expect: true,
+        Host: true,
+        "Keep-Alive": true,
+        Referer: true,
+        TE: true,
+        Trailer: true,
+        "Transfer-Encoding": true,
+        Upgrade: true,
+        "User-Agent": true,
+        Via: true
+    };
+    /*jsl:end*/
+
+    // Note that for FakeXMLHttpRequest to work pre ES5
+    // we lose some of the alignment with the spec.
+    // To ensure as close a match as possible,
+    // set responseType before calling open, send or respond;
+    function FakeXMLHttpRequest() {
+        this.readyState = FakeXMLHttpRequest.UNSENT;
+        this.requestHeaders = {};
+        this.requestBody = null;
+        this.status = 0;
+        this.statusText = "";
+        this.upload = new UploadProgress();
+        this.responseType = "";
+        this.response = "";
+        if (sinonXhr.supportsCORS) {
+            this.withCredentials = false;
+        }
+
+        var xhr = this;
+        var events = ["loadstart", "load", "abort", "loadend"];
+
+        function addEventListener(eventName) {
+            xhr.addEventListener(eventName, function (event) {
+                var listener = xhr["on" + eventName];
+
+                if (listener && typeof listener == "function") {
+                    listener.call(this, event);
+                }
+            });
+        }
+
+        for (var i = events.length - 1; i >= 0; i--) {
+            addEventListener(events[i]);
+        }
+
+        if (typeof FakeXMLHttpRequest.onCreate == "function") {
+            FakeXMLHttpRequest.onCreate(this);
+        }
+    }
+
+    // An upload object is created for each
+    // FakeXMLHttpRequest and allows upload
+    // events to be simulated using uploadProgress
+    // and uploadError.
+    function UploadProgress() {
+        this.eventListeners = {
+            progress: [],
+            load: [],
+            abort: [],
+            error: []
+        }
+    }
+
+    UploadProgress.prototype.addEventListener = function addEventListener(event, listener) {
+        this.eventListeners[event].push(listener);
+    };
+
+    UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) {
+        var listeners = this.eventListeners[event] || [];
+
+        for (var i = 0, l = listeners.length; i < l; ++i) {
+            if (listeners[i] == listener) {
+                return listeners.splice(i, 1);
+            }
+        }
+    };
+
+    UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) {
+        var listeners = this.eventListeners[event.type] || [];
+
+        for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
+            listener(event);
+        }
+    };
+
+    function verifyState(xhr) {
+        if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+            throw new Error("INVALID_STATE_ERR");
+        }
+
+        if (xhr.sendFlag) {
+            throw new Error("INVALID_STATE_ERR");
+        }
+    }
+
+    function getHeader(headers, header) {
+        header = header.toLowerCase();
+
+        for (var h in headers) {
+            if (h.toLowerCase() == header) {
+                return h;
+            }
+        }
+
+        return null;
+    }
+
+    // filtering to enable a white-list version of Sinon FakeXhr,
+    // where whitelisted requests are passed through to real XHR
+    function each(collection, callback) {
+        if (!collection) {
+            return;
+        }
+
+        for (var i = 0, l = collection.length; i < l; i += 1) {
+            callback(collection[i]);
+        }
+    }
+    function some(collection, callback) {
+        for (var index = 0; index < collection.length; index++) {
+            if (callback(collection[index]) === true) {
+                return true;
+            }
+        }
+        return false;
+    }
+    // largest arity in XHR is 5 - XHR#open
+    var apply = function (obj, method, args) {
+        switch (args.length) {
+        case 0: return obj[method]();
+        case 1: return obj[method](args[0]);
+        case 2: return obj[method](args[0], args[1]);
+        case 3: return obj[method](args[0], args[1], args[2]);
+        case 4: return obj[method](args[0], args[1], args[2], args[3]);
+        case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]);
+        }
+    };
+
+    FakeXMLHttpRequest.filters = [];
+    FakeXMLHttpRequest.addFilter = function addFilter(fn) {
+        this.filters.push(fn)
+    };
+    var IE6Re = /MSIE 6/;
+    FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
+        var xhr = new sinonXhr.workingXHR();
+        each([
+            "open",
+            "setRequestHeader",
+            "send",
+            "abort",
+            "getResponseHeader",
+            "getAllResponseHeaders",
+            "addEventListener",
+            "overrideMimeType",
+            "removeEventListener"
+        ], function (method) {
+            fakeXhr[method] = function () {
+                return apply(xhr, method, arguments);
+            };
+        });
+
+        var copyAttrs = function (args) {
+            each(args, function (attr) {
+                try {
+                    fakeXhr[attr] = xhr[attr]
+                } catch (e) {
+                    if (!IE6Re.test(navigator.userAgent)) {
+                        throw e;
+                    }
+                }
+            });
+        };
+
+        var stateChange = function stateChange() {
+            fakeXhr.readyState = xhr.readyState;
+            if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                copyAttrs(["status", "statusText"]);
+            }
+            if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
+                copyAttrs(["responseText", "response"]);
+            }
+            if (xhr.readyState === FakeXMLHttpRequest.DONE) {
+                copyAttrs(["responseXML"]);
+            }
+            if (fakeXhr.onreadystatechange) {
+                fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
+            }
+        };
+
+        if (xhr.addEventListener) {
+            for (var event in fakeXhr.eventListeners) {
+                if (fakeXhr.eventListeners.hasOwnProperty(event)) {
+                    each(fakeXhr.eventListeners[event], function (handler) {
+                        xhr.addEventListener(event, handler);
+                    });
+                }
+            }
+            xhr.addEventListener("readystatechange", stateChange);
+        } else {
+            xhr.onreadystatechange = stateChange;
+        }
+        apply(xhr, "open", xhrArgs);
+    };
+    FakeXMLHttpRequest.useFilters = false;
+
+    function verifyRequestOpened(xhr) {
+        if (xhr.readyState != FakeXMLHttpRequest.OPENED) {
+            throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
+        }
+    }
+
+    function verifyRequestSent(xhr) {
+        if (xhr.readyState == FakeXMLHttpRequest.DONE) {
+            throw new Error("Request done");
+        }
+    }
+
+    function verifyHeadersReceived(xhr) {
+        if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
+            throw new Error("No headers received");
+        }
+    }
+
+    function verifyResponseBodyType(body) {
+        if (typeof body != "string") {
+            var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
+                                 body + ", which is not a string.");
+            error.name = "InvalidBodyException";
+            throw error;
+        }
+    }
+
+    FakeXMLHttpRequest.parseXML = function parseXML(text) {
+        var xmlDoc;
+
+        if (typeof DOMParser != "undefined") {
+            var parser = new DOMParser();
+            xmlDoc = parser.parseFromString(text, "text/xml");
+        } else {
+            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+            xmlDoc.async = "false";
+            xmlDoc.loadXML(text);
+        }
+
+        return xmlDoc;
+    };
+
+    FakeXMLHttpRequest.statusCodes = {
+        100: "Continue",
+        101: "Switching Protocols",
+        200: "OK",
+        201: "Created",
+        202: "Accepted",
+        203: "Non-Authoritative Information",
+        204: "No Content",
+        205: "Reset Content",
+        206: "Partial Content",
+        207: "Multi-Status",
+        300: "Multiple Choice",
+        301: "Moved Permanently",
+        302: "Found",
+        303: "See Other",
+        304: "Not Modified",
+        305: "Use Proxy",
+        307: "Temporary Redirect",
+        400: "Bad Request",
+        401: "Unauthorized",
+        402: "Payment Required",
+        403: "Forbidden",
+        404: "Not Found",
+        405: "Method Not Allowed",
+        406: "Not Acceptable",
+        407: "Proxy Authentication Required",
+        408: "Request Timeout",
+        409: "Conflict",
+        410: "Gone",
+        411: "Length Required",
+        412: "Precondition Failed",
+        413: "Request Entity Too Large",
+        414: "Request-URI Too Long",
+        415: "Unsupported Media Type",
+        416: "Requested Range Not Satisfiable",
+        417: "Expectation Failed",
+        422: "Unprocessable Entity",
+        500: "Internal Server Error",
+        501: "Not Implemented",
+        502: "Bad Gateway",
+        503: "Service Unavailable",
+        504: "Gateway Timeout",
+        505: "HTTP Version Not Supported"
+    };
+
+    function makeApi(sinon) {
+        sinon.xhr = sinonXhr;
+
+        sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
+            async: true,
+
+            open: function open(method, url, async, username, password) {
+                this.method = method;
+                this.url = url;
+                this.async = typeof async == "boolean" ? async : true;
+                this.username = username;
+                this.password = password;
+                this.responseText = null;
+                this.response = this.responseType === "json" ? null : "";
+                this.responseXML = null;
+                this.requestHeaders = {};
+                this.sendFlag = false;
+
+                if (FakeXMLHttpRequest.useFilters === true) {
+                    var xhrArgs = arguments;
+                    var defake = some(FakeXMLHttpRequest.filters, function (filter) {
+                        return filter.apply(this, xhrArgs)
+                    });
+                    if (defake) {
+                        return FakeXMLHttpRequest.defake(this, arguments);
+                    }
+                }
+                this.readyStateChange(FakeXMLHttpRequest.OPENED);
+            },
+
+            readyStateChange: function readyStateChange(state) {
+                this.readyState = state;
+
+                if (typeof this.onreadystatechange == "function") {
+                    try {
+                        this.onreadystatechange();
+                    } catch (e) {
+                        sinon.logError("Fake XHR onreadystatechange handler", e);
+                    }
+                }
+
+                switch (this.readyState) {
+                    case FakeXMLHttpRequest.DONE:
+                        if (supportsProgress) {
+                            this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+                            this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+                        }
+                        this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
+                        this.dispatchEvent(new sinon.Event("load", false, false, this));
+                        this.dispatchEvent(new sinon.Event("loadend", false, false, this));
+                        break;
+                }
+
+                this.dispatchEvent(new sinon.Event("readystatechange"));
+            },
+
+            setRequestHeader: function setRequestHeader(header, value) {
+                verifyState(this);
+
+                if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
+                    throw new Error("Refused to set unsafe header \"" + header + "\"");
+                }
+
+                if (this.requestHeaders[header]) {
+                    this.requestHeaders[header] += "," + value;
+                } else {
+                    this.requestHeaders[header] = value;
+                }
+            },
+
+            // Helps testing
+            setResponseHeaders: function setResponseHeaders(headers) {
+                verifyRequestOpened(this);
+                this.responseHeaders = {};
+
+                for (var header in headers) {
+                    if (headers.hasOwnProperty(header)) {
+                        this.responseHeaders[header] = headers[header];
+                    }
+                }
+
+                if (this.async) {
+                    this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
+                } else {
+                    this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
+                }
+            },
+
+            // Currently treats ALL data as a DOMString (i.e. no Document)
+            send: function send(data) {
+                verifyState(this);
+
+                if (!/^(get|head)$/i.test(this.method)) {
+                    var contentType = getHeader(this.requestHeaders, "Content-Type");
+                    if (this.requestHeaders[contentType]) {
+                        var value = this.requestHeaders[contentType].split(";");
+                        this.requestHeaders[contentType] = value[0] + ";charset=utf-8";
+                    } else if (supportsFormData && !(data instanceof FormData)) {
+                        this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+                    }
+
+                    this.requestBody = data;
+                }
+
+                this.errorFlag = false;
+                this.sendFlag = this.async;
+                this.response = this.responseType === "json" ? null : "";
+                this.readyStateChange(FakeXMLHttpRequest.OPENED);
+
+                if (typeof this.onSend == "function") {
+                    this.onSend(this);
+                }
+
+                this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
+            },
+
+            abort: function abort() {
+                this.aborted = true;
+                this.responseText = null;
+                this.response = this.responseType === "json" ? null : "";
+                this.errorFlag = true;
+                this.requestHeaders = {};
+                this.responseHeaders = {};
+
+                if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) {
+                    this.readyStateChange(FakeXMLHttpRequest.DONE);
+                    this.sendFlag = false;
+                }
+
+                this.readyState = FakeXMLHttpRequest.UNSENT;
+
+                this.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+                this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+                if (typeof this.onerror === "function") {
+                    this.onerror();
+                }
+            },
+
+            getResponseHeader: function getResponseHeader(header) {
+                if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                    return null;
+                }
+
+                if (/^Set-Cookie2?$/i.test(header)) {
+                    return null;
+                }
+
+                header = getHeader(this.responseHeaders, header);
+
+                return this.responseHeaders[header] || null;
+            },
+
+            getAllResponseHeaders: function getAllResponseHeaders() {
+                if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+                    return "";
+                }
+
+                var headers = "";
+
+                for (var header in this.responseHeaders) {
+                    if (this.responseHeaders.hasOwnProperty(header) &&
+                        !/^Set-Cookie2?$/i.test(header)) {
+                        headers += header + ": " + this.responseHeaders[header] + "\r\n";
+                    }
+                }
+
+                return headers;
+            },
+
+            setResponseBody: function setResponseBody(body) {
+                verifyRequestSent(this);
+                verifyHeadersReceived(this);
+                verifyResponseBodyType(body);
+
+                var chunkSize = this.chunkSize || 10;
+                var index = 0;
+                this.responseText = "";
+
+                do {
+                    if (this.async) {
+                        this.readyStateChange(FakeXMLHttpRequest.LOADING);
+                    }
+
+                    this.responseText += body.substring(index, index + chunkSize);
+                    index += chunkSize;
+                } while (index < body.length);
+
+                var type = this.getResponseHeader("Content-Type");
+
+                if (this.responseText &&
+                    (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
+                    try {
+                        this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
+                    } catch (e) {
+                        // Unable to parse XML - no biggie
+                    }
+                }
+
+                this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText;
+                this.readyStateChange(FakeXMLHttpRequest.DONE);
+            },
+
+            respond: function respond(status, headers, body) {
+                this.status = typeof status == "number" ? status : 200;
+                this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
+                this.setResponseHeaders(headers || {});
+                this.setResponseBody(body || "");
+            },
+
+            uploadProgress: function uploadProgress(progressEventRaw) {
+                if (supportsProgress) {
+                    this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+                }
+            },
+
+            downloadProgress: function downloadProgress(progressEventRaw) {
+                if (supportsProgress) {
+                    this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+                }
+            },
+
+            uploadError: function uploadError(error) {
+                if (supportsCustomEvent) {
+                    this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error}));
+                }
+            }
+        });
+
+        sinon.extend(FakeXMLHttpRequest, {
+            UNSENT: 0,
+            OPENED: 1,
+            HEADERS_RECEIVED: 2,
+            LOADING: 3,
+            DONE: 4
+        });
+
+        sinon.useFakeXMLHttpRequest = function () {
+            FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
+                if (sinonXhr.supportsXHR) {
+                    global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
+                }
+
+                if (sinonXhr.supportsActiveX) {
+                    global.ActiveXObject = sinonXhr.GlobalActiveXObject;
+                }
+
+                delete FakeXMLHttpRequest.restore;
+
+                if (keepOnCreate !== true) {
+                    delete FakeXMLHttpRequest.onCreate;
+                }
+            };
+            if (sinonXhr.supportsXHR) {
+                global.XMLHttpRequest = FakeXMLHttpRequest;
+            }
+
+            if (sinonXhr.supportsActiveX) {
+                global.ActiveXObject = function ActiveXObject(objId) {
+                    if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
+
+                        return new FakeXMLHttpRequest();
+                    }
+
+                    return new sinonXhr.GlobalActiveXObject(objId);
+                };
+            }
+
+            return FakeXMLHttpRequest;
+        };
+
+        sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./core");
+        require("../extend");
+        require("./event");
+        require("../log_error");
+        makeApi(sinon);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (typeof sinon === "undefined") {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+
+})(typeof global !== "undefined" ? global : self);
+
+/**
+ * @depend fake_xdomain_request.js
+ * @depend fake_xml_http_request.js
+ * @depend ../format.js
+ * @depend ../log_error.js
+ */
+/**
+ * The Sinon "server" mimics a web server that receives requests from
+ * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
+ * both synchronously and asynchronously. To respond synchronuously, canned
+ * answers have to be provided upfront.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+    var sinon = {};
+}
+
+(function () {
+    var push = [].push;
+    function F() {}
+
+    function create(proto) {
+        F.prototype = proto;
+        return new F();
+    }
+
+    function responseArray(handler) {
+        var response = handler;
+
+        if (Object.prototype.toString.call(handler) != "[object Array]") {
+            response = [200, {}, handler];
+        }
+
+        if (typeof response[2] != "string") {
+            throw new TypeError("Fake server response body should be string, but was " +
+                                typeof response[2]);
+        }
+
+        return response;
+    }
+
+    var wloc = typeof window !== "undefined" ? window.location : {};
+    var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
+
+    function matchOne(response, reqMethod, reqUrl) {
+        var rmeth = response.method;
+        var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase();
+        var url = response.url;
+        var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl));
+
+        return matchMethod && matchUrl;
+    }
+
+    function match(response, request) {
+        var requestUrl = request.url;
+
+        if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
+            requestUrl = requestUrl.replace(rCurrLoc, "");
+        }
+
+        if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
+            if (typeof response.response == "function") {
+                var ru = response.url;
+                var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []);
+                return response.response.apply(response, args);
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
+    function makeApi(sinon) {
+        sinon.fakeServer = {
+            create: function () {
+                var server = create(this);
+                if (!sinon.xhr.supportsCORS) {
+                    this.xhr = sinon.useFakeXDomainRequest();
+                } else {
+                    this.xhr = sinon.useFakeXMLHttpRequest();
+                }
+                server.requests = [];
+
+                this.xhr.onCreate = function (xhrObj) {
+                    server.addRequest(xhrObj);
+                };
+
+                return server;
+            },
+
+            addRequest: function addRequest(xhrObj) {
+                var server = this;
+                push.call(this.requests, xhrObj);
+
+                xhrObj.onSend = function () {
+                    server.handleRequest(this);
+
+                    if (server.respondImmediately) {
+                        server.respond();
+                    } else if (server.autoRespond && !server.responding) {
+                        setTimeout(function () {
+                            server.responding = false;
+                            server.respond();
+                        }, server.autoRespondAfter || 10);
+
+                        server.responding = true;
+                    }
+                };
+            },
+
+            getHTTPMethod: function getHTTPMethod(request) {
+                if (this.fakeHTTPMethods && /post/i.test(request.method)) {
+                    var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
+                    return !!matches ? matches[1] : request.method;
+                }
+
+                return request.method;
+            },
+
+            handleRequest: function handleRequest(xhr) {
+                if (xhr.async) {
+                    if (!this.queue) {
+                        this.queue = [];
+                    }
+
+                    push.call(this.queue, xhr);
+                } else {
+                    this.processRequest(xhr);
+                }
+            },
+
+            log: function log(response, request) {
+                var str;
+
+                str =  "Request:\n"  + sinon.format(request)  + "\n\n";
+                str += "Response:\n" + sinon.format(response) + "\n\n";
+
+                sinon.log(str);
+            },
+
+            respondWith: function respondWith(method, url, body) {
+                if (arguments.length == 1 && typeof method != "function") {
+                    this.response = responseArray(method);
+                    return;
+                }
+
+                if (!this.responses) {
+                    this.responses = [];
+                }
+
+                if (arguments.length == 1) {
+                    body = method;
+                    url = method = null;
+                }
+
+                if (arguments.length == 2) {
+                    body = url;
+                    url = method;
+                    method = null;
+                }
+
+                push.call(this.responses, {
+                    method: method,
+                    url: url,
+                    response: typeof body == "function" ? body : responseArray(body)
+                });
+            },
+
+            respond: function respond() {
+                if (arguments.length > 0) {
+                    this.respondWith.apply(this, arguments);
+                }
+
+                var queue = this.queue || [];
+                var requests = queue.splice(0, queue.length);
+                var request;
+
+                while (request = requests.shift()) {
+                    this.processRequest(request);
+                }
+            },
+
+            processRequest: function processRequest(request) {
+                try {
+                    if (request.aborted) {
+                        return;
+                    }
+
+                    var response = this.response || [404, {}, ""];
+
+                    if (this.responses) {
+                        for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
+                            if (match.call(this, this.responses[i], request)) {
+                                response = this.responses[i].response;
+                                break;
+                            }
+                        }
+                    }
+
+                    if (request.readyState != 4) {
+                        this.log(response, request);
+
+                        request.respond(response[0], response[1], response[2]);
+                    }
+                } catch (e) {
+                    sinon.logError("Fake server request processing", e);
+                }
+            },
+
+            restore: function restore() {
+                return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
+            }
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./core");
+        require("./fake_xdomain_request");
+        require("./fake_xml_http_request");
+        require("../format");
+        makeApi(sinon);
+        module.exports = sinon;
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else {
+        makeApi(sinon);
+    }
+}());
+
+/**
+ * @depend fake_server.js
+ * @depend fake_timers.js
+ */
+/**
+ * Add-on for sinon.fakeServer that automatically handles a fake timer along with
+ * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
+ * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
+ * it polls the object for completion with setInterval. Dispite the direct
+ * motivation, there is nothing jQuery-specific in this file, so it can be used
+ * in any environment where the ajax implementation depends on setInterval or
+ * setTimeout.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function () {
+    function makeApi(sinon) {
+        function Server() {}
+        Server.prototype = sinon.fakeServer;
+
+        sinon.fakeServerWithClock = new Server();
+
+        sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
+            if (xhr.async) {
+                if (typeof setTimeout.clock == "object") {
+                    this.clock = setTimeout.clock;
+                } else {
+                    this.clock = sinon.useFakeTimers();
+                    this.resetClock = true;
+                }
+
+                if (!this.longestTimeout) {
+                    var clockSetTimeout = this.clock.setTimeout;
+                    var clockSetInterval = this.clock.setInterval;
+                    var server = this;
+
+                    this.clock.setTimeout = function (fn, timeout) {
+                        server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+                        return clockSetTimeout.apply(this, arguments);
+                    };
+
+                    this.clock.setInterval = function (fn, timeout) {
+                        server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+                        return clockSetInterval.apply(this, arguments);
+                    };
+                }
+            }
+
+            return sinon.fakeServer.addRequest.call(this, xhr);
+        };
+
+        sinon.fakeServerWithClock.respond = function respond() {
+            var returnVal = sinon.fakeServer.respond.apply(this, arguments);
+
+            if (this.clock) {
+                this.clock.tick(this.longestTimeout || 0);
+                this.longestTimeout = 0;
+
+                if (this.resetClock) {
+                    this.clock.restore();
+                    this.resetClock = false;
+                }
+            }
+
+            return returnVal;
+        };
+
+        sinon.fakeServerWithClock.restore = function restore() {
+            if (this.clock) {
+                this.clock.restore();
+            }
+
+            return sinon.fakeServer.restore.apply(this, arguments);
+        };
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require) {
+        var sinon = require("./core");
+        require("./fake_server");
+        require("./fake_timers");
+        makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require);
+    } else {
+        makeApi(sinon);
+    }
+}());
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend collection.js
+ * @depend util/fake_timers.js
+ * @depend util/fake_server_with_clock.js
+ */
+/**
+ * Manages fake collections as well as fake utilities such as Sinon's
+ * timers and fake XHR implementation in one convenient object.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function () {
+    function makeApi(sinon) {
+        var push = [].push;
+
+        function exposeValue(sandbox, config, key, value) {
+            if (!value) {
+                return;
+            }
+
+            if (config.injectInto && !(key in config.injectInto)) {
+                config.injectInto[key] = value;
+                sandbox.injectedKeys.push(key);
+            } else {
+                push.call(sandbox.args, value);
+            }
+        }
+
+        function prepareSandboxFromConfig(config) {
+            var sandbox = sinon.create(sinon.sandbox);
+
+            if (config.useFakeServer) {
+                if (typeof config.useFakeServer == "object") {
+                    sandbox.serverPrototype = config.useFakeServer;
+                }
+
+                sandbox.useFakeServer();
+            }
+
+            if (config.useFakeTimers) {
+                if (typeof config.useFakeTimers == "object") {
+                    sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
+                } else {
+                    sandbox.useFakeTimers();
+                }
+            }
+
+            return sandbox;
+        }
+
+        sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
+            useFakeTimers: function useFakeTimers() {
+                this.clock = sinon.useFakeTimers.apply(sinon, arguments);
+
+                return this.add(this.clock);
+            },
+
+            serverPrototype: sinon.fakeServer,
+
+            useFakeServer: function useFakeServer() {
+                var proto = this.serverPrototype || sinon.fakeServer;
+
+                if (!proto || !proto.create) {
+                    return null;
+                }
+
+                this.server = proto.create();
+                return this.add(this.server);
+            },
+
+            inject: function (obj) {
+                sinon.collection.inject.call(this, obj);
+
+                if (this.clock) {
+                    obj.clock = this.clock;
+                }
+
+                if (this.server) {
+                    obj.server = this.server;
+                    obj.requests = this.server.requests;
+                }
+
+                obj.match = sinon.match;
+
+                return obj;
+            },
+
+            restore: function () {
+                sinon.collection.restore.apply(this, arguments);
+                this.restoreContext();
+            },
+
+            restoreContext: function () {
+                if (this.injectedKeys) {
+                    for (var i = 0, j = this.injectedKeys.length; i < j; i++) {
+                        delete this.injectInto[this.injectedKeys[i]];
+                    }
+                    this.injectedKeys = [];
+                }
+            },
+
+            create: function (config) {
+                if (!config) {
+                    return sinon.create(sinon.sandbox);
+                }
+
+                var sandbox = prepareSandboxFromConfig(config);
+                sandbox.args = sandbox.args || [];
+                sandbox.injectedKeys = [];
+                sandbox.injectInto = config.injectInto;
+                var prop, value, exposed = sandbox.inject({});
+
+                if (config.properties) {
+                    for (var i = 0, l = config.properties.length; i < l; i++) {
+                        prop = config.properties[i];
+                        value = exposed[prop] || prop == "sandbox" && sandbox;
+                        exposeValue(sandbox, config, prop, value);
+                    }
+                } else {
+                    exposeValue(sandbox, config, "sandbox", value);
+                }
+
+                return sandbox;
+            },
+
+            match: sinon.match
+        });
+
+        sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
+
+        return sinon.sandbox;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./extend");
+        require("./util/fake_server_with_clock");
+        require("./util/fake_timers");
+        require("./collection");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}());
+
+/**
+ * @depend util/core.js
+ * @depend sandbox.js
+ */
+/**
+ * Test function, sandboxes fakes
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    function makeApi(sinon) {
+        var slice = Array.prototype.slice;
+
+        function test(callback) {
+            var type = typeof callback;
+
+            if (type != "function") {
+                throw new TypeError("sinon.test needs to wrap a test function, got " + type);
+            }
+
+            function sinonSandboxedTest() {
+                var config = sinon.getConfig(sinon.config);
+                config.injectInto = config.injectIntoThis && this || config.injectInto;
+                var sandbox = sinon.sandbox.create(config);
+                var args = slice.call(arguments);
+                var oldDone = args.length && args[args.length - 1];
+                var exception, result;
+
+                if (typeof oldDone == "function") {
+                    args[args.length - 1] = function sinonDone(result) {
+                        if (result) {
+                            sandbox.restore();
+                            throw exception;
+                        } else {
+                            sandbox.verifyAndRestore();
+                        }
+                        oldDone(result);
+                    };
+                }
+
+                try {
+                    result = callback.apply(this, args.concat(sandbox.args));
+                } catch (e) {
+                    exception = e;
+                }
+
+                if (typeof oldDone != "function") {
+                    if (typeof exception !== "undefined") {
+                        sandbox.restore();
+                        throw exception;
+                    } else {
+                        sandbox.verifyAndRestore();
+                    }
+                }
+
+                return result;
+            }
+
+            if (callback.length) {
+                return function sinonAsyncSandboxedTest(callback) {
+                    return sinonSandboxedTest.apply(this, arguments);
+                };
+            }
+
+            return sinonSandboxedTest;
+        }
+
+        test.config = {
+            injectIntoThis: true,
+            injectInto: null,
+            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+            useFakeTimers: true,
+            useFakeServer: true
+        };
+
+        sinon.test = test;
+        return test;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./sandbox");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (sinon) {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend test.js
+ */
+/**
+ * Test case, sandboxes all test functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+    function createTest(property, setUp, tearDown) {
+        return function () {
+            if (setUp) {
+                setUp.apply(this, arguments);
+            }
+
+            var exception, result;
+
+            try {
+                result = property.apply(this, arguments);
+            } catch (e) {
+                exception = e;
+            }
+
+            if (tearDown) {
+                tearDown.apply(this, arguments);
+            }
+
+            if (exception) {
+                throw exception;
+            }
+
+            return result;
+        };
+    }
+
+    function makeApi(sinon) {
+        function testCase(tests, prefix) {
+            if (!tests || typeof tests != "object") {
+                throw new TypeError("sinon.testCase needs an object with test functions");
+            }
+
+            prefix = prefix || "test";
+            var rPrefix = new RegExp("^" + prefix);
+            var methods = {}, testName, property, method;
+            var setUp = tests.setUp;
+            var tearDown = tests.tearDown;
+
+            for (testName in tests) {
+                if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) {
+                    property = tests[testName];
+
+                    if (typeof property == "function" && rPrefix.test(testName)) {
+                        method = property;
+
+                        if (setUp || tearDown) {
+                            method = createTest(property, setUp, tearDown);
+                        }
+
+                        methods[testName] = sinon.test(method);
+                    } else {
+                        methods[testName] = tests[testName];
+                    }
+                }
+            }
+
+            return methods;
+        }
+
+        sinon.testCase = testCase;
+        return testCase;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./test");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend match.js
+ * @depend format.js
+ */
+/**
+ * Assertions matching the test spy retrieval interface.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon, global) {
+    var slice = Array.prototype.slice;
+
+    function makeApi(sinon) {
+        var assert;
+
+        function verifyIsStub() {
+            var method;
+
+            for (var i = 0, l = arguments.length; i < l; ++i) {
+                method = arguments[i];
+
+                if (!method) {
+                    assert.fail("fake is not a spy");
+                }
+
+                if (method.proxy && method.proxy.isSinonProxy) {
+                    verifyIsStub(method.proxy);
+                } else {
+                    if (typeof method != "function") {
+                        assert.fail(method + " is not a function");
+                    }
+
+                    if (typeof method.getCall != "function") {
+                        assert.fail(method + " is not stubbed");
+                    }
+                }
+
+            }
+        }
+
+        function failAssertion(object, msg) {
+            object = object || global;
+            var failMethod = object.fail || assert.fail;
+            failMethod.call(object, msg);
+        }
+
+        function mirrorPropAsAssertion(name, method, message) {
+            if (arguments.length == 2) {
+                message = method;
+                method = name;
+            }
+
+            assert[name] = function (fake) {
+                verifyIsStub(fake);
+
+                var args = slice.call(arguments, 1);
+                var failed = false;
+
+                if (typeof method == "function") {
+                    failed = !method(fake);
+                } else {
+                    failed = typeof fake[method] == "function" ?
+                        !fake[method].apply(fake, args) : !fake[method];
+                }
+
+                if (failed) {
+                    failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args)));
+                } else {
+                    assert.pass(name);
+                }
+            };
+        }
+
+        function exposedName(prefix, prop) {
+            return !prefix || /^fail/.test(prop) ? prop :
+                prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
+        }
+
+        assert = {
+            failException: "AssertError",
+
+            fail: function fail(message) {
+                var error = new Error(message);
+                error.name = this.failException || assert.failException;
+
+                throw error;
+            },
+
+            pass: function pass(assertion) {},
+
+            callOrder: function assertCallOrder() {
+                verifyIsStub.apply(null, arguments);
+                var expected = "", actual = "";
+
+                if (!sinon.calledInOrder(arguments)) {
+                    try {
+                        expected = [].join.call(arguments, ", ");
+                        var calls = slice.call(arguments);
+                        var i = calls.length;
+                        while (i) {
+                            if (!calls[--i].called) {
+                                calls.splice(i, 1);
+                            }
+                        }
+                        actual = sinon.orderByFirstCall(calls).join(", ");
+                    } catch (e) {
+                        // If this fails, we'll just fall back to the blank string
+                    }
+
+                    failAssertion(this, "expected " + expected + " to be " +
+                                "called in order but were called as " + actual);
+                } else {
+                    assert.pass("callOrder");
+                }
+            },
+
+            callCount: function assertCallCount(method, count) {
+                verifyIsStub(method);
+
+                if (method.callCount != count) {
+                    var msg = "expected %n to be called " + sinon.timesInWords(count) +
+                        " but was called %c%C";
+                    failAssertion(this, method.printf(msg));
+                } else {
+                    assert.pass("callCount");
+                }
+            },
+
+            expose: function expose(target, options) {
+                if (!target) {
+                    throw new TypeError("target is null or undefined");
+                }
+
+                var o = options || {};
+                var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
+                var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
+
+                for (var method in this) {
+                    if (method != "expose" && (includeFail || !/^(fail)/.test(method))) {
+                        target[exposedName(prefix, method)] = this[method];
+                    }
+                }
+
+                return target;
+            },
+
+            match: function match(actual, expectation) {
+                var matcher = sinon.match(expectation);
+                if (matcher.test(actual)) {
+                    assert.pass("match");
+                } else {
+                    var formatted = [
+                        "expected value to match",
+                        "    expected = " + sinon.format(expectation),
+                        "    actual = " + sinon.format(actual)
+                    ]
+                    failAssertion(this, formatted.join("\n"));
+                }
+            }
+        };
+
+        mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
+        mirrorPropAsAssertion("notCalled", function (spy) {
+            return !spy.called;
+        }, "expected %n to not have been called but was called %c%C");
+        mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
+        mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
+        mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
+        mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
+        mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
+        mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
+        mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
+        mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
+        mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
+        mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
+        mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
+        mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
+        mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
+        mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
+        mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
+        mirrorPropAsAssertion("threw", "%n did not throw exception%C");
+        mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
+
+        sinon.assert = assert;
+        return assert;
+    }
+
+    var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+    var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+    function loadDependencies(require, exports, module) {
+        var sinon = require("./util/core");
+        require("./match");
+        require("./format");
+        module.exports = makeApi(sinon);
+    }
+
+    if (isAMD) {
+        define(loadDependencies);
+    } else if (isNode) {
+        loadDependencies(require, module.exports, module);
+    } else if (!sinon) {
+        return;
+    } else {
+        makeApi(sinon);
+    }
+
+}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
+
+  return sinon;
+}));
diff --git a/resources/lib/sinonjs/sinon-ie-1.10.3.js b/resources/lib/sinonjs/sinon-ie-1.10.3.js
deleted file mode 100644 (file)
index de8c23d..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Sinon.JS 1.10.3, 2014/07/11
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
- *
- * (The BSD License)
- * 
- * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright notice,
- *       this list of conditions and the following disclaimer in the documentation
- *       and/or other materials provided with the distribution.
- *     * Neither the name of Christian Johansen nor the names of his contributors
- *       may be used to endorse or promote products derived from this software
- *       without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/
-/**
- * Helps IE run the fake timers. By defining global functions, IE allows
- * them to be overwritten at a later point. If these are not defined like
- * this, overwriting them will result in anything from an exception to browser
- * crash.
- *
- * If you don't require fake timers to work in IE, don't include this file.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-function setTimeout() {}
-function clearTimeout() {}
-function setImmediate() {}
-function clearImmediate() {}
-function setInterval() {}
-function clearInterval() {}
-function Date() {}
-
-// Reassign the original functions. Now their writable attribute
-// should be true. Hackish, I know, but it works.
-setTimeout = sinon.timers.setTimeout;
-clearTimeout = sinon.timers.clearTimeout;
-setImmediate = sinon.timers.setImmediate;
-clearImmediate = sinon.timers.clearImmediate;
-setInterval = sinon.timers.setInterval;
-clearInterval = sinon.timers.clearInterval;
-Date = sinon.timers.Date;
-
-/*global sinon*/
-/**
- * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows
- * them to be overwritten at a later point. If these are not defined like
- * this, overwriting them will result in anything from an exception to browser
- * crash.
- *
- * If you don't require fake XHR to work in IE, don't include this file.
- *
- * @author Christian Johansen (christian@cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-function XMLHttpRequest() {}
-
-// Reassign the original function. Now its writable attribute
-// should be true. Hackish, I know, but it works.
-XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
-/*global sinon*/
-/**
- * Helps IE run the fake XDomainRequest. By defining global functions, IE allows
- * them to be overwritten at a later point. If these are not defined like
- * this, overwriting them will result in anything from an exception to browser
- * crash.
- *
- * If you don't require fake XDR to work in IE, don't include this file.
- */
-function XDomainRequest() {}
-
-// Reassign the original function. Now its writable attribute
-// should be true. Hackish, I know, but it works.
-XDomainRequest = sinon.xdr.XDomainRequest || undefined;
diff --git a/resources/lib/sinonjs/sinon-ie-1.15.4.js b/resources/lib/sinonjs/sinon-ie-1.15.4.js
new file mode 100644 (file)
index 0000000..9eac958
--- /dev/null
@@ -0,0 +1,103 @@
+/**
+ * Sinon.JS 1.15.4, 2015/06/27
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ * 
+ * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright notice,
+ *       this list of conditions and the following disclaimer in the documentation
+ *       and/or other materials provided with the distribution.
+ *     * Neither the name of Christian Johansen nor the names of his contributors
+ *       may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Helps IE run the fake timers. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake timers to work in IE, don't include this file.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+if (typeof window !== "undefined") {
+    function setTimeout() {}
+    function clearTimeout() {}
+    function setImmediate() {}
+    function clearImmediate() {}
+    function setInterval() {}
+    function clearInterval() {}
+    function Date() {}
+
+    // Reassign the original functions. Now their writable attribute
+    // should be true. Hackish, I know, but it works.
+    setTimeout = sinon.timers.setTimeout;
+    clearTimeout = sinon.timers.clearTimeout;
+    setImmediate = sinon.timers.setImmediate;
+    clearImmediate = sinon.timers.clearImmediate;
+    setInterval = sinon.timers.setInterval;
+    clearInterval = sinon.timers.clearInterval;
+    Date = sinon.timers.Date;
+}
+
+/**
+ * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake XHR to work in IE, don't include this file.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+if (typeof window !== "undefined") {
+    function XMLHttpRequest() {}
+
+    // Reassign the original function. Now its writable attribute
+    // should be true. Hackish, I know, but it works.
+    XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined;
+}
+/**
+ * Helps IE run the fake XDomainRequest. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake XDR to work in IE, don't include this file.
+ */
+if (typeof window !== "undefined") {
+    function XDomainRequest() {}
+
+    // Reassign the original function. Now its writable attribute
+    // should be true. Hackish, I know, but it works.
+    XDomainRequest = sinon.xdr.XDomainRequest || undefined;
+}
index 867c25e..1ac34a5 100644 (file)
@@ -112,7 +112,7 @@ function getAccessKeyLabel( element ) {
  */
 function updateTooltipOnElement( element, titleElement ) {
        var array = ( mw.msg( 'word-separator' ) + mw.msg( 'brackets' ) ).split( '$1' ),
-               regexp = new RegExp( $.map( array, $.escapeRE ).join( '.*?' ) + '$' ),
+               regexp = new RegExp( $.map( array, mw.RegExp.escape ).join( '.*?' ) + '$' ),
                oldTitle = titleElement.title,
                rawTitle = oldTitle.replace( regexp, '' ),
                newTitle = rawTitle,
index 1338218..8deb669 100644 (file)
@@ -3,7 +3,7 @@
  * TODO: Add a function for restoring the previous text.
  * TODO: Accept mappings for converting shortcuts like WP: to Wikipedia:.
  */
-( function ( $ ) {
+( function ( $, mw ) {
 
        $.highlightText = {
 
@@ -29,7 +29,7 @@
                                // non latin characters can make regex think a new word has begun: do not use \b
                                // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
                                // look for an occurrence of our pattern and store the starting position
-                               match = node.data.match( new RegExp( '(^|\\s)' + $.escapeRE( pat ), 'i' ) );
+                               match = node.data.match( new RegExp( '(^|\\s)' + mw.RegExp.escape( pat ), 'i' ) );
                                if ( match ) {
                                        pos = match.index + match[1].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
@@ -70,4 +70,4 @@
                } );
        };
 
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
index e6e33ad..5484212 100644 (file)
@@ -1,9 +1,11 @@
 /*
  * JavaScript backwards-compatibility alternatives and other convenience functions
+ *
+ * @deprecated since 1.26 Dated collection of miscellaneous utilities. Methods are
+ *  either trivially inline, obsolete, or have a better place elsewhere.
  */
-( function ( $ ) {
-
-       $.extend( {
+( function ( $, mw ) {
+       $.each( {
                trimLeft: function ( str ) {
                        return str === null ? '' : str.toString().replace( /^\s+/, '' );
                },
@@ -14,9 +16,6 @@
                ucFirst: function ( str ) {
                        return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
                },
-               escapeRE: function ( str ) {
-                       return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
-               },
                isDomElement: function ( el ) {
                        return !!el && !!el.nodeType;
                },
@@ -28,7 +27,7 @@
                                return true;
                        }
                        // the for-loop could potentially contain prototypes
-                       // to avoid that we check it's length first
+                       // to avoid that we check its length first
                        if ( v.length === 0 ) {
                                return true;
                        }
                        }
                        return true;
                }
+       }, function ( key, value ) {
+               mw.log.deprecate( $, key, value );
        } );
 
-}( jQuery ) );
+       mw.log.deprecate( $, 'escapeRE', function ( str ) {
+               return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
+       }, 'Use mediawiki.RegExp instead.' );
+
+} )( jQuery, mediaWiki );
index 94fdca5..c8e3cb3 100644 (file)
@@ -8,7 +8,7 @@
  * http://www.opensource.org/licenses/mit-license.php
  * http://www.gnu.org/licenses/gpl.html
  *
- * Depends on mw.config (wgDigitTransformTable, wgDefaultDateFormat, wgContentLanguage)
+ * Depends on mw.config (wgDigitTransformTable, wgDefaultDateFormat, wgPageContentLanguage)
  * and mw.language.months.
  *
  * Uses 'tableSorterCollation' in mw.config (if available)
                        // Construct regex for number identification
                        for ( i = 0; i < ascii.length; i++ ) {
                                ts.transformTable[localised[i]] = ascii[i];
-                               digits.push( $.escapeRE( localised[i] ) );
+                               digits.push( mw.RegExp.escape( localised[i] ) );
                        }
                }
                digitClass = '[' + digits.join( '', digits ) + ']';
                for ( i = 0; i < 12; i++ ) {
                        name = mw.language.months.names[i].toLowerCase();
                        ts.monthNames[name] = i + 1;
-                       regex.push( $.escapeRE( name ) );
+                       regex.push( mw.RegExp.escape( name ) );
                        name = mw.language.months.genitive[i].toLowerCase();
                        ts.monthNames[name] = i + 1;
-                       regex.push( $.escapeRE( name ) );
+                       regex.push( mw.RegExp.escape( name ) );
                        name = mw.language.months.abbrev[i].toLowerCase().replace( '.', '' );
                        ts.monthNames[name] = i + 1;
-                       regex.push( $.escapeRE( name ) );
+                       regex.push( mw.RegExp.escape( name ) );
                }
 
                // Build piped string
                        s = $.trim( s.toLowerCase() );
 
                        if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) {
-                               if ( mw.config.get( 'wgDefaultDateFormat' ) === 'mdy' || mw.config.get( 'wgContentLanguage' ) === 'en' ) {
+                               if ( mw.config.get( 'wgDefaultDateFormat' ) === 'mdy' || mw.config.get( 'wgPageContentLanguage' ) === 'en' ) {
                                        s = [ match[3], match[1], match[2] ];
                                } else if ( mw.config.get( 'wgDefaultDateFormat' ) === 'dmy' ) {
                                        s = [ match[3], match[2], match[1] ];
index bf1142b..e181472 100644 (file)
@@ -1,4 +1,4 @@
-( function ( mw, $ ) {
+( function ( mw ) {
        var collapsibleLists, handleOne;
 
        // Collapsible lists of categories and templates
@@ -21,7 +21,8 @@
        ];
 
        handleOne = function ( $list, $toggler, cookieName ) {
-               var isCollapsed = $.cookie( cookieName ) !== 'expanded';
+               // Collapsed by default
+               var isCollapsed = mw.cookie.get( cookieName ) !== 'expanded';
 
                // Style the toggler with an arrow icon and add a tabIndex and a role for accessibility
                $toggler.addClass( 'mw-editfooter-toggler' ).prop( 'tabIndex', 0 ).attr( 'role', 'button' );
 
                $list.on( 'beforeExpand.mw-collapsible', function () {
                        $toggler.removeClass( 'mw-icon-arrow-collapsed' ).addClass( 'mw-icon-arrow-expanded' );
-                       $.cookie( cookieName, 'expanded' );
+                       mw.cookie.set( cookieName, 'expanded' );
                } );
 
                $list.on( 'beforeCollapse.mw-collapsible', function () {
                        $toggler.removeClass( 'mw-icon-arrow-expanded' ).addClass( 'mw-icon-arrow-collapsed' );
-                       $.cookie( cookieName, 'collapsed' );
+                       mw.cookie.set( cookieName, 'collapsed' );
                } );
        };
 
@@ -58,4 +59,4 @@
                        );
                }
        } );
-}( mediaWiki, jQuery ) );
+}( mediaWiki ) );
index 45ba543..9b0c430 100644 (file)
@@ -7,9 +7,6 @@
        height: 22px;
        cursor: pointer;
        vertical-align: middle;
-       /* Cross-browser inline-block */
-       /* Firefox 2 */
-       display: -moz-inline-block;
        /* Modern browsers */
        display: inline-block;
        /* IE7 */
index 6026a8c..5f1058f 100644 (file)
                }
                request.done( function ( response ) {
                        var isSubject = ( section === 'new' ),
-                               summaryMsg = isSubject ? 'subject-preview' : 'summary-preview';
-                       if ( response.parse.parsedsummary ) {
-                               $editform.find( '.mw-summary-preview' )
-                                       .empty()
-                                       .append(
-                                               mw.message( summaryMsg ).parse(),
-                                               ' ',
-                                               $( '<span>' ).addClass( 'comment' ).html(
-                                                       // There is no equivalent to rawParams
-                                                       mw.message( 'parentheses' ).escaped()
-                                                               .replace( '$1', response.parse.parsedsummary['*'] )
-                                               )
-                                       );
+                               summaryMsg = isSubject ? 'subject-preview' : 'summary-preview',
+                               $summaryPreview = $editform.find( '.mw-summary-preview' ).empty();
+                       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['*'] )
+                                       )
+                               );
                        }
                        mw.hook( 'wikipage.editform' ).fire( $editform );
                } );
index 9a8d391..e35b1cf 100644 (file)
@@ -123,7 +123,6 @@ pre, .mw-code {
        border: 1px solid #aaaaaa;
        background-color: #f9f9f9;
        padding: 5px;
-       display: -moz-inline-block;
        display: inline-block;
        display: table;
        /* IE7 and earlier */
index c2bd5a7..196ea21 100644 (file)
@@ -168,7 +168,6 @@ img {
        padding: 5px;
        font-size: 95%;
        text-align: center;
-       display: -moz-inline-block;
        display: inline-block;
        display: table;
 
index 3657b12..a0861df 100644 (file)
@@ -566,7 +566,6 @@ table.wikitable > caption {
        border: 1px solid;
        padding: .5em 1em;
        margin-bottom: 1em;
-       display: -moz-inline-block;
        display: inline-block;
        zoom: 1;
        *display: inline;
@@ -952,13 +951,13 @@ ol:lang(fa) li,
 ol:lang(glk) li,
 ol:lang(kk-arab) li,
 ol:lang(lrc) li,
-ol:lang(mzn) li,
-ol:lang(sdh) li {
+ol:lang(mzn) li {
        list-style-type: -moz-persian;
        list-style-type: persian;
 }
 
-ol:lang(ckb) li {
+ol:lang(ckb) li,
+ol:lang(sdh) li {
        list-style-type: -moz-arabic-indic;
        list-style-type: arabic-indic;
 }
index 2d68457..56b6811 100644 (file)
 // Button styling
 // ----------------------------------------------------------------------------
 
-.button-colors(@bgColor) {
+.button-colors(@bgColor, @highlightColor, @activeColor) {
        background: @bgColor;
 
        &: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: mix(#000, @bgColor, 20%);
+               border-bottom-color: @highlightColor;
        }
 
        &:focus {
 
        &:active,
        &.mw-ui-checked {
-               // lessphp doesn't implement shade (https://github.com/leafo/lessphp/issues/528);
-               // it passes it through, then ResourceLoader drops it.
-               // background: shade(@bgColor, 20%);
-               background: mix(#000, @bgColor, 20%);
+               background: @activeColor;
                box-shadow: none;
        }
 }
 
-.button-colors(@bgColor) when (lightness(@bgColor) >= 70%) {
+.button-colors(@bgColor, @highlightColor, @activeColor) when (lightness(@bgColor) >= 70%) {
        color: @colorButtonText;
        border: 1px solid @colorGray12;
 
@@ -86,7 +83,7 @@
        }
 }
 
-.button-colors(@bgColor) when (lightness(@bgColor) < 70%) {
+.button-colors(@bgColor, @highlightColor, @activeColor) when (lightness(@bgColor) < 70%) {
        color: #fff;
        // border of the same color as background so that light background and
        // dark background buttons are the same height and width
        }
 }
 
-.button-colors-quiet(@textColor) {
+.button-colors-quiet(@textColor, @highlightColor, @activeColor) {
        // Quiet buttons all start gray, and reveal
        // constructive/progressive/destructive color on hover and active.
        color: @colorButtonText;
 
        &:active,
        &.mw-ui-checked {
-               // lessphp doesn't implement shade, see above
-               // color: shade(@textColor, 20%);
-               color: mix(#000, @textColor, 20%);
+               color: @activeColor;
        }
 
        &:disabled {
index f6bf382..4b6bb48 100644 (file)
 // Semantic background colors
 // Blue; for contextual use of a continuing action
 @colorProgressive: #347bff;
+@colorProgressiveHighlight: #2962CC;
+@colorProgressiveActive: #2962CC;
 // Green; for contextual use of a positive finalizing action
 @colorConstructive: #00af89;
+@colorConstructiveHighlight: #008C6D;
+@colorConstructiveActive: #008C6D;
 // Orange; for contextual use of returning to a past action
 @colorRegressive: #FF5D00;
 // Red; for contextual use of a negative action of high severity
 @colorDestructive: #d11d13;
+@colorDestructiveHighlight: #A7170F;
+@colorDestructiveActive: #A7170F;
 // Orange; for contextual use of a potentially negative action of medium severity
 @colorMediumSevere: #FF5D00;
 // Yellow; for contextual use of a potentially negative action of low severity
@@ -41,6 +47,8 @@
 @colorText: @colorGray2;
 @colorTextLight: @colorGray6;
 @colorButtonText: @colorGray5;
+@colorButtonTextHighlight: @colorGray7;
+@colorButtonTextActive: @colorGray7;
 @colorDisabledText: @colorGray12;
 @colorErrorText: #CC0000;
 
@@ -63,5 +71,5 @@
 
 
 // Icon related variables
-@iconSize: 1.4em;
+@iconSize: 1.5em;
 @iconGutterWidth: 1em;
index 36eb9d4..8ec4cf0 100644 (file)
                }
                $nodes.updateTooltipAccessKeys();
 
+               // Infuse OOUI widgets, if any are present
+               $nodes = $( '[data-ooui]' );
+               if ( $nodes.length ) {
+                       mw.loader.using( 'mediawiki.widgets' ).done( function () {
+                               $nodes.each( function () {
+                                       OO.ui.infuse( this );
+                               } );
+                       } );
+               }
+
        } );
 
 }( mediaWiki, jQuery ) );
index d252f0e..50f280a 100644 (file)
@@ -86,7 +86,7 @@
                        if ( actionPaths.hasOwnProperty( key ) ) {
                                parts = actionPaths[key].split( '$1' );
                                for ( i = 0; i < parts.length; i++ ) {
-                                       parts[i] = $.escapeRE( parts[i] );
+                                       parts[i] = mw.RegExp.escape( parts[i] );
                                }
                                m = new RegExp( parts.join( '(.+)' ) ).exec( url );
                                if ( m && m[1] ) {
index 7dd5ee7..454fe58 100644 (file)
  * We use display:table. Even though it should only contain other table-* display
  * elements, there are no known problems with using this.
  *
- * Because IE < 8, FF 2 and other older browsers don't support display:table, we fallback to
+ * Because IE < 8 and other older browsers don't support display:table, we fallback to
  * using inline-block mode, which features at least intrinsic width, but won't clear preceding
  * inline elements. In practice inline elements surrounding the TOC are uncommon enough that
  * this is an acceptable sacrifice.
  */
 #toc,
 .toc {
-       display: -moz-inline-block;
        display: inline-block;
        display: table;
 
index 9c59fc1..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;
@@ -194,11 +198,14 @@ code {
        padding: 1px 4px;
 }
 
-pre, .mw-code {
+pre,
+.mw-code {
        color: black;
        background-color: #f9f9f9;
        border: 1px solid #ddd;
        padding: 1em;
+       /* Wrap lines in overflow. T2260, T103780 */
+       white-space: pre-wrap;
 }
 
 /* Tables */
index c9e5511..f217bf5 100644 (file)
@@ -3,23 +3,22 @@
  */
 
 /* Remember the collapse state of the legend on recent changes and watchlist pages. */
-jQuery( document ).ready( function ( $ ) {
+( function ( mw, $ ) {
        var
                cookieName = 'changeslist-state',
-               cookieOptions = {
-                       expires: 30,
-                       path: '/'
-               },
-               isCollapsed = $.cookie( cookieName ) === 'collapsed';
+               // Expanded by default
+               isCollapsed = mw.cookie.get( cookieName ) === 'collapsed';
 
-       $( '.mw-changeslist-legend' )
-               .makeCollapsible( {
-                       collapsed: isCollapsed
-               } )
-               .on( 'beforeExpand.mw-collapsible', function () {
-                       $.cookie( cookieName, 'expanded', cookieOptions );
-               } )
-               .on( 'beforeCollapse.mw-collapsible', function () {
-                       $.cookie( cookieName, 'collapsed', cookieOptions );
-               } );
-} );
+       $( function () {
+               $( '.mw-changeslist-legend' )
+                       .makeCollapsible( {
+                               collapsed: isCollapsed
+                       } )
+                       .on( 'beforeExpand.mw-collapsible', function () {
+                               mw.cookie.set( cookieName, 'expanded' );
+                       } )
+                       .on( 'beforeCollapse.mw-collapsible', function () {
+                               mw.cookie.set( cookieName, 'collapsed' );
+                       } );
+       } );
+}( mediaWiki, jQuery ) );
index fa9e452..a385ad3 100644 (file)
@@ -110,6 +110,12 @@ jQuery( function ( $ ) {
                $preftoc.append( $li );
        } );
 
+       // Disable the button to save preferences unless preferences have changed
+       $( '#prefcontrol' ).prop( 'disabled', true );
+       $( '.prefsection' ).one( 'change keydown mousedown', function () {
+               $( '#prefcontrol' ).prop( 'disabled', false);
+       } );
+
        // Enable keyboard users to use left and right keys to switch tabs
        $preftoc.on( 'keydown', function ( event ) {
                var keyLeft = 37,
index d0dfb28..ea1eb99 100644 (file)
                                fname = fname.replace( / /g, '_' );
                                // Capitalise first letter if needed
                                if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
-                                       fname = fname.charAt( 0 ).toUpperCase().concat( fname.slice( 1 ) );
+                                       fname = fname[0].toUpperCase() + fname.slice( 1 );
                                }
 
                                // Output result
index b4efa9a..5b259e7 100644 (file)
@@ -1,7 +1,8 @@
 /*!
  * Styling for Special:Version
  */
-.mw-version-ext-name {
+.mw-version-ext-name,
+.mw-version-library-name {
        font-weight: bold;
 }
 
index f88f3ee..77b3f9d 100644 (file)
@@ -47,7 +47,7 @@
        zoom: 1;
 
        // Container styling
-       .button-colors(#FFF);
+       .button-colors(#FFF, #CCC, #777);
        border-radius: @borderRadius;
        min-width: 4em;
 
        // Styleguide 2.1.1.
        &.mw-ui-progressive,
        &.mw-ui-primary {
-               .button-colors(@colorProgressive);
+               .button-colors(@colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive);
 
                &.mw-ui-quiet {
-                       .button-colors-quiet(@colorProgressive);
+                       .button-colors-quiet(@colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive);
                }
        }
 
        //
        // Styleguide 2.1.2.
        &.mw-ui-constructive {
-               .button-colors(@colorConstructive);
+               .button-colors(@colorConstructive, @colorConstructiveHighlight, @colorConstructiveActive);
 
                &.mw-ui-quiet {
-                       .button-colors-quiet(@colorConstructive);
+                       .button-colors-quiet(@colorConstructive, @colorConstructiveHighlight, @colorConstructiveActive);
                }
        }
 
        //
        // Styleguide 2.1.3.
        &.mw-ui-destructive {
-               .button-colors(@colorDestructive);
+               .button-colors(@colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive);
 
                &.mw-ui-quiet {
-                       .button-colors-quiet(@colorDestructive);
+                       .button-colors-quiet(@colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive);
                }
        }
 
                background: transparent;
                border: none;
                text-shadow: none;
-               .button-colors-quiet(@colorButtonText);
+               .button-colors-quiet(@colorButtonText, @colorButtonTextHighlight, @colorButtonTextActive);
 
                &:hover,
                &:focus {
index 0065f70..2c24b2b 100644 (file)
@@ -1,10 +1,57 @@
 /*!
- * MediaWiki Widgets  TitleInputWidget styles.
+ * MediaWiki Widgets - TitleInputWidget styles.
  *
  * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
  * @license The MIT License (MIT); see LICENSE.txt
  */
 
-.mw-widget-TitleInputWidget {
-       width: 30em;
+.mw-widget-titleInputWidget-menu-withImages .mw-widget-titleOptionWidget {
+       -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+       box-sizing: border-box;
+       min-height: 3.75em;
+       margin-left: 3.75em;
+}
+
+.mw-widget-titleInputWidget-menu-withImages .mw-widget-titleOptionWidget:not(:last-child) {
+       margin-bottom: 1px;
+}
+
+.mw-widget-titleInputWidget-menu-withImages .oo-ui-iconElement .oo-ui-iconElement-icon {
+       display: block;
+       width: 3.75em;
+       height: 3.75em;
+       left: -3.75em;
+       background-color: #ccc;
+       opacity: 0.4;
+}
+
+.mw-widget-titleInputWidget-menu-withImages .oo-ui-iconElement .mw-widget-titleOptionWidget-hasImage {
+       border: 0;
+       background-size: cover;
+       opacity: 1;
+}
+
+.mw-widget-titleInputWidget-menu-withImages .mw-widget-titleOptionWidget .oo-ui-labelElement-label {
+       line-height: 2.8em;
+}
+
+.mw-widget-titleOptionWidget-description {
+       display: none;
+}
+
+.mw-widget-titleInputWidget-menu-withDescriptions .mw-widget-titleOptionWidget .oo-ui-labelElement-label {
+       line-height: 1.5em;
+}
+
+.mw-widget-titleInputWidget-menu-withDescriptions .mw-widget-titleOptionWidget-description {
+       display: block;
+       white-space: nowrap;
+       text-overflow: ellipsis;
+       overflow: hidden;
+}
+
+.oo-ui-menuOptionWidget:not(.oo-ui-optionWidget-selected) .mw-widget-titleOptionWidget-description,
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted .mw-widget-titleOptionWidget-description {
+       color: #888;
 }
index bfedb6b..df2f1a7 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * MediaWiki Widgets  TitleInputWidget class.
+ * MediaWiki Widgets - TitleInputWidget class.
  *
  * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
  * @license The MIT License (MIT); see LICENSE.txt
         *
         * @class
         * @extends OO.ui.TextInputWidget
-        * @mixins OO.ui.LookupElement
+        * @mixins OO.ui.mixin.LookupElement
         *
         * @constructor
         * @param {Object} [config] Configuration options
+        * @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} [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
+        * @cfg {boolean} [showDescriptions] Show page descriptions
+        * @cfg {Object} [cache] Result cache which implements a 'set' method, taking keyed values as an argument
         */
-       mw.widgets.TitleInputWidget = function MWWTitleInputWidget( config ) {
+       mw.widgets.TitleInputWidget = function MwWidgetsTitleInputWidget( config ) {
+               var widget = this;
+
                // Config initialization
                config = config || {};
 
                OO.ui.TextInputWidget.call( this, config );
 
                // Mixin constructors
-               OO.ui.LookupElement.call( this, config );
+               OO.ui.mixin.LookupElement.call( this, config );
 
                // Properties
+               this.limit = config.limit || 10;
                this.namespace = config.namespace || null;
+               this.relative = config.relative !== undefined ? config.relative : true;
+               this.showRedirectTargets = config.showRedirectTargets !== false;
+               this.showRedlink = !!config.showRedlink;
+               this.showImages = !!config.showImages;
+               this.showDescriptions = !!config.showDescriptions;
+               this.cache = config.cache;
 
                // Initialization
-               this.$element.addClass( 'mw-widget-TitleInputWidget' );
-               this.lookupMenu.$element.addClass( 'mw-widget-TitleInputWidget-menu' );
+               this.$element.addClass( 'mw-widget-titleInputWidget' );
+               this.lookupMenu.$element.addClass( 'mw-widget-titleInputWidget-menu' );
+               if ( this.showImages ) {
+                       this.lookupMenu.$element.addClass( 'mw-widget-titleInputWidget-menu-withImages' );
+               }
+               if ( this.showDescriptions ) {
+                       this.lookupMenu.$element.addClass( 'mw-widget-titleInputWidget-menu-withDescriptions' );
+               }
+
+               this.interwikiPrefixes = [];
+               this.interwikiPrefixesPromise = new mw.Api().get( {
+                       action: 'query',
+                       meta: 'siteinfo',
+                       siprop: 'interwikimap'
+               } ).done( function ( data ) {
+                       $.each( data.query.interwikimap, function ( index, interwiki ) {
+                               widget.interwikiPrefixes.push( interwiki.prefix );
+                       } );
+               } );
        };
 
        /* Inheritance */
 
        OO.inheritClass( mw.widgets.TitleInputWidget, OO.ui.TextInputWidget );
 
-       OO.mixinClass( mw.widgets.TitleInputWidget, OO.ui.LookupElement );
+       OO.mixinClass( mw.widgets.TitleInputWidget, OO.ui.mixin.LookupElement );
 
        /* Methods */
 
        /**
         * @inheritdoc
         */
-       mw.widgets.TitleInputWidget.prototype.getLookupRequest = function () {
-               var value = this.value;
+       mw.widgets.TitleInputWidget.prototype.focus = function () {
+               var retval;
 
-               // Prefix with default namespace name
-               if ( this.namespace !== null && mw.Title.newFromText( value, this.namespace ) ) {
-                       value = mw.Title.newFromText( value, this.namespace ).getPrefixedText();
-               }
+               // Prevent programmatic focus from opening the menu
+               this.setLookupsDisabled( true );
 
-               // Dont send leading ':' to open search
-               if ( value.charAt( 0 ) === ':' ) {
-                       value = value.slice( 1 );
-               }
+               // Parent method
+               retval = OO.ui.TextInputWidget.prototype.focus.apply( this, arguments );
 
-               return new mw.Api().get( {
-                       action: 'opensearch',
-                       search: value,
-                       suggest: ''
-               } );
+               this.setLookupsDisabled( false );
+
+               return retval;
        };
 
        /**
         * @inheritdoc
         */
+       mw.widgets.TitleInputWidget.prototype.getLookupRequest = function () {
+               var req,
+                       widget = this,
+                       promiseAbortObject = { abort: function () {
+                               // Do nothing. This is just so OOUI doesn't break due to abort being undefined.
+                       } };
+
+               if ( mw.Title.newFromText( this.value ) ) {
+                       return this.interwikiPrefixesPromise.then( function () {
+                               var params, props,
+                                       interwiki = widget.value.substring( 0, widget.value.indexOf( ':' ) );
+                               if (
+                                       interwiki && interwiki !== '' &&
+                                       widget.interwikiPrefixes.indexOf( interwiki ) !== -1
+                               ) {
+                                       return $.Deferred().resolve( { query: {
+                                               pages: [{
+                                                       title: widget.value
+                                               }]
+                                       } } ).promise( promiseAbortObject );
+                               } else {
+                                       params = {
+                                               action: 'query',
+                                               generator: 'prefixsearch',
+                                               gpssearch: widget.value,
+                                               gpsnamespace: widget.namespace !== null ? widget.namespace : undefined,
+                                               gpslimit: widget.limit,
+                                               ppprop: 'disambiguation'
+                                       };
+                                       props = [ 'info', 'pageprops' ];
+                                       if ( widget.showRedirectTargets ) {
+                                               params.redirects = '1';
+                                       }
+                                       if ( widget.showImages ) {
+                                               props.push( 'pageimages' );
+                                               params.pithumbsize = 80;
+                                               params.pilimit = widget.limit;
+                                       }
+                                       if ( widget.showDescriptions ) {
+                                               props.push( 'pageterms' );
+                                               params.wbptterms = 'description';
+                                       }
+                                       params.prop = props.join( '|' );
+                                       req = new mw.Api().get( params );
+                                       promiseAbortObject.abort = req.abort.bind( req ); // todo: ew
+                                       return req;
+                               }
+                       } ).promise( promiseAbortObject );
+               } else {
+                       // Don't send invalid titles to the API.
+                       // Just pretend it returned nothing so we can show the 'invalid title' section
+                       return $.Deferred().resolve( {} ).promise( promiseAbortObject );
+               }
+       };
+
+       /**
+        * Get lookup cache item from server response data.
+        *
+        * @method
+        * @param {Mixed} data Response from server
+        */
        mw.widgets.TitleInputWidget.prototype.getLookupCacheDataFromResponse = function ( data ) {
-               return data[1] || [];
+               return data.query || {};
        };
 
        /**
-        * @inheritdoc
+        * Get list of menu items from a server response.
+        *
+        * @param {Object} data Query result
+        * @returns {OO.ui.MenuOptionWidget[]} Menu items
         */
        mw.widgets.TitleInputWidget.prototype.getLookupMenuOptionsFromData = function ( data ) {
-               var i, len, title, value,
+               var i, len, index, pageExists, pageExistsExact, suggestionPage, page, redirect, redirects,
                        items = [],
-                       matchingPages = data;
-
-               // Matching pages
-               if ( matchingPages && matchingPages.length ) {
-                       for ( i = 0, len = matchingPages.length; i < len; i++ ) {
-                               title = new mw.Title( matchingPages[i] );
-                               if ( this.namespace !== null ) {
-                                       value = title.getRelativeText( this.namespace );
-                               } else {
-                                       value = title.getPrefixedText();
-                               }
-                               items.push( new OO.ui.MenuOptionWidget( {
-                                       data: value,
-                                       label: value
-                               } ) );
+                       titles = [],
+                       titleObj = mw.Title.newFromText( this.value ),
+                       redirectsTo = {},
+                       pageData = {};
+
+               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 );
+                       }
+               }
+
+               for ( index in data.pages ) {
+                       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] || [];
+                       for ( i = 0, len = redirects.length; i < len; i++ ) {
+                               pageData[redirects[i]] = {
+                                       missing: false,
+                                       redirect: true,
+                                       disambiguation: false,
+                                       description: mw.msg( 'mw-widgets-titleinput-description-redirect', suggestionPage.title )
+                               };
+                               titles.push( redirects[i] );
                        }
                }
 
+               // If not found, run value through mw.Title to avoid treating a match as a
+               // mismatch where normalisation would make them matching (bug 48476)
+
+               pageExistsExact = titles.indexOf( this.value ) !== -1;
+               pageExists = pageExistsExact || (
+                       titleObj && titles.indexOf( titleObj.getPrefixedText() ) !== -1
+               );
+
+               if ( !pageExists ) {
+                       pageData[this.value] = {
+                               missing: true, redirect: false, disambiguation: false,
+                               description: mw.msg( 'mw-widgets-titleinput-description-new-page' )
+                       };
+               }
+
+               if ( this.cache ) {
+                       this.cache.set( pageData );
+               }
+
+               // Offer the exact text as a suggestion if the page exists
+               if ( pageExists && !pageExistsExact ) {
+                       titles.unshift( this.value );
+               }
+               // Offer the exact text as a new page if the title is valid
+               if ( this.showRedlink && !pageExists && titleObj ) {
+                       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 ) ) );
+               }
+
                return items;
        };
 
+       /**
+        * Get menu option widget data from the title and page data
+        *
+        * @param {mw.Title} title Title object
+        * @param {Object} data Page data
+        * @return {Object} Data for option widget
+        */
+       mw.widgets.TitleInputWidget.prototype.getOptionWidgetData = function ( title, data ) {
+               var mwTitle = new mw.Title( title );
+               return {
+                       data: this.namespace !== null && this.relative
+                               ? mwTitle.getRelativeText( this.namespace )
+                               : title,
+                       imageUrl: this.showImages ? data.imageUrl : null,
+                       description: this.showDescriptions ? data.description : null,
+                       missing: data.missing,
+                       redirect: data.redirect,
+                       disambiguation: data.disambiguation,
+                       query: this.value
+               };
+       };
+
        /**
         * Get title object corresponding to #getValue
         *
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js b/resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
new file mode 100644 (file)
index 0000000..07b81e4
--- /dev/null
@@ -0,0 +1,81 @@
+/*!
+ * MediaWiki Widgets - TitleOptionWidget 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.TitleOptionWidget object.
+        *
+        * @class
+        * @extends OO.ui.MenuOptionWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {string} [data] Page title
+        * @cfg {string} [imageUrl] Thumbnail image URL with URL encoding
+        * @cfg {string} [description] Page description
+        * @cfg {boolean} [missing] Page doesn't exist
+        * @cfg {boolean} [redirect] Page is a redirect
+        * @cfg {boolean} [disambiguation] Page is a disambiguation page
+        * @cfg {string} [query] Matching query string
+        */
+       mw.widgets.TitleOptionWidget = function MwWidgetsTitleOptionWidget( config ) {
+               var icon, title = config.data;
+
+               if ( config.missing ) {
+                       icon = 'page-not-found';
+               } else if ( config.redirect ) {
+                       icon = 'page-redirect';
+               } else if ( config.disambiguation ) {
+                       icon = 'page-disambiguation';
+               } else {
+                       icon = 'page-existing';
+               }
+
+               // Config initialization
+               config = $.extend( {
+                       icon: icon,
+                       label: title,
+                       href: mw.util.getUrl( title ),
+                       autoFitLabel: false
+               }, config );
+
+               // Parent constructor
+               OO.ui.MenuOptionWidget.call( this, config );
+
+               // Intialization
+               this.$label.wrap( '<a>' );
+               this.$link = this.$label.parent();
+               this.$link.attr( 'href', config.href );
+               this.$element.addClass( 'mw-widget-titleOptionWidget' );
+
+               // Highlight matching parts of link suggestion
+               this.$label.autoEllipsis( { hasSpan: false, tooltip: true, matchText: config.query } );
+
+               if ( config.missing ) {
+                       this.$link.addClass( 'new' );
+               }
+
+               if ( config.imageUrl ) {
+                       this.$icon
+                               .addClass( 'mw-widget-titleOptionWidget-hasImage' )
+                               .css( 'background-image', 'url(' + config.imageUrl + ')' );
+               }
+
+               if ( config.description ) {
+                       this.$element.append(
+                               $( '<span>' )
+                                       .addClass( 'mw-widget-titleOptionWidget-description' )
+                                       .text( config.description )
+                       );
+               }
+       };
+
+       /* Inheritance */
+
+       OO.inheritClass( mw.widgets.TitleOptionWidget, OO.ui.MenuOptionWidget );
+
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.infuse.js b/resources/src/mediawiki.widgets/mw.widgets.infuse.js
new file mode 100644 (file)
index 0000000..98480bb
--- /dev/null
@@ -0,0 +1,3 @@
+// 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/mediawiki.RegExp.js b/resources/src/mediawiki/mediawiki.RegExp.js
new file mode 100644 (file)
index 0000000..1da4ab4
--- /dev/null
@@ -0,0 +1,22 @@
+( function ( mw ) {
+       /**
+        * @class mw.RegExp
+        */
+       mw.RegExp = {
+               /**
+                * Escape string for safe inclusion in regular expression
+                *
+                * The following characters are escaped:
+                *
+                *     \ { } ( ) | . ? * + - ^ $ [ ]
+                *
+                * @since 1.26
+                * @static
+                * @param {string} str String to escape
+                * @return {string} Escaped string
+                */
+               escape: function ( str ) {
+                       return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
+               }
+       };
+}( mediaWiki ) );
index 8785b0b..661ab74 100644 (file)
         * @param {string} title Title of the page. If no second argument given,
         *  this will be searched for a namespace
         * @param {number} [namespace=NS_MAIN] If given, will used as default namespace for the given title
-        * @throws {mw.MalformedTitleException} Throws when the title is invalid with details on why the title is invalid
+        * @throws {Error} When the title is invalid
         */
        function Title( title, namespace ) {
                var parsed = parse( title, namespace );
+               if ( !parsed ) {
+                       throw new Error( 'Unable to parse title' );
+               }
 
                this.namespace = parsed.namespace;
                this.title = parsed.title;
         * @method parse
         * @param {string} title
         * @param {number} [defaultNamespace=NS_MAIN]
-        * @return {Object}
-        * @throws {mw.MalformedTitleException} When the title is invalid
+        * @return {Object|boolean}
         */
        parse = function ( title, defaultNamespace ) {
                var namespace, m, id, i, fragment, ext;
                        .replace( rUnderscoreTrim, '' );
 
                // Process initial colon
-               if ( title !== '' && title.charAt( 0 ) === ':' ) {
+               if ( title !== '' && title[0] === ':' ) {
                        // Initial colon means main namespace instead of specified default
                        namespace = NS_MAIN;
                        title = title
                }
 
                if ( title === '' ) {
-                       throw new MalformedTitleException( 'title-invalid-empty', title );
+                       return false;
                }
 
                // Process namespace prefix (if any)
                                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 ) {
-                                               throw new MalformedTitleException( 'title-invalid-talk-namespace', title );
+                                               return false;
                                        }
                                }
                        }
 
                // Reject illegal characters
                if ( title.match( rInvalid ) ) {
-                       throw new MalformedTitleException( 'title-invalid-characters', title, [ title.match( rInvalid )[0] ] );
+                       return false;
                }
 
                // Disallow titles that browsers or servers might resolve as directory navigation
                                title.slice( -3 ) === '/..'
                        )
                ) {
-                       throw new MalformedTitleException( 'title-invalid-relative', title );
+                       return false;
                }
 
                // Disallow magic tilde sequence
                if ( title.indexOf( '~~~' ) !== -1 ) {
-                       throw new MalformedTitleException( 'title-invalid-magic-tilde', title );
+                       return false;
                }
 
                // Disallow titles exceeding the TITLE_MAX_BYTES byte size limit (size of underlying database field)
                // Note: The PHP implementation also asserts that even in NS_SPECIAL, the title should
                // be less than 512 bytes.
                if ( namespace !== NS_SPECIAL && $.byteLength( title ) > TITLE_MAX_BYTES ) {
-                       throw new MalformedTitleException( 'title-invalid-too-long', title, [ TITLE_MAX_BYTES ] );
+                       return false;
                }
 
                // Can't make a link to a namespace alone.
                if ( title === '' && namespace !== NS_MAIN ) {
-                       throw new MalformedTitleException( 'title-invalid-empty', title );
+                       return false;
                }
 
                // Any remaining initial :s are illegal.
-               if ( title.charAt( 0 ) === ':' ) {
-                       throw new MalformedTitleException( 'title-invalid-leading-colon', title );
+               if ( title[0] === ':' ) {
+                       return false;
                }
 
                // For backwards-compatibility with old mw.Title, we separate the extension from the
         * @return {mw.Title|null} A valid Title object or null if the title is invalid
         */
        Title.newFromText = function ( title, namespace ) {
-               var t, parsed;
-               try {
-                       parsed = parse( title, namespace );
-               } catch ( e ) {
+               var t, parsed = parse( title, namespace );
+               if ( !parsed ) {
                        return null;
                }
 
                title = $.trim( title.replace( rWhitespace, ' ' ) );
 
                // Process initial colon
-               if ( title !== '' && title.charAt( 0 ) === ':' ) {
+               if ( title !== '' && title[0] === ':' ) {
                        // Initial colon means main namespace instead of specified default
                        namespace = NS_MAIN;
                        title = title
                 * @return {string}
                 */
                getName: function () {
-                       if ( $.inArray( this.namespace, mw.config.get( 'wgCaseSensitiveNamespaces' ) ) !== -1 ) {
+                       if (
+                               $.inArray( this.namespace, mw.config.get( 'wgCaseSensitiveNamespaces' ) ) !== -1 ||
+                               !this.title.length
+                       ) {
                                return this.title;
-                       } else {
-                               return $.ucFirst( this.title );
                        }
+                       return this.title[0].toUpperCase() + this.title.slice( 1 );
                },
 
                /**
        // Expose
        mw.Title = Title;
 
-       /**
-        * @class mw.MalformedTitleException
-        *
-        * Custom exception class that provides parameters for additional error
-        * information regarding the reason behind the invalidity of the requested
-        * title.  The information can be used in i18n messages that can be displayed
-        * to the user.
-        *
-        * Based on MalformedTitleException.php#__construct
-        *
-        * @constructor
-        * @param {string} message Reason e.g. invalid-title-too-long for a long title
-        * @param {string} titleText The invalid title text involved
-        * @param {Array} errorMessageParameters Additional error information
-        */
-       function MalformedTitleException( message, titleText, errorMessageParameters ) {
-               this.message = message;
-               this.titleText = titleText;
-               if ( errorMessageParameters ) {
-                       this.errorMessageParameters = errorMessageParameters;
-               } else {
-                       this.errorMessageParameters = [ ];
-               }
-
-               if ( titleText ) {
-                       this.errorMessageParameters.push( titleText );
-               }
-       }
-
-       MalformedTitleException.prototype = createObject(Error.prototype);
-       MalformedTitleException.prototype.name = 'MalformedTitleException';
-       MalformedTitleException.prototype.constructor = MalformedTitleException;
-       mw.MalformedTitleException = MalformedTitleException;
-
 }( mediaWiki, jQuery ) );
index abfb279..07d8900 100644 (file)
                                        this.port = defaultUri.port;
                                }
                        }
-                       if ( this.path && this.path.charAt( 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' );
index 8f091e4..d260fca 100644 (file)
@@ -16,7 +16,7 @@
        mw.cookie = {
 
                /**
-                * Sets or deletes a cookie.
+                * Set or delete a cookie.
                 *
                 * While this is natural in JavaScript, contrary to `WebResponse#setcookie` in PHP, the
                 * default values for the `options` properties only apply if that property isn't set
                },
 
                /**
-                * Gets the value of a cookie.
+                * Get the value of a cookie.
                 *
                 * @param {string} key
                 * @param {string} [prefix=wgCookiePrefix] The prefix of the key. If `prefix` is
                 *   `undefined` or `null`, then `wgCookiePrefix` is used
                 * @param {Mixed} [defaultValue=null]
-                * @return {string} If the cookie exists, then the value of the
+                * @return {string|null|Mixed} If the cookie exists, then the value of the
                 *   cookie, otherwise `defaultValue`
                 */
                get: function ( key, prefix, defaultValue ) {
index 4a4a97e..7fdaa6e 100644 (file)
                        $ul = $( this ).prev( 'ul.mw-htmlform-cloner-ul' );
 
                        html = $ul.data( 'template' ).replace(
-                               new RegExp( $.escapeRE( $ul.data( 'uniqueId' ) ), 'g' ),
+                               new RegExp( mw.RegExp.escape( $ul.data( 'uniqueId' ) ), 'g' ),
                                'clone' + ( ++cloneCounter )
                        );
 
diff --git a/resources/src/mediawiki/mediawiki.htmlform.ooui.js b/resources/src/mediawiki/mediawiki.htmlform.ooui.js
deleted file mode 100644 (file)
index 48b8a87..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/*global OO */
-jQuery( function ( $ ) {
-
-       // Infuse everything with JavaScript widgets
-       $( '.mw-htmlform-ooui [data-ooui]' ).each( function () {
-               OO.ui.infuse( this.id );
-       } );
-
-} );
index 22d3cbb..31cd6c4 100644 (file)
                 */
                grep: function ( pattern ) {
                        if ( typeof pattern.test !== 'function' ) {
-                               // Based on Y.Escape.regex from YUI v3.15.0
-                               pattern = new RegExp( pattern.replace( /[\-$\^*()+\[\]{}|\\,.?\s]/g, '\\$&' ), 'g' );
+                               pattern = new RegExp( mw.RegExp.escape( pattern ), 'g' );
                        }
 
                        return $.grep( inspect.getLoadedModules(), function ( moduleName ) {
index 98148d5..66d560e 100644 (file)
                        magic: {
                                'SITENAME': mw.config.get( 'wgSiteName' )
                        },
-                       // This is a whitelist like Sanitizer.php.
+                       // Whitelist for allowed HTML elements in wikitext.
                        // Self-closing tags are not currently supported.
-                       // The simplified default here is overridden below by data supplied
-                       // by the mediawiki.jqueryMsg.data module.
-                       allowedHtmlElements: [
-                               'b',
-                               'i'
-                       ],
+                       // Can be populated via setPrivateData().
+                       allowedHtmlElements: [],
                        // Key tag name, value allowed attributes for that tag.
                        // See Sanitizer::setupAttributeWhitelist
                        allowedHtmlCommonAttributes: [
                };
        }
 
-       // Use data from mediawiki.jqueryMsg.data to override defaults, if
-       // available
-       if ( mw.jqueryMsg && mw.jqueryMsg.data ) {
-               if ( mw.jqueryMsg.data.allowedHtmlElements ) {
-                       parserDefaults.allowedHtmlElements = mw.jqueryMsg.data.allowedHtmlElements;
-               }
-       }
-
        mw.jqueryMsg = {};
 
+       /**
+        * Initialize parser defaults.
+        *
+        * ResourceLoaderJqueryMsgModule calls this to provide default values from
+        * Sanitizer.php for allowed HTML elements. To override this data for individual
+        * parsers, pass the relevant options to mw.jqueryMsg.parser.
+        *
+        * @private
+        * @param {Object} data
+        */
+       mw.jqueryMsg.setParserDefaults = function ( data ) {
+               if ( data.allowedHtmlElements ) {
+                       parserDefaults.allowedHtmlElements = data.allowedHtmlElements;
+               }
+       };
+
        /**
         * Returns a function suitable for use as a global, to construct strings from the message key (and optional replacements).
         * e.g.
index 0c24720..2c88e93 100644 (file)
 
                        /**
                         * Write a message the console's warning channel.
-                        * Also logs a stacktrace for easier debugging.
                         * Actions not supported by the browser console are silently ignored.
                         *
                         * @param {string...} msg Messages to output to console
                                var console = window.console;
                                if ( console && console.warn && console.warn.apply ) {
                                        console.warn.apply( console, arguments );
-                                       if ( console.trace ) {
-                                               console.trace();
-                                       }
                                }
                        };
 
 
                                $.each( dependencies, function ( idx, module ) {
                                        var state = mw.loader.getState( module );
+                                       // Only queue modules that are still in the initial 'registered' state
+                                       // (not ones already loading, ready or error).
                                        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';
+                                                       handlePending( module );
+                                                       return;
+                                               }
                                                queue.push( module );
                                                if ( async ) {
                                                        registry[module].async = true;
                                        // Whether the store is in use on this page.
                                        enabled: null,
 
+                                       // Modules whose string representation exceeds 100 kB are ineligible
+                                       // for storage due to bug T66721.
+                                       MODULE_SIZE_MAX: 100000,
+
                                        // The contents of the store, mapping '[module name]@[version]' keys
                                        // to module implementations.
                                        items: {},
                                         * @param {Object} descriptor The module's descriptor as set in the registry
                                         */
                                        set: function ( module, descriptor ) {
-                                               var args, key;
+                                               var args, key, src;
 
                                                if ( !mw.loader.store.enabled ) {
                                                        return false;
                                                        return;
                                                }
 
-                                               mw.loader.store.items[key] = 'mw.loader.implement(' + args.join( ',' ) + ');';
+                                               src = 'mw.loader.implement(' + args.join( ',' ) + ');';
+                                               if ( src.length > mw.loader.store.MODULE_SIZE_MAX ) {
+                                                       return false;
+                                               }
+                                               mw.loader.store.items[key] = src;
                                                mw.loader.store.update();
                                        },
 
                                                        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 ) {
+                                                               // This value predates the enforcement of a size limit on cached modules.
+                                                               delete mw.loader.store.items[key];
                                                        }
                                                }
                                        },
index 1f3b123..5292e80 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var api, map, resultRenderCache, searchboxesSelectors,
+               var api, map, searchboxesSelectors,
                        // Region where the suggestions box will appear directly below
                        // (using the same width). Can be a container element or the input
                        // itself, depending on what suits best in the environment.
                }
 
                // Compute form data for search suggestions functionality.
-               function computeResultRenderCache( context ) {
+               function getFormData( context ) {
                        var $form, baseHref, linkParams;
 
-                       // Compute common parameters for links' hrefs
-                       $form = context.config.$region.closest( 'form' );
+                       if ( !context.formData ) {
+                               // Compute common parameters for links' hrefs
+                               $form = context.config.$region.closest( 'form' );
 
-                       baseHref = $form.attr( 'action' );
-                       baseHref += baseHref.indexOf( '?' ) > -1 ? '&' : '?';
+                               baseHref = $form.attr( 'action' );
+                               baseHref += baseHref.indexOf( '?' ) > -1 ? '&' : '?';
 
-                       linkParams = $form.serializeObject();
+                               linkParams = $form.serializeObject();
 
-                       return {
-                               textParam: context.data.$textbox.attr( 'name' ),
-                               linkParams: linkParams,
-                               baseHref: baseHref
-                       };
+                               context.formData = {
+                                       textParam: context.data.$textbox.attr( 'name' ),
+                                       linkParams: linkParams,
+                                       baseHref: baseHref
+                               };
+                       }
+
+                       return context.formData;
                }
 
                /**
 
                // The function used to render the suggestions.
                function renderFunction( text, context ) {
-                       if ( !resultRenderCache ) {
-                               resultRenderCache = computeResultRenderCache( context );
-                       }
+                       var formData = getFormData( context );
 
                        // linkParams object is modified and reused
-                       resultRenderCache.linkParams[ resultRenderCache.textParam ] = text;
+                       formData.linkParams[ formData.textParam ] = text;
 
                        // this is the container <div>, jQueryfied
                        this.text( text )
                                .wrap(
                                        $( '<a>' )
-                                               .attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) )
+                                               .attr( 'href', formData.baseHref + $.param( formData.linkParams ) )
                                                .attr( 'title', text )
                                                .addClass( 'mw-searchSuggest-link' )
                                );
                }
 
                function specialRenderFunction( query, context ) {
-                       var $el = this;
-
-                       if ( !resultRenderCache ) {
-                               resultRenderCache = computeResultRenderCache( context );
-                       }
+                       var $el = this,
+                               formData = getFormData( context );
 
                        // linkParams object is modified and reused
-                       resultRenderCache.linkParams[ resultRenderCache.textParam ] = query;
+                       formData.linkParams[ formData.textParam ] = query;
 
                        if ( $el.children().length === 0 ) {
                                $el
                        }
 
                        if ( $el.parent().hasClass( 'mw-searchSuggest-link' ) ) {
-                               $el.parent().attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) + '&fulltext=1' );
+                               $el.parent().attr( 'href', formData.baseHref + $.param( formData.linkParams ) + '&fulltext=1' );
                        } else {
                                $el.wrap(
                                        $( '<a>' )
-                                               .attr( 'href', resultRenderCache.baseHref + $.param( resultRenderCache.linkParams ) + '&fulltext=1' )
+                                               .attr( 'href', formData.baseHref + $.param( formData.linkParams ) + '&fulltext=1' )
                                                .addClass( 'mw-searchSuggest-link' )
                                );
                        }
index 45338ea..78627fc 100644 (file)
                                $tocList.slideDown( 'fast' );
                                $tocToggleLink.text( mw.msg( 'hidetoc' ) );
                                $toc.removeClass( 'tochidden' );
-                               $.cookie( 'mw_hidetoc', null, {
-                                       expires: 30,
-                                       path: '/'
-                               } );
+                               mw.cookie.set( 'hidetoc', null );
                        } else {
                                $tocList.slideUp( 'fast' );
                                $tocToggleLink.text( mw.msg( 'showtoc' ) );
                                $toc.addClass( 'tochidden' );
-                               $.cookie( 'mw_hidetoc', '1', {
-                                       expires: 30,
-                                       path: '/'
-                               } );
+                               mw.cookie.set( 'hidetoc', '1' );
                        }
                }
 
                // Only add it if there is a complete TOC and it doesn't
                // have a toggle added already
                if ( $toc.length && $tocTitle.length && $tocList.length && !$tocToggleLink.length ) {
-                       hideToc = $.cookie( 'mw_hidetoc' ) === '1';
+                       hideToc = mw.cookie.get( 'hidetoc' ) === '1';
 
                        $tocToggleLink = $( '<a href="#" id="togglelink"></a>' )
                                .text( hideToc ? mw.msg( 'showtoc' ) : mw.msg( 'hidetoc' ) )
index 817c856..ec34ce6 100644 (file)
                 * @return {string} Random session ID
                 */
                sessionId: function () {
-                       var sessionId = $.cookie( 'mediaWiki.user.sessionId' );
-                       if ( sessionId === undefined || sessionId === null ) {
+                       var sessionId = mw.cookie.get( 'mwuser-sessionId' );
+                       if ( sessionId === null ) {
                                sessionId = mw.user.generateRandomSessionId();
-                               $.cookie( 'mediaWiki.user.sessionId', sessionId, { expires: null, path: '/' } );
+                               mw.cookie.set( 'mwuser-sessionId', sessionId, { expires: null } );
                        }
                        return sessionId;
                },
                                expires: 30
                        }, options || {} );
 
-                       cookie = $.cookie( 'mediaWiki.user.bucket:' + key );
+                       cookie = mw.cookie.get( 'mwuser-bucket:' + key );
 
                        // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
                        if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) !== -1 ) {
                                        }
                                }
 
-                               $.cookie(
-                                       'mediaWiki.user.bucket:' + key,
+                               mw.cookie.set(
+                                       'mwuser-bucket:' + key,
                                        version + ':' + bucket,
-                                       { path: '/', expires: Number( options.expires ) }
+                                       { expires: Number( options.expires ) * 86400 }
                                );
                        }
 
index 3964f0b..df10204 100644 (file)
@@ -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.charAt( 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 ) {
index 6723e5f..93a1b3b 100644 (file)
@@ -82,6 +82,7 @@
                                .replace( /%29/g, ')' )
                                .replace( /%2C/g, ',' )
                                .replace( /%2F/g, '/' )
+                               .replace( /%7E/g, '~' )
                                .replace( /%3A/g, ':' );
                },
 
                                url = location.href;
                        }
                        // Get last match, stop at hash
-                       var     re = new RegExp( '^[^#]*[&?]' + $.escapeRE( param ) + '=([^&#]*)' ),
+                       var     re = new RegExp( '^[^#]*[&?]' + mw.RegExp.escape( param ) + '=([^&#]*)' ),
                                m = re.exec( url );
                        if ( m ) {
                                // Beware that decodeURIComponent is not required to understand '+'
index 2682ee1..8a81a64 100644 (file)
@@ -94,6 +94,9 @@ $wgAutoloadClasses += array(
        'ResourceLoaderImageModuleTest' => "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
        'ResourceLoaderImageModuleTestable' => "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
 
+       # tests/phpunit/includes/specials
+       'SpecialPageTestBase' => "$testDir/phpunit/includes/specials/SpecialPageTestBase.php",
+
        # tests/phpunit/languages
        'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
 
@@ -114,6 +117,7 @@ $wgAutoloadClasses += array(
        'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php",
        'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
        'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php",
+       'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php",
 
        # tests/parser
        'NewParserTest' => "$testDir/phpunit/includes/parser/NewParserTest.php",
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 0b4e83a..35df8b4 100644 (file)
@@ -10,3 +10,8 @@ Feature: Create account
     | Special:CreateAccount         |
     | Special:UserLogin/signup      |
     | Special:UserLogin?type=signup |
+
+  Scenario: If no username is entered then an error is displayed
+    Given I go to Create account page at Special:CreateAccount
+    When I submit the form
+    Then an error message is displayed
index 03bff66..3d312f7 100644 (file)
@@ -16,3 +16,11 @@ end
 Then(/^form has Create account button$/) do
   expect(on(CreateAccountPage).create_account_element).to exist
 end
+
+When(/^I submit the form$/) do
+  on(CreateAccountPage).create_account
+end
+
+Then(/^an error message is displayed$/) do
+  expect(on(CreateAccountPage).error_message_element.class_name).to eq "errorbox"
+end
index 98b893a..9aa00cd 100644 (file)
@@ -15,4 +15,5 @@ class CreateAccountPage
   page_url '<%=params[:page_title]%>'
 
   button(:create_account, id: 'wpCreateaccount')
+  div(:error_message, id: 'mw-createacct-status-area')
 end
index e965352..6700225 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
@@ -165,6 +172,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
@@ -1425,6 +1439,16 @@ parsoid=html2wt
 <nowiki>* &lt;/nowiki&gt;</nowiki> tag
 !! end
 
+!! test
+T93824: Put escaped HTML tags inside nowiki
+!! options
+parsoid=html2wt
+!! html
+<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
@@ -1483,6 +1507,30 @@ parsoid=html2wt
 {{echo|a <nowiki>}</nowiki>}}
 !! end
 
+!! test
+Cases where "!!" needs nowiki protection
+!! options
+parsoid=html2wt
+!! html
+<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 +1635,10 @@ Comment whitespace
 Comment semantics and delimiters
 !! wikitext
 <!-- --><!----><!-----><!------>
-!! html
+!! html/php
 
+!! html/parsoid
+<!-- --><!----><!--&#x2D;--><!--&#x2D;&#x2D;-->
 !! end
 
 !! test
@@ -1596,8 +1646,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 +1660,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
@@ -1683,9 +1765,10 @@ parsoid=wt2html,wt2wt
 <!--c1-->*a
 <!--c2--><!--c3--><!--c4-->*b
 !! html
-<ul>
+<!--c1--><ul>
 <li>a
 </li>
+<!--c2--><!--c3--><!--c4-->
 <li>b
 </li>
 </ul>
@@ -1894,7 +1977,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 +1987,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
 
 ###
@@ -2671,7 +2754,7 @@ 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>
+<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
@@ -2686,6 +2769,19 @@ Templates: Preserve blank parameter names
 <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
+<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 +3232,9 @@ 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/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 +3245,20 @@ 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/parsoid
+<p>a <!--
+foo
+--> b</p>
 !! end
 
 ###
@@ -4006,6 +4113,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 +4173,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>
@@ -5208,15 +5318,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>
+<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 +5430,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 +5632,7 @@ Simple table but with multiple dashes for row wikitext
 </td></tr></table>
 
 !! end
+
 !! test
 Multiplication table
 !! wikitext
@@ -5600,6 +5753,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,6 +5962,26 @@ Invalid attributes in table cell (bug 1830)
 
 !! end
 
+!! test
+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
+<table>
+<tr>
+<td title="foo">bar
+</td>
+<td title="foo&#124;">bar
+</td>
+<td> title="foo|" bar
+</td></tr></table>
+
+!! end
+
 # The "|}" to close the table is missing from the input, so parsoid's
 # *2wt modes will fail.
 !! test
@@ -5892,6 +6128,35 @@ 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
+
 !! test
 Table with row followed by newlines and table heading
 !! wikitext
@@ -6810,7 +7075,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>
@@ -7125,7 +7390,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
@@ -7515,7 +7780,6 @@ Blah blah blah
 [[   es :Spanish]]
 [[ ZH :Chinese]]
 [[es:Foo_bar]]
-[[es:Foo bar]]
 !! html/php
 <p>Blah blah blah
 </p>
@@ -7524,7 +7788,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
@@ -7702,12 +7980,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 +7994,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 +8018,7 @@ Empty redirect
 parsoid=wt2html,wt2wt
 !! wikitext
 #REDIRECT [[]]
-!! html
+!! html/parsoid
 <ol>
 <li>REDIRECT [[]]</li></ol>
 !! end
@@ -7745,8 +8031,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 +8047,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 +8059,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 +8161,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]]
@@ -8225,7 +8512,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 +8545,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
@@ -9642,9 +9933,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 +10175,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
@@ -10669,6 +10980,24 @@ 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
+
 !!test
 Templates: HTML Tables: 1. Generating start of a HTML table
 !! wikitext
@@ -10896,6 +11225,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
@@ -11921,7 +12290,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 +12301,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 +12358,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 +12380,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 +12396,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 +12412,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 +12430,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
@@ -12187,7 +12556,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
@@ -12334,9 +12703,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,9 +12741,9 @@ 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
 
 ###################
@@ -12401,8 +12770,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 +12787,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 +12801,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 +12817,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 +12831,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 +12847,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
@@ -12550,7 +12919,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 +12933,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 +12945,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 +12958,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 +12982,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:ExtLink">ISBN 1235467890</a></figcaption></figure>
 !! end
 
 !! test
@@ -12624,7 +12993,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 +13004,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
@@ -12726,7 +13095,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 +13119,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 +13138,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 +13155,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 +13197,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 +13211,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 +13232,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 +13279,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 +13290,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 +13299,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 +13310,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 +13334,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 +13343,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 +13351,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
@@ -13050,7 +13419,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 +13430,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 +13457,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
@@ -13435,6 +13804,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
@@ -13450,15 +13965,21 @@ parsoid
 </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
@@ -13744,6 +14265,22 @@ TOC regression (T11764)
 
 !! end
 
+!! test
+TOC for heading containing <span id="..."></span> (T96153)
+!! wikitext
+__FORCETOC__
+==<span id="old-anchor"></span>New title==
+!! html
+<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
@@ -17548,7 +18085,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
@@ -18293,6 +18830,61 @@ Raw: -{R|zh:China;zh-tw:Taiwan}-
 </p>
 !! end
 
+!! test
+Strings evaluating false shouldn't be ignored by Language converter (T51072)
+!! options
+language=zh variant=zh-cn
+!! input
+-{zh-cn:0;zh-sg:1;zh-tw:2;zh-hk:3}-
+!! result
+<p>0
+</p>
+!! end
+
+!! test
+Conversion rules from [numeric-only string] to [something else] (T48634)
+!! options
+language=zh variant=zh-cn
+!! input
+-{H|0=>zh-cn:B}--{H|0=>zh-cn:C;0=>zh-cn:D}--{H|0=>zh-hans:A}-012345-{A|zh-tw:0;zh-cn:E;}-012345
+!! result
+<p>D12345EE12345
+</p>
+!! end
+
+!! test
+Bidirectional converter rule entries with an empty value should be ignored (T53551)
+!! options
+language=zh variant=zh-cn
+!! input
+-{H|zh-cn:foo;zh-tw:;}-foobar
+!! result
+<p>foobar
+</p>
+!! end
+
+!! test
+Unidirectional converter rule entries with an empty "from" string should be ignored (T53551)
+!! options
+language=zh variant=zh-cn
+!! input
+-{H|=>zh-cn:foo;}-foobar
+!! result
+<p>foobar
+</p>
+!! end
+
+!! test
+Empty converter rule entries shouldn't be inserted into the conversion table (T53551)
+!! options
+language=zh variant=zh-cn
+!! input
+-{H|}-foobar
+!! result
+<p>foobar
+</p>
+!! end
+
 !! test
 Nested using of manual convert syntax
 !! options
@@ -19038,7 +19630,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
 
@@ -19368,7 +19960,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":"[[bar]]"}'><a href="./File:%25+abc9" data-parsoid='{"a":{"href":"./File:%25+abc9"},"sa":{}}'><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
@@ -20137,10 +20732,11 @@ 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
 
 #### ----------------------------------------------------------------
@@ -20159,13 +20755,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
 
@@ -20178,10 +20774,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
 
@@ -20195,11 +20791,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
 
@@ -20212,9 +20808,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
 
@@ -20229,10 +20825,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
@@ -20250,10 +20846,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>
@@ -20280,10 +20876,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
 
@@ -20306,9 +20902,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
 
@@ -20320,9 +20916,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
 
@@ -20335,11 +20931,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
 
@@ -20352,37 +20948,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
@@ -20395,11 +20989,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
@@ -20413,10 +21007,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
 
@@ -20430,10 +21024,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
 
@@ -20447,9 +21041,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
@@ -20461,11 +21055,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
 
@@ -20478,11 +21072,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
 
@@ -20495,10 +21089,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
 
@@ -20513,28 +21107,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>
@@ -20543,26 +21133,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>
 
@@ -20571,23 +21159,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>
@@ -20597,23 +21183,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>
@@ -20622,30 +21206,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" />
@@ -20655,30 +21235,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
 
@@ -20688,18 +21266,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
 
@@ -20721,15 +21297,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
 
@@ -20743,10 +21317,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
@@ -20756,8 +21330,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
 
 #### ----------------------------------------------------------------
@@ -20990,8 +21564,6 @@ parsoid=html2wt
 
 !! test
 Headings: 5. Empty headings
-!! options
-parsoid
 !! wikitext
 =<nowiki/>=
 
@@ -21004,13 +21576,18 @@ parsoid
 =====<nowiki/>=====
 
 ======<nowiki/>======
-!! html
-<h1></h1>
-<h2></h2>
-<h3></h3>
-<h4></h4>
-<h5></h5>
-<h6></h6>
+!! html/parsoid
+<h1 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h1>
+
+<h2 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h2>
+
+<h3 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h3>
+
+<h4 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h4>
+
+<h5 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h5>
+
+<h6 data-parsoid='{}'><meta typeof="mw:Placeholder" data-parsoid='{"src":"&lt;nowiki/>"}'/></h6>
 !!end
 
 !! test
@@ -21656,6 +22233,40 @@ parsoid=wt2html
 </tbody></table>
 !! end
 
+!! test
+T97430: Don't emit empty nowiki pairs around marker meta tags
+!! options
+parsoid=html2wt
+!! html
+<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
+<nowiki>|</nowiki>** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
+!! end
+
+!! test
+Unclosed xmlish element in table line shouldn't eat end delimiters
+!! wikitext
+{|
+| <foo
+| bar>
+|}
+!! html/php
+<table>
+<tr>
+<td> &lt;foo
+</td>
+<td> bar&gt;
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><td> &lt;foo</td>
+<td> bar></td></tr>
+</tbody></table>
+!! end
+
 #### --------------- Links ----------------
 #### 1. Quote marks in link text
 #### 2. Wikilinks: Escapes needed
@@ -22031,10 +22642,10 @@ parsoid=html2wt,wt2wt
 <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> <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="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<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>
 !! end
@@ -22152,9 +22763,9 @@ 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>
+<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>
 !! end
@@ -22185,7 +22796,7 @@ parsoid
 !! 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>
+ <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
 
 !! test
@@ -22198,9 +22809,24 @@ parsoid=html2wt
  ==foo==
 !! end
 
-#### --------------- Behavior Switches --------------------
-!! test
-1. Valid behavior switches should be escaped
+!!test
+T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
+!! options
+parsoid
+!! wikitext
+ * foo
+ * bar
+!! html
+<pre>
+* foo
+* bar
+</pre>
+!! end
+
+#### --------------- Behavior Switches --------------------
+
+!! test
+1. Valid behavior switches should be escaped
 !! options
 parsoid=html2wt
 !! html
@@ -22223,6 +22849,29 @@ __TOO__
 __|__
 !! end
 
+# We use indent-pre as an indirect way to test for sol-transparent behavior.
+!! test
+Behavior switches should be SOL-transparent
+!! wikitext
+ __TOC__
+
+ <!-- this one's bogus -->
+ __TOO__
+
+ __TOC__ foo
+
+__TOC__ bar
+!! 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>
+!! end
+
 #### --------------- HTML tags ---------------
 #### 1. a tags
 #### 2. other tags
@@ -22544,6 +23193,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
@@ -22704,7 +23355,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>
@@ -22721,12 +23372,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>
@@ -22734,11 +23383,9 @@ 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
+!! html/parsoid
 <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>
 </body>
 !!end
@@ -22752,7 +23399,7 @@ Ensure ParagraphWrapper can deal with stray closing pre tags
 parsoid=wt2html
 !! wikitext
 plain text</pre>
-!! html
+!! html/parsoid
 plain text
 !!end
 
@@ -22762,7 +23409,7 @@ plain text
 parsoid=wt2html
 !! wikitext
 <table>hi</table><table>ho</table>
-!! html
+!! html/parsoid
 <p>hi</p>
 <table></table>
 <p>ho</p>
@@ -22778,7 +23425,7 @@ parsoid=wt2html,wt2wt
 <tr> || ||
 <td> a
 </table>
-!! html
+!! html/parsoid
 <p> || ||
 </p><table>
 <tbody><tr><td> a</td></tr>
@@ -22791,7 +23438,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
 
@@ -22801,7 +23448,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>
@@ -22817,7 +23464,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>
@@ -22834,7 +23481,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>
@@ -22853,7 +23500,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>
@@ -22872,7 +23519,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>
@@ -22893,7 +23540,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>
@@ -22915,7 +23562,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>
@@ -22926,6 +23573,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
@@ -22936,8 +23585,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>
@@ -22952,7 +23604,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
 
@@ -22967,7 +23619,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>
@@ -22995,7 +23647,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>
@@ -23272,7 +23924,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
 
@@ -23290,26 +23942,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
@@ -23441,22 +24089,6 @@ foo
 </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
@@ -23469,42 +24101,63 @@ parsoid=html2wt
 !! end
 
 !! test
-Headings: Add space before/after == (Bug 51744)
+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>
+<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]]
+[[Category:A2]]
 
-== bar ==
+== hi pal ==
 
-== baz ==
+<!--foo-->  [[Category:A3]]
 
-== <span> baz</span> ==
+== how goes it ==
+
+== it goes well ==
+[[Category:A4]]  <!--bar-->
+
+==howdy [[Category:A5]] ==
+
+__TOC__
+
+== ok ==
 !! end
 
 !! test
-Headings: Force metas to serialize before/after
+Headings: Don't hoist metas that come from templates
 !! 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>
-
-<h2><!--foo-->  <link href="Category:A3" rel="mw:PageProp/Category" />   how goes it</h2>
+<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
-== hello there ==
-[[Category:A1]]
+== {{echo|foo [[Category:Foo]]}} ==
+!! end
 
-[[Category:A2]]
-== hi pal ==
+!! test
+Headings: Category in ref isn't hoisted
+!! options
+parsoid=html2wt
+!! html
+<h2> 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> </h2>
 
-<!--foo-->  [[Category:A3]]
-== how goes it ==
+<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
@@ -23584,17 +24237,61 @@ parsoid=html2wt
 <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="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> </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>
 !! wikitext
 == testing 123 ==
 
+== hi {{bogus|there
+you}} ==
+
+== foo <ref>hello
+there</ref> ==
+
+<references />
+
 * asd sdf
+
+* foo bar baz
+* foo '''bar''' baz
+!! end
+
+!! test
+Serialize new placeholder space without spans
+!! options
+parsoid=html2wt
+!! html
+<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
@@ -23699,9 +24396,52 @@ 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
+<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
+<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
+<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
@@ -23978,6 +24718,151 @@ parsoid=html2wt
 [[Foo]]
 !! end
 
+## 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
+<a bad='true' href='http://boo.org'><img src='http://boohoo.org' /></a>
+!! wikitext
+[http://boo.org http://boohoo.org]
+!! end
+
+# --------------------------------------------
+# Tests spec'ing wikitext serialization norms |
+# --------------------------------------------
+
+!! 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
+Headings: Add space before/after == (T53744)
+!! options
+parsoid=html2wt
+!! html
+<h2>foo</h2>
+<h2> bar</h2>
+<h2>baz </h2>
+<h2><span> baz</span></h2>
+
+<!-- Even after hoisted content -->
+<h2> <link href="Category:A2" rel="mw:PageProp/Category" />ok</h2>
+!! wikitext
+== foo ==
+
+== bar ==
+
+== baz ==
+
+== <span> baz</span> ==
+
+<!-- Even after hoisted content -->
+ [[Category:A2]]
+
+== ok ==
+!! end
+
+!! test
+1. Headings: suppress newly created empty headings
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<h2></h2>
+!! wikitext
+!! end
+
+!! test
+2. Headings: don't suppress empty headings if scrubWikitext is false
+!! options
+parsoid=html2wt
+!! html
+<h2></h2>
+!! wikitext
+==<nowiki/>==
+!! end
+
+!! test
+3. Headings: don't suppress empty headings for existing headings even if scrubWikitext is true
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<h2 data-parsoid='{}'></h2>
+!! wikitext
+==<nowiki/>==
+!! end
+
+!! test
+1. WT Quote Tags: suppress newly created empty style tags
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<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
+<i></i><b></b>
+!! wikitext
+''<nowiki/>'''''<nowiki/>'''
+!! end
+
+!! test
+1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<p> hi</p>
+!! wikitext
+hi
+!! end
+
+!! test
+2. Indent Pre Nowiki: don't suppress whitespace at the start of new paragraph if scrubWikitext is false
+!! options
+parsoid=html2wt
+!! html
+<p> hi</p>
+!! wikitext
+<nowiki> </nowiki>hi
+!! end
+
+# ---------------------------------------------------
+# End of tests spec'ing wikitext serialization norms |
+# ---------------------------------------------------
+
 # -----------------------------------------------------------------
 # End of section for Parsoid-only html2wt tests for serialization
 # of new content
@@ -23993,7 +24878,7 @@ parsoid=html2wt
 
 ## T90517
 !! test
-1. Selser: New comments should not be lost
+Selser: New comments should not be lost
 !! options
 parsoid={
   "modes": ["selser"],
@@ -24014,7 +24899,7 @@ parsoid={
 
 ## T89383
 !! test
-2. Selser: Check for validity of DSR before using it
+Selser: Check for validity of DSR before using it
 !! options
 parsoid={
   "modes": ["selser"],
@@ -24029,10 +24914,55 @@ parsoid={
 <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" />
 
-TODO:
-more images
-more tables
-character entities
-and much more
-Try for 100% code coverage
+<references />
+
+<references group="X">
+<ref name="b"><span id="Z">foo</span>bar</ref>
+</references>
+!! end
index 2ee805e..3665e3c 100644 (file)
@@ -3193,13 +3193,6 @@ About
 &lt;/td&gt;&lt;td&gt;
 <template lineStart="1"><title>int:Nstab-wp</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Nviews&amp;action=edit nviews]&lt;br&gt;
-[[MediaWiki_talk:Nviews|Talk]]
-&lt;/td&gt;&lt;td&gt;
-$1 views
-&lt;/td&gt;&lt;td&gt;
-<template lineStart="1"><title>int:Nviews</title></template>
-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Ok&amp;action=edit ok]&lt;br&gt;
 [[MediaWiki_talk:Ok|Talk]]
 &lt;/td&gt;&lt;td&gt;
@@ -3319,13 +3312,6 @@ Personal tools
 &lt;/td&gt;&lt;td&gt;
 <template lineStart="1"><title>int:Personaltools</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Popularpages&amp;action=edit popularpages]&lt;br&gt;
-[[MediaWiki_talk:Popularpages|Talk]]
-&lt;/td&gt;&lt;td&gt;
-Popular pages
-&lt;/td&gt;&lt;td&gt;
-<template lineStart="1"><title>int:Popularpages</title></template>
-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Portal&amp;action=edit portal]&lt;br&gt;
 [[MediaWiki_talk:Portal|Talk]]
 &lt;/td&gt;&lt;td&gt;
index 4a30f56..c619df7 100644 (file)
@@ -3193,13 +3193,6 @@ About
 </td><td>
 {{int:Nstab-wp}}
 </td></tr><tr><td>
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Nviews&action=edit nviews]<br>
-[[MediaWiki_talk:Nviews|Talk]]
-</td><td>
-$1 views
-</td><td>
-{{int:Nviews}}
-</td></tr><tr><td>
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Ok&action=edit ok]<br>
 [[MediaWiki_talk:Ok|Talk]]
 </td><td>
@@ -3319,13 +3312,6 @@ Personal tools
 </td><td>
 {{int:Personaltools}}
 </td></tr><tr><td>
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Popularpages&action=edit popularpages]<br>
-[[MediaWiki_talk:Popularpages|Talk]]
-</td><td>
-Popular pages
-</td><td>
-{{int:Popularpages}}
-</td></tr><tr><td>
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Portal&action=edit portal]<br>
 [[MediaWiki_talk:Portal|Talk]]
 </td><td>
index 72cac05..0ce056f 100644 (file)
@@ -716,9 +716,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @param string $function
         */
        public function hideDeprecated( $function ) {
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                wfDeprecated( $function );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
        }
 
        /**
@@ -1002,9 +1002,9 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                # This check may also protect against code injection in
                # case of broken installations.
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( !$haveDiff3 ) {
                        $this->markTestSkipped( "Skip test, since diff3 is not configured" );
index 6346bb9..325b20e 100644 (file)
@@ -51,7 +51,7 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
 
                $globals = array();
                foreach ( self::getSettings() as $key => $value ) {
-                       $globals[ 'wg' . $key ] = $value;
+                       $globals['wg' . $key] = $value;
                }
                $this->setMwGlobals( $globals );
        }
@@ -83,7 +83,7 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
                return array( '' => $this->styles );
        }
 
-       public function getDependencies() {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
                return $this->dependencies;
        }
 
@@ -102,6 +102,10 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        public function isRaw() {
                return $this->isRaw;
        }
+
+       public function enableModuleContentVersion() {
+               return true;
+       }
 }
 
 class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
diff --git a/tests/phpunit/data/media/2_webp_a.webp b/tests/phpunit/data/media/2_webp_a.webp
new file mode 100644 (file)
index 0000000..8764f06
Binary files /dev/null and b/tests/phpunit/data/media/2_webp_a.webp differ
diff --git a/tests/phpunit/data/media/2_webp_ll.webp b/tests/phpunit/data/media/2_webp_ll.webp
new file mode 100644 (file)
index 0000000..5794bbf
Binary files /dev/null and b/tests/phpunit/data/media/2_webp_ll.webp differ
diff --git a/tests/phpunit/data/media/srgb.jpg b/tests/phpunit/data/media/srgb.jpg
new file mode 100644 (file)
index 0000000..b965dc4
Binary files /dev/null and b/tests/phpunit/data/media/srgb.jpg differ
diff --git a/tests/phpunit/data/media/tinyrgb.icc b/tests/phpunit/data/media/tinyrgb.icc
new file mode 100644 (file)
index 0000000..eab973f
Binary files /dev/null and b/tests/phpunit/data/media/tinyrgb.icc differ
diff --git a/tests/phpunit/data/media/tinyrgb.jpg b/tests/phpunit/data/media/tinyrgb.jpg
new file mode 100644 (file)
index 0000000..12a8e09
Binary files /dev/null and b/tests/phpunit/data/media/tinyrgb.jpg differ
diff --git a/tests/phpunit/data/media/webp_animated.webp b/tests/phpunit/data/media/webp_animated.webp
new file mode 100644 (file)
index 0000000..25c6a4d
Binary files /dev/null and b/tests/phpunit/data/media/webp_animated.webp differ
index 1974162..7b0de86 100644 (file)
@@ -38,9 +38,13 @@ class BlockTest extends MediaWikiLangTestCase {
                        $oldBlock->delete();
                }
 
-               $this->block = new Block( 'UTBlockee', $user->getID(), 0,
-                       'Parce que', 0, false, time() + 100500
+               $blockOptions = array(
+                       'address' => 'UTBlockee',
+                       'user' => $user->getID(),
+                       'reason' => 'Parce que',
+                       'expiry' => time() + 100500,
                );
+               $this->block = new Block( $blockOptions );
                $this->madeAt = wfTimestamp( TS_MW );
 
                $this->block->insert();
@@ -151,22 +155,19 @@ class BlockTest extends MediaWikiLangTestCase {
                );
 
                // Foreign perspective (blockee not on current wiki)...
-               $block = new Block(
-                       /* $address */ $username,
-                       /* $user */ 14146,
-                       /* $by */ 0,
-                       /* $reason */ 'crosswiki block...',
-                       /* $timestamp */ wfTimestampNow(),
-                       /* $auto */ false,
-                       /* $expiry */ $this->db->getInfinity(),
-                       /* anonOnly */ false,
-                       /* $createAccount */ true,
-                       /* $enableAutoblock */ true,
-                       /* $hideName (ipb_deleted) */ true,
-                       /* $blockEmail */ true,
-                       /* $allowUsertalk */ false,
-                       /* $byName */ 'MetaWikiUser'
+               $blockOptions = array(
+                       'address' => $username,
+                       'user' => 14146,
+                       'reason' => 'crosswiki block...',
+                       'timestamp' => wfTimestampNow(),
+                       'expiry' => $this->db->getInfinity(),
+                       'createAccount' => true,
+                       'enableAutoblock' => true,
+                       'hideName' => true,
+                       'blockEmail' => true,
+                       'byText' => 'MetaWikiUser',
                );
+               $block = new Block( $blockOptions );
                $block->insert();
 
                // Reload block from DB
@@ -208,22 +209,19 @@ class BlockTest extends MediaWikiLangTestCase {
                $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
 
                // Foreign perspective (blockee not on current wiki)...
-               $block = new Block(
-                       /* $address */ 'UserOnForeignWiki',
-                       /* $user */ 14146,
-                       /* $by */ 0,
-                       /* $reason */ 'crosswiki block...',
-                       /* $timestamp */ wfTimestampNow(),
-                       /* $auto */ false,
-                       /* $expiry */ $this->db->getInfinity(),
-                       /* anonOnly */ false,
-                       /* $createAccount */ true,
-                       /* $enableAutoblock */ true,
-                       /* $hideName (ipb_deleted) */ true,
-                       /* $blockEmail */ true,
-                       /* $allowUsertalk */ false,
-                       /* $byName */ 'MetaWikiUser'
+               $blockOptions = array(
+                       'address' => 'UserOnForeignWiki',
+                       'user' => 14146,
+                       'reason' => 'crosswiki block...',
+                       'timestamp' => wfTimestampNow(),
+                       'expiry' => $this->db->getInfinity(),
+                       'createAccount' => true,
+                       'enableAutoblock' => true,
+                       'hideName' => true,
+                       'blockEmail' => true,
+                       'byText' => 'MetaWikiUser',
                );
+               $block = new Block( $blockOptions );
 
                $res = $block->insert( $this->db );
                $this->assertTrue( (bool)$res['id'], 'Block succeeded' );
@@ -367,4 +365,56 @@ class BlockTest extends MediaWikiLangTestCase {
                $block = Block::chooseBlock( $xffblocks, $list );
                $this->assertEquals( $exResult, $block->mReason, 'Correct block type for XFF header ' . $xff );
        }
+
+       public function testDeprecatedConstructor() {
+               $this->hideDeprecated( 'Block::__construct with multiple arguments' );
+               $username = 'UnthinkablySecretRandomUsername';
+               $reason = 'being irrational';
+
+               # Set up the target
+               $u = User::newFromName( $username );
+               if ( $u->getID() == 0 ) {
+                       $u->setPassword( 'TotallyObvious' );
+                       $u->addToDatabase();
+               }
+               unset( $u );
+
+               # Make sure the user isn't blocked
+               $this->assertNull(
+                       Block::newFromTarget( $username ),
+                       "$username should not be blocked"
+               );
+
+               # Perform the block
+               $block = new Block(
+                       /* address */ $username,
+                       /* user */ 0,
+                       /* by */ 0,
+                       /* reason */ $reason,
+                       /* timestamp */ 0,
+                       /* auto */ false,
+                       /* expiry */ 0
+               );
+               $block->insert();
+
+               # Check target
+               $this->assertEquals(
+                       $block->getTarget()->getName(),
+                       $username,
+                       "Target should be set properly"
+               );
+
+               # Check supplied parameter
+               $this->assertEquals(
+                       $block->mReason,
+                       $reason,
+                       "Reason should be non-default"
+               );
+
+               # Check default parameter
+               $this->assertFalse(
+                       (bool)$block->prevents( 'createaccount' ),
+                       "Account creation should not be blocked by default"
+               );
+       }
 }
index 4a974ba..39a0eff 100644 (file)
@@ -108,6 +108,13 @@ class FauxResponseTest extends MediaWikiTestCase {
                        'Third parameter overrides the HTTP/... header'
                );
 
+               $this->response->statusHeader( 210 );
+               $this->assertEquals(
+                       210,
+                       $this->response->getStatusCode(),
+                       'Handle statusHeader method'
+               );
+
                $this->response->header( 'Location: http://localhost/', false, 206 );
                $this->assertEquals(
                        206,
index 1e30273..e89e36f 100644 (file)
@@ -666,9 +666,9 @@ class GlobalTest extends MediaWikiTestCase {
        public function testWfMkdirParents() {
                // Should not return true if file exists instead of directory
                $fname = $this->getNewTempFile();
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $ok = wfMkdirParents( $fname );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                $this->assertFalse( $ok );
        }
 
@@ -687,6 +687,105 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual, $description );
        }
 
+       public function wfWikiID() {
+               $this->setMwGlobals( array(
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => '',
+               ) );
+               $this->assertEquals(
+                       wfWikiID(),
+                       'example'
+               );
+
+               $this->setMwGlobals( array(
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => 'mw_',
+               ) );
+               $this->assertEquals(
+                       wfWikiID(),
+                       'example-mw_'
+               );
+       }
+
+       public function testWfMemcKey() {
+               // Just assert the exact output so we can catch unintentional changes to key
+               // construction, which would effectively invalidate all existing cache.
+
+               $this->setMwGlobals( array(
+                       'wgCachePrefix' => false,
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => '',
+               ) );
+               $this->assertEquals(
+                       wfMemcKey( 'foo', '123', 'bar' ),
+                       'example:foo:123:bar'
+               );
+
+               $this->setMwGlobals( array(
+                       'wgCachePrefix' => false,
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => 'mw_',
+               ) );
+               $this->assertEquals(
+                       wfMemcKey( 'foo', '123', 'bar' ),
+                       'example-mw_:foo:123:bar'
+               );
+
+               $this->setMwGlobals( array(
+                       'wgCachePrefix' => 'custom',
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => 'mw_',
+               ) );
+               $this->assertEquals(
+                       wfMemcKey( 'foo', '123', 'bar' ),
+                       'custom:foo:123:bar'
+               );
+       }
+
+       public function testWfForeignMemcKey() {
+               $this->setMwGlobals( array(
+                       'wgCachePrefix' => false,
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => '',
+               ) );
+               $local = wfMemcKey( 'foo', 'bar' );
+
+               $this->setMwGlobals( array(
+                       'wgDBname' => 'other',
+                       'wgDBprefix' => 'mw_',
+               ) );
+               $this->assertEquals(
+                       wfForeignMemcKey( 'example', '', 'foo', 'bar' ),
+                       $local,
+                       'Match output of wfMemcKey from local wiki'
+               );
+       }
+
+       public function testWfGlobalCacheKey() {
+               $this->setMwGlobals( array(
+                       'wgCachePrefix' => 'ignored',
+                       'wgDBname' => 'example',
+                       'wgDBprefix' => ''
+               ) );
+               $one = wfGlobalCacheKey( 'some', 'thing' );
+               $this->assertEquals(
+                       $one,
+                       'global:some:thing'
+               );
+
+               $this->setMwGlobals( array(
+                       'wgDBname' => 'other',
+                       'wgDBprefix' => 'mw_'
+               ) );
+               $two = wfGlobalCacheKey( 'some', 'thing' );
+
+               $this->assertEquals(
+                       $one,
+                       $two,
+                       'Not fragmented by wiki id'
+               );
+       }
+
        public static function provideWfShellWikiCmdList() {
                global $wgPhpCli;
 
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 f2c9cb4..6808105 100644 (file)
@@ -76,7 +76,7 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( 'https://', '*.com', 'https://name:pass@secure.com/index.html' ),
                        array( 'http://', 'name:pass@test.com', 'http://test.com' ),
                        array( 'http://', 'test.com', 'http://name:pass@test.com' ),
-                       array( 'http://', '*.test.com', 'http://a.b.c.test.com/dir/dir/file?a=6'),
+                       array( 'http://', '*.test.com', 'http://a.b.c.test.com/dir/dir/file?a=6' ),
                        array( null, 'http://*.test.com', 'http://www.test.com' ),
                        array( 'mailto:', 'name@mail.test123.com', 'mailto:name@mail.test123.com' ),
                        array( '',
@@ -122,8 +122,8 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( '', 'git://github.com/prwef/abc-def.git', 'git://github.com/prwef/abc-def.git' ),
                        array( 'git://', 'github.com/', 'git://github.com/prwef/abc-def.git' ),
                        array( 'git://', '*.github.com/', 'git://a.b.c.d.e.f.github.com/prwef/abc-def.git' ),
-                       array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat'),
-                       array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/'),
+                       array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat' ),
+                       array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/' ),
 
                        //
                        // The following only work in PHP >= 5.3.7, due to a bug in parse_url which eats
@@ -243,10 +243,10 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( 'http://*.test.*' ),
                        array( 'http://*test.com' ),
                        array( 'https://*' ),
-                       array( '*://test.com'),
+                       array( '*://test.com' ),
                        array( 'mailto:name:pass@t*est.com' ),
-                       array( 'http://*:888/'),
-                       array( '*http://'),
+                       array( 'http://*:888/' ),
+                       array( '*http://' ),
                        array( 'test.com/*/index' ),
                        array( 'test.com/dir/index?arg=*' ),
                );
diff --git a/tests/phpunit/includes/MediaWikiTest.php b/tests/phpunit/includes/MediaWikiTest.php
new file mode 100644 (file)
index 0000000..e196243
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+class MediaWikiTest extends MediaWikiTestCase {
+       protected function setUp() {
+               parent::setUp();
+
+               $this->setMwGlobals( array(
+                       'wgServer' => 'http://example.org',
+                       'wgScriptPath' => '/w',
+                       'wgScript' => '/w/index.php',
+                       'wgArticlePath' => '/wiki/$1',
+                       'wgActionPaths' => array(),
+               ) );
+       }
+
+       public static function provideTryNormaliseRedirect() {
+               return array(
+                       array(
+                               // View: Canonical
+                               'url' => 'http://example.org/wiki/Foo_Bar',
+                               'query' => array(),
+                               'title' => 'Foo_Bar',
+                               'redirect' => false,
+                       ),
+                       array(
+                               // View: Escaped title
+                               'url' => 'http://example.org/wiki/Foo%20Bar',
+                               'query' => array(),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // View: Script path
+                               'url' => 'http://example.org/w/index.php?title=Foo_Bar',
+                               'query' => array( 'title' => 'Foo_Bar' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // View: Script path with implicit title from page id
+                               'url' => 'http://example.org/w/index.php?curid=123',
+                               'query' => array( 'curid' => '123' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => false,
+                       ),
+                       array(
+                               // View: Script path with implicit title from revision id
+                               'url' => 'http://example.org/w/index.php?oldid=123',
+                               'query' => array( 'oldid' => '123' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => false,
+                       ),
+                       array(
+                               // View: Script path without title
+                               'url' => 'http://example.org/w/index.php',
+                               'query' => array(),
+                               'title' => 'Main_Page',
+                               'redirect' => 'http://example.org/wiki/Main_Page',
+                       ),
+                       array(
+                               // View: Script path with empty title
+                               'url' => 'http://example.org/w/index.php?title=',
+                               'query' => array( 'title' => '' ),
+                               'title' => 'Main_Page',
+                               'redirect' => 'http://example.org/wiki/Main_Page',
+                       ),
+                       array(
+                               // View: Index with escaped title
+                               'url' => 'http://example.org/w/index.php?title=Foo%20Bar',
+                               'query' => array( 'title' => 'Foo Bar' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // View: Script path with escaped title
+                               'url' => 'http://example.org/w/?title=Foo_Bar',
+                               'query' => array( 'title' => 'Foo_Bar' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // View: Root path with escaped title
+                               'url' => 'http://example.org/?title=Foo_Bar',
+                               'query' => array( 'title' => 'Foo_Bar' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // View: Canonical with redundant query
+                               'url' => 'http://example.org/wiki/Foo_Bar?action=view',
+                               'query' => array( 'action' => 'view' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // Edit: Canonical view url with action query
+                               'url' => 'http://example.org/wiki/Foo_Bar?action=edit',
+                               'query' => array( 'action' => 'edit' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => false,
+                       ),
+                       array(
+                               // View: Index with action query
+                               'url' => 'http://example.org/w/index.php?title=Foo_Bar&action=view',
+                               'query' => array( 'title' => 'Foo_Bar', 'action' => 'view' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => 'http://example.org/wiki/Foo_Bar',
+                       ),
+                       array(
+                               // Edit: Index with action query
+                               'url' => 'http://example.org/w/index.php?title=Foo_Bar&action=edit',
+                               'query' => array( 'title' => 'Foo_Bar', 'action' => 'edit' ),
+                               'title' => 'Foo_Bar',
+                               'redirect' => false,
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideTryNormaliseRedirect
+        * @covers MediaWiki::tryNormaliseRedirect
+        */
+       public function testTryNormaliseRedirect( $url, $query, $title, $expectedRedirect = false ) {
+               // Set SERVER because interpolateTitle() doesn't use getRequestURL(),
+               // whereas tryNormaliseRedirect does().
+               $_SERVER['REQUEST_URI'] = $url;
+
+               $req = new FauxRequest( $query );
+               $req->setRequestURL( $url );
+               // This adds a virtual 'title' query parameter. Normally called from Setup.php
+               $req->interpolateTitle();
+
+               $titleObj = Title::newFromText( $title );
+
+               // Set global context since some involved code paths don't yet have context
+               $context = RequestContext::getMain();
+               $context->setRequest( $req );
+               $context->setTitle( $titleObj );
+
+               $mw = new MediaWiki( $context );
+
+               $method = new ReflectionMethod( $mw, 'tryNormaliseRedirect' );
+               $method->setAccessible( true );
+               $ret = $method->invoke( $mw, $titleObj );
+
+               $this->assertEquals(
+                       $expectedRedirect !== false,
+                       $ret,
+                       'Return true only when redirecting'
+               );
+
+               $this->assertEquals(
+                       $expectedRedirect ?: '',
+                       $context->getOutput()->getRedirect()
+               );
+       }
+}
index 742d382..3c45f30 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-class MimeMagicTest extends MediaWikiTestCase {
+class MimeMagicTest extends PHPUnit_Framework_TestCase {
 
        /** @var MimeMagic */
        private $mimeMagic;
index 9501e45..0ef2fa6 100644 (file)
@@ -57,7 +57,7 @@ class MovePageTest extends MediaWikiTestCase {
                        WikiPage::factory( $oldTitle )->getRevision()
                );
                $this->assertNotNull(
-                       WikiPage::factory( $newTitle)->getRevision()
+                       WikiPage::factory( $newTitle )->getRevision()
                );
        }
 }
index 6c6d95e..7dddf77 100644 (file)
@@ -244,36 +244,36 @@ document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\
                        'test.foo' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.foo( { a: true } );',
                                'styles' => '.mw-test-foo { content: "style"; }',
-                       )),
+                       ) ),
                        'test.bar' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.bar( { a: true } );',
                                'styles' => '.mw-test-bar { content: "style"; }',
-                       )),
+                       ) ),
                        'test.baz' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.baz( { a: true } );',
                                'styles' => '.mw-test-baz { content: "style"; }',
-                       )),
+                       ) ),
                        'test.quux' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.baz( { token: 123 } );',
                                'styles' => '/* pref-animate=off */ .mw-icon { transition: none; }',
                                'group' => 'private',
-                       )),
+                       ) ),
                        'test.raw' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.baz( { token: 123 } );',
                                'isRaw' => true,
-                       )),
+                       ) ),
                        'test.noscript' => new ResourceLoaderTestModule( array(
                                'styles' => '.mw-test-noscript { content: "style"; }',
                                'group' => 'noscript',
-                       )),
+                       ) ),
                        'test.group.bar' => new ResourceLoaderTestModule( array(
                                'styles' => '.mw-group-bar { content: "style"; }',
                                'group' => 'bar',
-                       )),
+                       ) ),
                        'test.group.foo' => new ResourceLoaderTestModule( array(
                                'styles' => '.mw-group-foo { content: "style"; }',
                                'group' => 'foo',
-                       )),
+                       ) ),
                ) );
                $links = $method->invokeArgs( $out, $args );
                // Strip comments to avoid variation due to wgDBname in WikiID and cache key
@@ -286,19 +286,19 @@ document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\
  * MessageBlobStore that doesn't do anything
  */
 class NullMessageBlobStore extends MessageBlobStore {
-       public function get ( ResourceLoader $resourceLoader, $modules, $lang ) {
+       public function get( ResourceLoader $resourceLoader, $modules, $lang ) {
                return array();
        }
 
-       public function insertMessageBlob ( $name, ResourceLoaderModule $module, $lang ) {
+       public function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) {
                return false;
        }
 
-       public function updateModule ( $name, ResourceLoaderModule $module, $lang ) {
+       public function updateModule( $name, ResourceLoaderModule $module, $lang ) {
                return;
        }
 
-       public function updateMessage ( $key ) {
+       public function updateMessage( $key ) {
        }
        public function clear() {
        }
index 14911f0..f47e74e 100644 (file)
@@ -5,7 +5,7 @@
  * @todo all test methods in this class should be refactored and...
  *    use a single test method and a single data provider...
  */
-class SanitizerValidateEmailTest extends MediaWikiTestCase {
+class SanitizerValidateEmailTest extends PHPUnit_Framework_TestCase {
 
        private function checkEmail( $addr, $expected = true, $msg = '' ) {
                if ( $msg == '' ) {
index c013f4f..291ed31 100644 (file)
@@ -372,7 +372,7 @@ class StatusTest extends MediaWikiLangTestCase {
                );
 
                $status = new Status();
-               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' )  ) );
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
                $testCases['1MessageWarning'] = array(
                        $status,
                        "<fooBar!>",
@@ -449,7 +449,7 @@ class StatusTest extends MediaWikiLangTestCase {
 //             );
 
                $status = new Status();
-               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' )  ) );
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
                $testCases['1MessageWarning'] = array(
                        $status,
                        array( 'foo', 'bar' ),
index 0f7069a..6654a5b 100644 (file)
@@ -4,7 +4,7 @@
  * @author Adam Shorland
  * @covers TitleArrayFromResult
  */
-class TitleArrayFromResultTest extends MediaWikiTestCase {
+class TitleArrayFromResultTest extends PHPUnit_Framework_TestCase {
 
        private function getMockResultWrapper( $row = null, $numRows = 1 ) {
                $resultWrapper = $this->getMockBuilder( 'ResultWrapper' )
index fd10ae7..f588ed6 100644 (file)
@@ -753,8 +753,14 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $prev = time();
                $now = time() + 120;
                $this->user->mBlockedby = $this->user->getId();
-               $this->user->mBlock = new Block( '127.0.8.1', 0, $this->user->getId(),
-                       'no reason given', $prev + 3600, 1, 0 );
+               $this->user->mBlock = new Block( array(
+                       'address' => '127.0.8.1',
+                       'by' => $this->user->getId(),
+                       'reason' => 'no reason given',
+                       'timestamp' => $prev + 3600,
+                       'auto' => true,
+                       'expiry' => 0
+               ) );
                $this->user->mBlock->mTimestamp = 0;
                $this->assertEquals( array( array( 'autoblockedtext',
                                '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
@@ -770,8 +776,14 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                global $wgLocalTZoffset;
                $wgLocalTZoffset = -60;
                $this->user->mBlockedby = $this->user->getName();
-               $this->user->mBlock = new Block( '127.0.8.1', 0, $this->user->getId(),
-                       'no reason given', $now, 0, 10 );
+               $this->user->mBlock = new Block( array(
+                       'address' => '127.0.8.1',
+                       'by' => $this->user->getId(),
+                       'reason' => 'no reason given',
+                       'timestamp' => $now,
+                       'auto' => false,
+                       'expiry' => 10,
+               ) );
                $this->assertEquals( array( array( 'blockedtext',
                                '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
                                'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
index a8cffd1..a2c6f23 100644 (file)
@@ -145,7 +145,7 @@ class TitleTest extends MediaWikiTestCase {
                                        }
                                )
                        )
-               ));
+               ) );
        }
 
        /**
index 370b5b2..77132bb 100644 (file)
@@ -307,9 +307,30 @@ class UserTest extends MediaWikiTestCase {
         */
        public function testCheckPasswordValidity() {
                $this->setMwGlobals( array(
-                       'wgMinimalPasswordLength' => 6,
-                       'wgMaximalPasswordLength' => 30,
+                       'wgPasswordPolicy' => array(
+                               'policies' => array(
+                                       'sysop' => array(
+                                               'MinimalPasswordLength' => 8,
+                                               'MinimumPasswordLengthToLogin' => 1,
+                                               'PasswordCannotMatchUsername' => 1,
+                                       ),
+                                       'default' => array(
+                                               'MinimalPasswordLength' => 6,
+                                               'PasswordCannotMatchUsername' => true,
+                                               'PasswordCannotMatchBlacklist' => true,
+                                               'MaximalPasswordLength' => 30,
+                                       ),
+                               ),
+                               'checks' => array(
+                                       'MinimalPasswordLength' => 'PasswordPolicyChecks::checkMinimalPasswordLength',
+                                       'MinimumPasswordLengthToLogin' => 'PasswordPolicyChecks::checkMinimumPasswordLengthToLogin',
+                                       'PasswordCannotMatchUsername' => 'PasswordPolicyChecks::checkPasswordCannotMatchUsername',
+                                       'PasswordCannotMatchBlacklist' => 'PasswordPolicyChecks::checkPasswordCannotMatchBlacklist',
+                                       'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength',
+                               ),
+                       ),
                ) );
+
                $user = User::newFromName( 'Useruser' );
                // Sanity
                $this->assertTrue( $user->isValidPassword( 'Password1234' ) );
@@ -445,4 +466,89 @@ class UserTest extends MediaWikiTestCase {
                $this->assertGreaterThan(
                        $touched, $user->getDBTouched(), "user_touched increased with casOnTouched() #2" );
        }
+
+       public static function setExtendedLoginCookieDataProvider() {
+               $data = array();
+               $now = time();
+
+               $secondsInDay = 86400;
+
+               // Arbitrary durations, in units of days, to ensure it chooses the
+               // right one.  There is a 5-minute grace period (see testSetExtendedLoginCookie)
+               // to work around slow tests, since we're not currently mocking time() for PHP.
+
+               $durationOne = $secondsInDay * 5;
+               $durationTwo = $secondsInDay * 29;
+               $durationThree = $secondsInDay * 17;
+
+               // If $wgExtendedLoginCookieExpiration is null, then the expiry passed to
+               // set cookie is time() + $wgCookieExpiration
+               $data[] = array(
+                       null,
+                       $durationOne,
+                       $now + $durationOne,
+               );
+
+               // If $wgExtendedLoginCookieExpiration isn't null, then the expiry passed to
+               // set cookie is $now + $wgExtendedLoginCookieExpiration
+               $data[] = array(
+                       $durationTwo,
+                       $durationThree,
+                       $now + $durationTwo,
+               );
+
+               return $data;
+       }
+
+       /**
+        * @dataProvider setExtendedLoginCookieDataProvider
+        * @covers User::getRequest
+        * @covers User::setCookie
+        * @backupGlobals enabled
+        */
+       public function testSetExtendedLoginCookie(
+               $extendedLoginCookieExpiration,
+               $cookieExpiration,
+               $expectedExpiry
+       ) {
+               $this->setMwGlobals( array(
+                       'wgExtendedLoginCookieExpiration' => $extendedLoginCookieExpiration,
+                       'wgCookieExpiration' => $cookieExpiration,
+               ) );
+
+               $response = $this->getMock( 'WebResponse' );
+               $setcookieSpy = $this->any();
+               $response->expects( $setcookieSpy )
+                       ->method( 'setcookie' );
+
+               $request = new MockWebRequest( $response );
+               $user = new UserProxy( User::newFromSession( $request ) );
+               $user->setExtendedLoginCookie( 'name', 'value', true );
+
+               $setcookieInvocations = $setcookieSpy->getInvocations();
+               $setcookieInvocation = end( $setcookieInvocations );
+               $actualExpiry = $setcookieInvocation->parameters[ 2 ];
+
+               // TODO: ± 300 seconds compensates for
+               // slow-running tests. However, the dependency on the time
+               // function should be removed.  This requires some way
+               // to mock/isolate User->setExtendedLoginCookie's call to time()
+               $this->assertEquals( $expectedExpiry, $actualExpiry, '', 300 );
+       }
+}
+
+class UserProxy extends User {
+
+       /**
+        * @var User
+        */
+       protected $user;
+
+       public function __construct( User $user ) {
+               $this->user = $user;
+       }
+
+       public function setExtendedLoginCookie( $name, $value, $secure ) {
+               $this->user->setExtendedLoginCookie( $name, $value, $secure );
+       }
 }
index 0dbb010..21819b7 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @group Xml
  */
-class XmlJs extends MediaWikiTestCase {
+class XmlJs extends PHPUnit_Framework_TestCase {
 
        /**
         * @covers XmlJsCode::__construct
index 382e3d8..bea338d 100644 (file)
@@ -154,7 +154,7 @@ class XmlTest extends MediaWikiTestCase {
                        '<label for="year">From year (and earlier):</label> ' .
                                '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
                                '<label for="month">From month (and earlier):</label> ' .
-                               '<select id="month" name="month" class="mw-month-selector">' .
+                               '<select name="month" id="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
                                '<option value="1">January</option>' . "\n" .
                                '<option value="2" selected="">February</option>' . "\n" .
@@ -175,7 +175,7 @@ class XmlTest extends MediaWikiTestCase {
                        '<label for="year">From year (and earlier):</label> ' .
                                '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
                                '<label for="month">From month (and earlier):</label> ' .
-                               '<select id="month" name="month" class="mw-month-selector">' .
+                               '<select name="month" id="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
                                '<option value="1">January</option>' . "\n" .
                                '<option value="2">February</option>' . "\n" .
@@ -209,7 +209,7 @@ class XmlTest extends MediaWikiTestCase {
                        '<label for="year">From year (and earlier):</label> ' .
                                '<input id="year" maxlength="4" size="7" type="number" name="year" /> ' .
                                '<label for="month">From month (and earlier):</label> ' .
-                               '<select id="month" name="month" class="mw-month-selector">' .
+                               '<select name="month" id="month" class="mw-month-selector">' .
                                '<option value="-1">all</option>' . "\n" .
                                '<option value="1">January</option>' . "\n" .
                                '<option value="2">February</option>' . "\n" .
index d98eec6..880572b 100644 (file)
@@ -68,7 +68,7 @@ class ApiBlockTest extends ApiTestCase {
         * @expectedException UsageException
         * @expectedExceptionMessage The token parameter must be set
         */
-       public function testBlockingActionWithNoToken( ) {
+       public function testBlockingActionWithNoToken() {
                $this->doApiRequest(
                        array(
                                'action' => 'block',
index 865f1c2..e006bf7 100644 (file)
@@ -218,7 +218,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'section' => 'new',
                        'text' => 'test',
                        'summary' => 'header',
-               ));
+               ) );
 
                $this->assertEquals( 'Success', $re['edit']['result'] );
                // Check the page text is correct
@@ -235,7 +235,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'section' => 'new',
                        'text' => 'test',
                        'summary' => 'header',
-               ));
+               ) );
 
                $this->assertEquals( 'Success', $re2['edit']['result'] );
                $text = WikiPage::factory( Title::newFromText( $name ) )
@@ -475,7 +475,7 @@ class ApiEditPageTest extends ApiTestCase {
        public function testCheckDirectApiEditingDisallowed_forNonTextContent() {
                $this->setExpectedException(
                        'UsageException',
-                       'Direct editing via API is not supported for this content type.'
+                       'Direct editing via API is not supported for content model testing used by Dummy:ApiEditPageTest_nonTextPageEdit'
                );
 
                $this->doApiRequestWithToken( array(
index e8ef180..ee1a954 100644 (file)
@@ -71,7 +71,7 @@ class ApiMainTest extends ApiTestCase {
                        new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ) )
                );
                $modules = $api->getModuleManager()->getNamesWithClasses();
-               foreach( $modules as $name => $class ) {
+               foreach ( $modules as $name => $class ) {
                        $this->assertArrayHasKey(
                                $class,
                                $classes,
index 124988f..0ac00ee 100644 (file)
@@ -13,9 +13,11 @@ class ApiQueryAllPagesTest extends ApiTestCase {
        }
 
        /**
-        * @todo give this test a real name explaining what is being tested here
+        *Test bug 25702
+        *Prefixes of API search requests are not handled with case sensitivity and may result
+        *in wrong search results
         */
-       public function testBug25702() {
+       public function testPrefixNormalizationSearchBug() {
                $title = Title::newFromText( 'Category:Template:xyz' );
                $page = WikiPage::factory( $title );
                $page->doEdit( 'Some text', 'inserting content' );
index f0d8455..f894f87 100644 (file)
@@ -871,8 +871,12 @@ class ApiResultTest extends MediaWikiTestCase {
                                array( 'Types' => array( 'AssocAsObject' => true ) ),
                                (object)array(
                                        'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
-                                       'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
-                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+                                       'defaultAssoc' => (object)array( 'x' => 'a',
+                                               1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
+                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b',
+                                               0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
                                        'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCassoc' => (object)array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
@@ -960,8 +964,12 @@ class ApiResultTest extends MediaWikiTestCase {
                                array( 'Types' => array( 'ArmorKVP' => 'name', 'AssocAsObject' => true ) ),
                                (object)array(
                                        'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
-                                       'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
-                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+                                       'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b',
+                                               0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
+                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b',
+                                               0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
                                        'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCassoc' => (object)array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
@@ -1124,6 +1132,76 @@ class ApiResultTest extends MediaWikiTestCase {
                $data[ApiResult::META_CONTENT] = 'bar';
        }
 
+       /**
+        * @covers ApiResult
+        */
+       public function testAddMetadataToResultVars() {
+               $arr = array(
+                       'a' => "foo",
+                       'b' => false,
+                       'c' => 10,
+                       'sequential_numeric_keys' => array( 'a', 'b', 'c' ),
+                       'non_sequential_numeric_keys' => array( 'a', 'b', 4 => 'c' ),
+                       'string_keys' => array(
+                               'one' => 1,
+                               'two' => 2
+                       ),
+                       'object_sequential_keys' => (object)array( 'a', 'b', 'c' ),
+                       '_type' => "should be overwritten in result",
+               );
+               $this->assertSame( array(
+                       ApiResult::META_TYPE => 'kvp',
+                       ApiResult::META_KVP_KEY_NAME => 'key',
+                       ApiResult::META_PRESERVE_KEYS => array(
+                               'a', 'b', 'c',
+                               'sequential_numeric_keys', 'non_sequential_numeric_keys',
+                               'string_keys', 'object_sequential_keys'
+                       ),
+                       ApiResult::META_BC_BOOLS => array( 'b' ),
+                       ApiResult::META_INDEXED_TAG_NAME => 'var',
+                       'a' => "foo",
+                       'b' => false,
+                       'c' => 10,
+                       'sequential_numeric_keys' => array(
+                               ApiResult::META_TYPE => 'array',
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'value',
+                               0 => 'a',
+                               1 => 'b',
+                               2 => 'c',
+                       ),
+                       'non_sequential_numeric_keys' => array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => array( 0, 1, 4 ),
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                               0 => 'a',
+                               1 => 'b',
+                               4 => 'c',
+                       ),
+                       'string_keys' => array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => array( 'one', 'two' ),
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                               'one' => 1,
+                               'two' => 2,
+                       ),
+                       'object_sequential_keys' => array(
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_KEY_NAME => 'key',
+                               ApiResult::META_PRESERVE_KEYS => array( 0, 1, 2 ),
+                               ApiResult::META_BC_BOOLS => array(),
+                               ApiResult::META_INDEXED_TAG_NAME => 'var',
+                               0 => 'a',
+                               1 => 'b',
+                               2 => 'c',
+                       ),
+               ), ApiResult::addMetadataToResultVars( $arr ) );
+       }
+
        /**
         * @covers ApiResult
         */
@@ -1133,7 +1211,8 @@ class ApiResultTest extends MediaWikiTestCase {
                        if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
                                return true;
                        }
-                       if ( preg_match( '/Use of ApiMain to ApiResult::__construct was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
+                       if ( preg_match( '/Use of ApiMain to ApiResult::__construct ' .
+                               'was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
                                return true;
                        }
                        return false;
@@ -1451,7 +1530,8 @@ class ApiResultTest extends MediaWikiTestCase {
 
                $result = new ApiResult( 8388608 );
                $result->setMainForContinuation( $main );
-               $result->beginContinuation( '||mock2', array_slice( $allModules, 0, 2 ), array( 'mock1', 'mock2' ) );
+               $result->beginContinuation( '||mock2', array_slice( $allModules, 0, 2 ),
+                       array( 'mock1', 'mock2' ) );
                try {
                        $result->setContinueParam( $allModules[1], 'm2continue', 1 );
                        $this->fail( 'Expected exception not thrown' );
@@ -1467,7 +1547,8 @@ class ApiResultTest extends MediaWikiTestCase {
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
-                               'Module \'mocklist\' called ApiContinuationManager::addContinueParam but was not passed to ApiContinuationManager::__construct',
+                               'Module \'mocklist\' called ApiContinuationManager::addContinueParam ' .
+                                       'but was not passed to ApiContinuationManager::__construct',
                                $ex->getMessage(),
                                'Expected exception'
                        );
@@ -1495,13 +1576,14 @@ class ApiResultTest extends MediaWikiTestCase {
 
                try {
                        $arr = array();
-                       ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject(
+                       ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
                                new ApiResultTestStringifiableObject()
                        ) );
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
-                               'ApiResultTestSerializableObject::serializeForApiResult() returned an object of class ApiResultTestStringifiableObject',
+                               'ApiResultTestSerializableObject::serializeForApiResult() ' .
+                                       'returned an object of class ApiResultTestStringifiableObject',
                                $ex->getMessage(),
                                'Expected exception'
                        );
@@ -1509,18 +1591,19 @@ class ApiResultTest extends MediaWikiTestCase {
 
                try {
                        $arr = array();
-                       ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject( NAN ) );
+                       ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject( NAN ) );
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
-                               'ApiResultTestSerializableObject::serializeForApiResult() returned an invalid value: Cannot add non-finite floats to ApiResult',
+                               'ApiResultTestSerializableObject::serializeForApiResult() ' .
+                                       'returned an invalid value: Cannot add non-finite floats to ApiResult',
                                $ex->getMessage(),
                                'Expected exception'
                        );
                }
 
                $arr = array();
-               ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject(
+               ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
                        array(
                                'one' => new ApiResultTestStringifiableObject( '1' ),
                                'two' => new ApiResultTestSerializableObject( 2 ),
index da62bb0..21345ac 100644 (file)
@@ -105,6 +105,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
 
                $wgRequest = new FauxRequest( $params, true, $session );
                RequestContext::getMain()->setRequest( $wgRequest );
+               RequestContext::getMain()->setUser( $wgUser );
 
                // set up local environment
                $context = $this->apiContext->newTestContext( $wgRequest, $wgUser );
index 2c2370a..e9dff9f 100644 (file)
@@ -16,7 +16,7 @@ class ApiUnblockTest extends ApiTestCase {
        /**
         * @expectedException UsageException
         */
-       public function testWithNoToken( ) {
+       public function testWithNoToken() {
                $this->doApiRequest(
                        array(
                                'action' => 'unblock',
index f74fc35..b7f7d10 100644 (file)
@@ -451,9 +451,9 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $chunkSessionKey = false;
                $resultOffset = 0;
                // Open the file:
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $handle = fopen( $filePath, "r" );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
 
                if ( $handle === false ) {
                        $this->markTestIncomplete( "could not open file: $filePath" );
@@ -461,9 +461,9 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                while ( !feof( $handle ) ) {
                        // Get the current chunk
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $chunkData = fread( $handle, $chunkSize );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        // Upload the current chunk into the $_FILE object:
                        $this->fakeUploadChunk( 'chunk', 'blob', $mimeType, $chunkData );
diff --git a/tests/phpunit/includes/api/format/ApiFormatDumpTest.php b/tests/phpunit/includes/api/format/ApiFormatDumpTest.php
deleted file mode 100644 (file)
index c0f67f8..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @group API
- * @covers ApiFormatDump
- */
-class ApiFormatDumpTest extends ApiFormatTestBase {
-
-       protected $printerName = 'dump';
-
-       public static function provideGeneralEncoding() {
-               // Sigh. Docs claim it's a boolean, but can have values 0, 1, or 2.
-               // Fortunately wfIniGetBool does the right thing.
-               if ( wfIniGetBool( 'xdebug.overload_var_dump' ) ) {
-                       return array(
-                               array( array(), 'Cannot test ApiFormatDump when xDebug overloads var_dump', array( 'SKIP' => true ) ),
-                       );
-               }
-
-               $warning = "\n  [\"warnings\"]=>\n  array(1) {\n    [\"dump\"]=>\n    array(1) {\n      [\"*\"]=>\n" .
-                       "      string(64) \"format=dump has been deprecated. Please use format=json instead.\"\n" .
-                       "    }\n  }";
-
-               return array(
-                       // Basic types
-                       array( array( null ), "array(2) {{$warning}\n  [0]=>\n  NULL\n}\n" ),
-                       array( array( true ), "array(2) {{$warning}\n  [0]=>\n  string(0) \"\"\n}\n" ),
-                       array( array( false ), "array(1) {{$warning}\n}\n" ),
-                       array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
-                               "array(2) {{$warning}\n  [0]=>\n  bool(true)\n}\n" ),
-                       array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
-                               "array(2) {{$warning}\n  [0]=>\n  bool(false)\n}\n" ),
-                       array( array( 42 ), "array(2) {{$warning}\n  [0]=>\n  int(42)\n}\n" ),
-                       array( array( 42.5 ), "array(2) {{$warning}\n  [0]=>\n  float(42.5)\n}\n" ),
-                       array( array( 1e42 ), "array(2) {{$warning}\n  [0]=>\n  float(1.0E+42)\n}\n" ),
-                       array( array( 'foo' ), "array(2) {{$warning}\n  [0]=>\n  string(3) \"foo\"\n}\n" ),
-                       array( array( 'fóo' ), "array(2) {{$warning}\n  [0]=>\n  string(4) \"fóo\"\n}\n" ),
-
-                       // Arrays
-                       array( array( array() ), "array(2) {{$warning}\n  [0]=>\n  array(0) {\n  }\n}\n" ),
-                       array( array( array( 1 ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [0]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( array( 'x' => 1 ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [\"x\"]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( array( 2 => 1 ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [2]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( (object)array() ), "array(2) {{$warning}\n  [0]=>\n  array(0) {\n  }\n}\n" ),
-                       array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [0]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [0]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [\"x\"]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
-                               "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [0]=>\n    array(2) {\n      [\"key\"]=>\n      string(1) \"x\"\n      [\"*\"]=>\n      int(1)\n    }\n  }\n}\n" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), "array(2) {{$warning}\n  [0]=>\n  array(1) {\n    [\"x\"]=>\n    int(1)\n  }\n}\n" ),
-                       array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), "array(2) {{$warning}\n  [0]=>\n  array(2) {\n    [0]=>\n    string(1) \"a\"\n    [1]=>\n    string(1) \"b\"\n  }\n}\n" ),
-
-                       // Content
-                       array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
-                               "array(2) {{$warning}\n  [\"*\"]=>\n  string(3) \"foo\"\n}\n" ),
-
-                       // BC Subelements
-                       array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
-                               "array(2) {{$warning}\n  [\"foo\"]=>\n  array(1) {\n    [\"*\"]=>\n    string(3) \"foo\"\n  }\n}\n" ),
-               );
-       }
-
-}
diff --git a/tests/phpunit/includes/api/format/ApiFormatWddxTest.php b/tests/phpunit/includes/api/format/ApiFormatWddxTest.php
deleted file mode 100644 (file)
index 0711130..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/**
- * @group API
- * @covers ApiFormatWddx
- */
-class ApiFormatWddxTest extends ApiFormatTestBase {
-
-       protected $printerName = 'wddx';
-
-       public static function provideGeneralEncoding() {
-               if ( ApiFormatWddx::useSlowPrinter() ) {
-                       return array(
-                               array( array(), 'Fast Wddx printer is unavailable', array( 'SKIP' => true ) )
-                       );
-               }
-               return self::provideEncoding();
-       }
-
-       public static function provideEncoding() {
-               $p = '<wddxPacket version=\'1.0\'><header/><data><struct><var name=\'warnings\'><struct><var name=\'wddx\'><struct><var name=\'*\'><string>format=wddx has been deprecated. Please use format=json instead.</string></var></struct></var></struct></var>';
-               $s = '</struct></data></wddxPacket>';
-
-               return array(
-                       // Basic types
-                       array( array( null ), "{$p}<var name='0'><null/></var>{$s}" ),
-                       array( array( true ), "{$p}<var name='0'><string></string></var>{$s}" ),
-                       array( array( false ), "{$p}{$s}" ),
-                       array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
-                               "{$p}<var name='0'><boolean value='true'/></var>{$s}" ),
-                       array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
-                               "{$p}<var name='0'><boolean value='false'/></var>{$s}" ),
-                       array( array( 42 ), "{$p}<var name='0'><number>42</number></var>{$s}" ),
-                       array( array( 42.5 ), "{$p}<var name='0'><number>42.5</number></var>{$s}" ),
-                       array( array( 1e42 ), "{$p}<var name='0'><number>1.0E+42</number></var>{$s}" ),
-                       array( array( 'foo' ), "{$p}<var name='0'><string>foo</string></var>{$s}" ),
-                       array( array( 'fóo' ), "{$p}<var name='0'><string>fóo</string></var>{$s}" ),
-
-                       // Arrays and objects
-                       array( array( array() ), "{$p}<var name='0'><array length='0'></array></var>{$s}" ),
-                       array( array( array( 1 ) ), "{$p}<var name='0'><array length='1'><number>1</number></array></var>{$s}" ),
-                       array( array( array( 'x' => 1 ) ), "{$p}<var name='0'><struct><var name='x'><number>1</number></var></struct></var>{$s}" ),
-                       array( array( array( 2 => 1 ) ), "{$p}<var name='0'><struct><var name='2'><number>1</number></var></struct></var>{$s}" ),
-                       array( array( (object)array() ), "{$p}<var name='0'><struct></struct></var>{$s}" ),
-                       array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), "{$p}<var name='0'><struct><var name='0'><number>1</number></var></struct></var>{$s}" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), "{$p}<var name='0'><array length='1'><number>1</number></array></var>{$s}" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), "{$p}<var name='0'><struct><var name='x'><number>1</number></var></struct></var>{$s}" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
-                               "{$p}<var name='0'><array length='1'><struct><var name='key'><string>x</string></var><var name='*'><number>1</number></var></struct></array></var>{$s}" ),
-                       array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), "{$p}<var name='0'><struct><var name='x'><number>1</number></var></struct></var>{$s}" ),
-                       array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), "{$p}<var name='0'><array length='2'><string>a</string><string>b</string></array></var>{$s}" ),
-
-                       // Content
-                       array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
-                               "{$p}<var name='*'><string>foo</string></var>{$s}" ),
-
-                       // BC Subelements
-                       array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
-                               "{$p}<var name='foo'><struct><var name='*'><string>foo</string></var></struct></var>{$s}" ),
-               );
-       }
-
-       /**
-        * @dataProvider provideEncoding
-        */
-       public function testSlowEncoding( array $data, $expect, array $params = array() ) {
-               // Adjust expectation for differences between fast and slow printers.
-               $expect = str_replace( '\'', '"', $expect );
-               $expect = str_replace( '/>', ' />', $expect );
-               $expect = '<?xml version="1.0"?>' . $expect;
-
-               $this->assertSame( $expect, $this->encodeData( $params, $data, 'ApiFormatWddxTest_SlowWddx' ) );
-       }
-}
-
-class ApiFormatWddxTest_SlowWddx extends ApiFormatWddx {
-       public static function useSlowPrinter() {
-               return true;
-       }
-}
index ce2f70d..db61bc8 100644 (file)
@@ -57,10 +57,9 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                } else {
                        $params['action'] = 'query';
                }
-               if ( $useContinue && !isset( $params['continue'] ) ) {
+               // Silence warning
+               if ( !isset( $params['continue'] ) ) {
                        $params['continue'] = '';
-               } else {
-                       $params['rawcontinue'] = '1';
                }
                $count = 0;
                $result = array();
index 5f061b5..61b992b 100644 (file)
@@ -131,7 +131,7 @@ class ApiQueryTest extends ApiTestCase {
                );
                $queryApi = new ApiQuery( $api, 'query' );
                $modules = $queryApi->getModuleManager()->getNamesWithClasses();
-               foreach( $modules as $name => $class ) {
+               foreach ( $modules as $name => $class ) {
                        $this->assertArrayHasKey(
                                $class,
                                $classes,
index 9e830f2..d5fa454 100644 (file)
@@ -87,6 +87,7 @@ STR;
 
        /**
         * Checks that the request's result matches the expected results.
+        * Assumes no rawcontinue and a complete batch.
         * @param array $values Array is a two element array( request, expected_results )
         * @param array $session
         * @param bool $appendModule
@@ -99,8 +100,9 @@ STR;
                if ( !array_key_exists( 'action', $req ) ) {
                        $req['action'] = 'query';
                }
-               if ( !array_key_exists( 'continue', $req ) ) {
-                       $req['rawcontinue'] = '1';
+               // Silence warning
+               if ( !isset( $params['continue'] ) ) {
+                       $params['continue'] = '';
                }
                foreach ( $req as &$val ) {
                        if ( is_array( $val ) ) {
@@ -108,7 +110,7 @@ STR;
                        }
                }
                $result = $this->doApiRequest( $req, $session, $appendModule, $user );
-               $this->assertResult( array( 'query' => $exp ), $result[0], $req );
+               $this->assertResult( array( 'batchcomplete' => true, 'query' => $exp ), $result[0], $req );
        }
 
        protected function assertResult( $exp, $result, $message = '' ) {
index 442e9f9..9c59e65 100644 (file)
@@ -52,7 +52,7 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                $this->makePage( 'MessageCacheTest-FullKeyTest', 'ru' );
 
                // In content language -- get base if no derivative
-               $this->makePage( 'FallbackLanguageTest-NoDervContLang', 'de', 'de/none', false );
+               $this->makePage( 'FallbackLanguageTest-NoDervContLang', 'de', 'de/none' );
        }
 
        /**
@@ -61,15 +61,14 @@ class MessageCacheTest extends MediaWikiLangTestCase {
         * @param string $title Title of page to be created
         * @param string $lang Language and content of the created page
         * @param string|null $content Content of the created page, or null for a generic string
-        * @param bool $createSubPage Set to false if a root page should be created
         */
-       protected function makePage( $title, $lang, $content = null, $createSubPage = true ) {
+       protected function makePage( $title, $lang, $content = null ) {
                global $wgContLang;
 
                if ( $content === null ) {
                        $content = $lang;
                }
-               if ( $lang !== $wgContLang->getCode() || $createSubPage ) {
+               if ( $lang !== $wgContLang->getCode() ) {
                        $title = "$title/$lang";
                }
 
index e39c382..ab35453 100644 (file)
@@ -297,16 +297,22 @@ class RecentChangeTest extends MediaWikiTestCase {
                $sep = $this->context->msg( 'colon-separator' )->text();
 
                # import/upload
+               $msg = $this->context->msg( 'import-logentry-upload', 'SomeTitle' )->plain() .
+                       $sep .
+                       $this->user_comment;
                $this->assertIRCComment(
-                       $this->context->msg( 'import-logentry-upload', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       $msg,
                        'import', 'upload',
                        array(),
                        $this->user_comment
                );
 
                # import/interwiki
+               $msg = $this->context->msg( 'import-logentry-interwiki', 'SomeTitle' )->plain() .
+                       $sep .
+                       $this->user_comment;
                $this->assertIRCComment(
-                       $this->context->msg( 'import-logentry-interwiki', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+                       $msg,
                        'import', 'interwiki',
                        array(),
                        $this->user_comment
@@ -336,6 +342,51 @@ class RecentChangeTest extends MediaWikiTestCase {
        }
        */
 
+       /**
+        * @covers RecentChange::parseParams
+        */
+       public function testParseParams() {
+               $params = array(
+                       'root' => array(
+                               'A' => 1,
+                               'B' => 'two'
+                       )
+               );
+
+               $this->assertParseParams(
+                       $params,
+                       'a:1:{s:4:"root";a:2:{s:1:"A";i:1;s:1:"B";s:3:"two";}}'
+               );
+
+               $this->assertParseParams(
+                       null,
+                       null
+               );
+
+               $this->assertParseParams(
+                       null,
+                       serialize( false )
+               );
+
+               $this->assertParseParams(
+                       null,
+                       'not-an-array'
+               );
+       }
+
+       /**
+        * @param array $expectedParseParams
+        * @param string|null $rawRcParams
+        */
+       protected function assertParseParams( $expectedParseParams, $rawRcParams ) {
+               $rc = new RecentChange;
+               $rc->setAttribs( array( 'rc_params' => $rawRcParams ) );
+
+               $actualParseParams = $rc->parseParams();
+
+               $this->assertEquals( $expectedParseParams, $actualParseParams );
+       }
+
        /**
         * @param string $expected Expected IRC text without colors codes
         * @param string $type Log type (move, delete, suppress, patrol ...)
index 06973b0..4aa3e30 100644 (file)
@@ -30,7 +30,7 @@ class HashConfigTest extends MediaWikiTestCase {
        public function testGet() {
                $conf = new HashConfig( array(
                        'one' => '1',
-               ));
+               ) );
                $this->assertEquals( '1', $conf->get( 'one' ) );
                $this->setExpectedException( 'ConfigException', 'HashConfig::get: undefined option' );
                $conf->get( 'two' );
index cccfe7b..8a9d2ab 100644 (file)
@@ -138,7 +138,7 @@ class JsonContentTest extends MediaWikiLangTestCase {
                                '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
                        ),
                        array(
-                               (object)array( '<script>alert("evil!")</script>'),
+                               (object)array( '<script>alert("evil!")</script>' ),
                                '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"' .
                                '&lt;script>alert("evil!")&lt;/script>"' .
                                '</td></tr></tbody></table>',
index b4292a6..42ea58e 100644 (file)
@@ -181,7 +181,7 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                                array( 'Tables_in_' => 'view2' ),
                                array( 'Tables_in_' => 'myview' ),
                                false  # no more rows
-                       ));
+                       ) );
                return $db;
        }
        /**
index 1abb47e..7280a97 100644 (file)
@@ -12,11 +12,11 @@ class MWDebugTest extends MediaWikiTestCase {
                }
                /** Clear log before each test */
                MWDebug::clearLog();
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
        }
 
        protected function tearDown() {
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                parent::tearDown();
        }
 
index 3bea9b3..a546bec 100644 (file)
@@ -69,11 +69,11 @@ class ArrayDiffFormatterTest extends MediaWikiTestCase {
 
                $otherTestCases = array();
                $otherTestCases[] = array(
-                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array( ), array( 'a1' ) ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array(), array( 'a1' ) ) ) ),
                        array( array( 'action' => 'add', 'new' => 'a1', 'newline' => 1 ) ),
                );
                $otherTestCases[] = array(
-                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array( ), array( 'a1', 'a2' ) ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array(), array( 'a1', 'a2' ) ) ) ),
                        array(
                                array( 'action' => 'add', 'new' => 'a1', 'newline' => 1 ),
                                array( 'action' => 'add', 'new' => 'a2', 'newline' => 2 ),
index ef0f2a9..f11fda3 100644 (file)
@@ -178,7 +178,7 @@ class MWExceptionTest extends MediaWikiTestCase {
                $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
 
                $json = json_decode(
-                       MWExceptionHandler::jsonSerializeException( new $exClass())
+                       MWExceptionHandler::jsonSerializeException( new $exClass() )
                );
                $this->assertObjectHasAttribute( $key, $json,
                        "JSON serialized exception is missing key '$key'"
index 2c7f50c..3b5347c 100644 (file)
@@ -6,7 +6,7 @@
  */
 class HtmlAutoCompleteSelectFieldTest extends MediaWikiTestCase {
 
-       var $options = array(
+       public $options = array(
                'Bulgaria'     => 'BGR',
                'Burkina Faso' => 'BFA',
                'Burundi'      => 'BDI',
index a91cc95..32b150c 100644 (file)
@@ -212,7 +212,7 @@ class ArrayUtilsTest extends PHPUnit_Framework_TestCase {
                                array(),
                                array( 1 => 1 ),
                                array( 1 ),
-                               array( 1 => 1),
+                               array( 1 => 1 ),
                        ),
                        array(
                                array(),
index 149a28c..13908b9 100644 (file)
@@ -152,9 +152,9 @@ class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase {
 
                // JSMin+'s parser will throw an exception if output is not valid JS.
                // suppression of warnings needed for stupid crap
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $parser = new JSParser();
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                $parser->parse( $minified, 'minify-test.js', 1 );
 
                $this->assertEquals(
index 9220732..a9d3cc1 100644 (file)
@@ -26,7 +26,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
        public function testClosureExpansionDisabled() {
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
-                       'args' => array( function (){ return 'unwrapped'; }, ),
+                       'args' => array( function() {
+                               return 'unwrapped';
+                       }, ),
                        'closure_expansion' => false,
                ) );
                $this->assertInstanceOf( 'Closure', $obj->args[0] );
@@ -39,7 +41,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
        public function testClosureExpansionEnabled() {
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
-                       'args' => array( function (){ return 'unwrapped'; }, ),
+                       'args' => array( function() {
+                               return 'unwrapped';
+                       }, ),
                        'closure_expansion' => true,
                ) );
                $this->assertInternalType( 'string', $obj->args[0] );
@@ -47,7 +51,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
 
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
-                       'args' => array( function (){ return 'unwrapped'; }, ),
+                       'args' => array( function() {
+                               return 'unwrapped';
+                       }, ),
                ) );
                $this->assertInternalType( 'string', $obj->args[0] );
                $this->assertSame( 'unwrapped', $obj->args[0] );
@@ -56,5 +62,7 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
 
 class ObjectFactoryTest_Fixture {
        public $args;
-       public function __construct( /*...*/ ) { $this->args = func_get_args(); }
+       public function __construct( /*...*/ ) {
+               $this->args = func_get_args();
+       }
 }
index 2440fc0..77b188c 100644 (file)
@@ -255,43 +255,43 @@ class XhprofTest extends PHPUnit_Framework_TestCase {
         */
        protected function getXhprofFixture( array $opts = array() ) {
                $xhprof = new Xhprof( $opts );
-               $xhprof->loadRawData( array (
-                       'foo==>bar' => array (
+               $xhprof->loadRawData( array(
+                       'foo==>bar' => array(
                                'ct' => 2,
                                'wt' => 57,
                                'cpu' => 92,
                                'mu' => 1896,
                                'pmu' => 0,
                        ),
-                       'foo==>strlen' => array (
+                       'foo==>strlen' => array(
                                'ct' => 2,
                                'wt' => 21,
                                'cpu' => 141,
                                'mu' => 752,
                                'pmu' => 0,
                        ),
-                       'bar==>bar@1' => array (
+                       'bar==>bar@1' => array(
                                'ct' => 1,
                                'wt' => 18,
                                'cpu' => 19,
                                'mu' => 752,
                                'pmu' => 0,
                        ),
-                       'main()==>foo' => array (
+                       'main()==>foo' => array(
                                'ct' => 1,
                                'wt' => 304,
                                'cpu' => 307,
                                'mu' => 4008,
                                'pmu' => 0,
                        ),
-                       'main()==>xhprof_disable' => array (
+                       'main()==>xhprof_disable' => array(
                                'ct' => 1,
                                'wt' => 8,
                                'cpu' => 10,
                                'mu' => 768,
                                'pmu' => 392,
                        ),
-                       'main()' => array (
+                       'main()' => array(
                                'ct' => 1,
                                'wt' => 353,
                                'cpu' => 351,
@@ -311,7 +311,7 @@ class XhprofTest extends PHPUnit_Framework_TestCase {
         */
        protected function assertArrayStructure( $struct, $actual, $label = null ) {
                $this->assertInternalType( 'array', $actual, $label );
-               $this->assertCount( count($struct), $actual, $label );
+               $this->assertCount( count( $struct ), $actual, $label );
                foreach ( $struct as $key => $type ) {
                        $this->assertArrayHasKey( $key, $actual );
                        $this->assertInternalType( $type, $actual[$key] );
index b5fd5f6..cac3b10 100644 (file)
@@ -27,34 +27,95 @@ class ComposerLockTest extends MediaWikiTestCase {
                        'wikimedia/cdb' => array(
                                'version' => '1.0.1',
                                'type' => 'library',
+                               'licenses' => array( 'GPL-2.0' ),
+                               'authors' => array(
+                                       array(
+                                               'name' => 'Tim Starling',
+                                               'email' => 'tstarling@wikimedia.org',
+                                       ),
+                                       array(
+                                               'name' => 'Chad Horohoe',
+                                               'email' => 'chad@wikimedia.org',
+                                       ),
+                               ),
+                               'description' => 'Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.',
                        ),
                        'cssjanus/cssjanus' => array(
                                'version' => '1.1.1',
                                'type' => 'library',
+                               'licenses' => array( 'Apache-2.0' ),
+                               'authors' => array(),
+                               'description' => 'Convert CSS stylesheets between left-to-right and right-to-left.',
                        ),
                        'leafo/lessphp' => array(
                                'version' => '0.5.0',
                                'type' => 'library',
+                               'licenses' => array( 'MIT', 'GPL-3.0' ),
+                               'authors' => array(
+                                       array(
+                                               'name' => 'Leaf Corcoran',
+                                               'email' => 'leafot@gmail.com',
+                                               'homepage' => 'http://leafo.net',
+                                       ),
+                               ),
+                               'description' => 'lessphp is a compiler for LESS written in PHP.',
                        ),
                        'psr/log' => array(
                                'version' => '1.0.0',
                                'type' => 'library',
+                               'licenses' => array( 'MIT' ),
+                               'authors' => array(
+                                       array(
+                                               'name' => 'PHP-FIG',
+                                               'homepage' => 'http://www.php-fig.org/',
+                                       ),
+                               ),
+                               'description' => 'Common interface for logging libraries',
                        ),
                        'oojs/oojs-ui' => array(
                                'version' => '0.6.0',
                                'type' => 'library',
+                               'licenses' => array( 'MIT' ),
+                               'authors' => array(),
+                               'description' => '',
                        ),
                        'composer/installers' => array(
                                'version' => '1.0.19',
                                'type' => 'composer-installer',
+                               'licenses' => array( 'MIT' ),
+                               'authors' => array(
+                                       array(
+                                               'name' => 'Kyle Robinson Young',
+                                               'email' => 'kyle@dontkry.com',
+                                               'homepage' => 'https://github.com/shama',
+                                       ),
+                               ),
+                               'description' => 'A multi-framework Composer library installer',
                        ),
                        'mediawiki/translate' => array(
                                'version' => '2014.12',
                                'type' => 'mediawiki-extension',
+                               'licenses' => array( 'GPL-2.0+' ),
+                               'authors' => array(
+                                       array(
+                                               'name' => 'Niklas Laxström',
+                                               'email' => 'niklas.laxstrom@gmail.com',
+                                               'role' => 'Lead nitpicker',
+                                       ),
+                                       array(
+                                               'name' => 'Siebrand Mazeland',
+                                               'email' => 's.mazeland@xs4all.nl',
+                                               'role' => 'Developer',
+                                       ),
+                               ),
+                               'description' => 'The only standard solution to translate any kind of text with an avant-garde web interface within MediaWiki, including your documentation and software',
                        ),
                        'mediawiki/universal-language-selector' => array(
                                'version' => '2014.12',
                                'type' => 'mediawiki-extension',
+                               'licenses' => array( 'GPL-2.0+', 'MIT' ),
+                               'authors' => array(),
+                               'description' => 'The primary aim is to allow users to select a language and configure its support in an easy way. Main features are language selection, input methods and web fonts.',
                        ),
                ), $lock->getInstalledDependencies(), false, true );
        }
index e58711f..cab6794 100644 (file)
@@ -17,7 +17,7 @@ abstract class LogFormatterTestCase extends MediaWikiLangTestCase {
                        'Action text is equal to expected text'
                );
 
-               $this->assertEquals(
+               $this->assertSame( // ensure types and array key order
                        $extra['api'],
                        self::removeApiMetaData( $formatter->formatParametersForApi() ),
                        'Api log params is equal to expected array'
index 5a0b906..2ff0ddf 100644 (file)
@@ -25,9 +25,9 @@ class MergeLogFormatterTest extends LogFormatterTestCase {
                                array(
                                        'text' => 'User merged OldPage into NewPage (revisions up to 16:07, 4 August 2014)',
                                        'api' => array(
-                                               'mergepoint' => '2014-08-04T16:07:10Z',
                                                'dest_ns' => 0,
                                                'dest_title' => 'NewPage',
+                                               'mergepoint' => '2014-08-04T16:07:10Z',
                                        ),
                                ),
                        ),
@@ -49,9 +49,9 @@ class MergeLogFormatterTest extends LogFormatterTestCase {
                                        'legacy' => true,
                                        'text' => 'User merged OldPage into NewPage (revisions up to 16:07, 4 August 2014)',
                                        'api' => array(
-                                               'mergepoint' => '2014-08-04T16:07:10Z',
                                                'dest_ns' => 0,
                                                'dest_title' => 'NewPage',
+                                               'mergepoint' => '2014-08-04T16:07:10Z',
                                        ),
                                ),
                        ),
index 13dd839..5b03370 100644 (file)
@@ -71,7 +71,7 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
                                        'namespace' => NS_USER,
                                        'title' => 'New user',
                                        'params' => array(
-                                               '4::userid' => '1',
+                                               '4::userid' => 1,
                                        ),
                                ),
                                array(
@@ -109,7 +109,7 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
                                        'namespace' => NS_USER,
                                        'title' => 'UTSysop',
                                        'params' => array(
-                                               '4::userid' => '1',
+                                               '4::userid' => 1,
                                        ),
                                ),
                                array(
@@ -147,7 +147,7 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
                                        'namespace' => NS_USER,
                                        'title' => 'UTSysop',
                                        'params' => array(
-                                               '4::userid' => '1',
+                                               '4::userid' => 1,
                                        ),
                                ),
                                array(
@@ -185,7 +185,7 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
                                        'namespace' => NS_USER,
                                        'title' => 'New user',
                                        'params' => array(
-                                               '4::userid' => '1',
+                                               '4::userid' => 1,
                                        ),
                                ),
                                array(
index 41330f4..adbc977 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @group Media
  */
-class ExifBitmapTest extends MediaWikiTestCase {
+class ExifBitmapTest extends MediaWikiMediaTestCase {
 
        /**
         * @var ExifBitmapHandler
@@ -143,4 +143,41 @@ class ExifBitmapTest extends MediaWikiTestCase {
                $res = $this->handler->convertMetadataVersion( $metadata, 1 );
                $this->assertEquals( $expected, $res );
        }
+
+       /**
+        * @dataProvider provideSwappingICCProfile
+        * @covers BitmapHandler::swapICCProfile
+        */
+       public function testSwappingICCProfile( $sourceFilename, $controlFilename, $newProfileFilename, $oldProfileName ) {
+               global $wgExiftool;
+
+               if ( !$wgExiftool || !is_file( $wgExiftool ) ) {
+                       $this->markTestSkipped( "Exiftool not installed, cannot test ICC profile swapping" );
+               }
+
+               $this->setMwGlobals( 'wgUseTinyRGBForJPGThumbnails', true );
+
+               $sourceFilepath = $this->filePath . $sourceFilename;
+               $controlFilepath = $this->filePath . $controlFilename;
+               $profileFilepath = $this->filePath . $newProfileFilename;
+               $filepath = $this->getNewTempFile();
+
+               copy( $sourceFilepath, $filepath );
+
+               $file = $this->dataFile( $sourceFilename, 'image/jpeg' );
+               $this->handler->swapICCProfile( $filepath, $oldProfileName, $profileFilepath );
+
+               $this->assertEquals( sha1( file_get_contents( $filepath ) ), sha1( file_get_contents( $controlFilepath ) ) );
+       }
+
+       public function provideSwappingICCProfile() {
+               return array(
+                       // File with sRGB should end up with TinyRGB
+                       array( 'srgb.jpg', 'tinyrgb.jpg', 'tinyrgb.icc', 'IEC 61966-2.1 Default RGB colour space - sRGB' ),
+                       // File with TinyRGB should be left unchanged
+                       array( 'tinyrgb.jpg', 'tinyrgb.jpg', 'tinyrgb.icc', 'IEC 61966-2.1 Default RGB colour space - sRGB' ),
+                       // File with no profile should be left unchanged
+                       array( 'test.jpg', 'test.jpg', 'tinyrgb.icc', 'IEC 61966-2.1 Default RGB colour space - sRGB' )
+               );
+       }
 }
diff --git a/tests/phpunit/includes/media/WebPTest.php b/tests/phpunit/includes/media/WebPTest.php
new file mode 100644 (file)
index 0000000..d36710a
--- /dev/null
@@ -0,0 +1,127 @@
+<?php
+class WebPHandlerTest extends MediaWikiTestCase {
+       public function setUp() {
+               parent::setUp();
+               // Allocated file for testing
+               $this->tempFileName = tempnam( wfTempDir(), 'WEBP' );
+       }
+       public function tearDown() {
+               parent::tearDown();
+               unlink( $this->tempFileName );
+       }
+       /**
+        * @dataProvider provideTestExtractMetaData
+        */
+       public function testExtractMetaData( $header, $expectedResult ) {
+               // Put header into file
+               file_put_contents( $this->tempFileName, $header );
+
+               $this->assertEquals( $expectedResult, WebPHandler::extractMetadata( $this->tempFileName ) );
+       }
+       public function provideTestExtractMetaData() {
+               return array(
+                       // Files from https://developers.google.com/speed/webp/gallery2
+                       array( "\x52\x49\x46\x46\x90\x68\x01\x00\x57\x45\x42\x50\x56\x50\x38\x4C\x83\x68\x01\x00\x2F\x8F\x01\x4B\x10\x8D\x38\x6C\xDB\x46\x92\xE0\xE0\x82\x7B\x6C",
+                               array( 'compression' => 'lossless', 'width' => 400, 'height' => 301 ) ),
+                       array( "\x52\x49\x46\x46\x64\x5B\x00\x00\x57\x45\x42\x50\x56\x50\x38\x58\x0A\x00\x00\x00\x10\x00\x00\x00\x8F\x01\x00\x2C\x01\x00\x41\x4C\x50\x48\xE5\x0E",
+                               array( 'compression' => 'unknown', 'animated' => false, 'transparency' => true, 'width' => 400, 'height' => 301) ),
+                       array( "\x52\x49\x46\x46\xA8\x72\x00\x00\x57\x45\x42\x50\x56\x50\x38\x4C\x9B\x72\x00\x00\x2F\x81\x81\x62\x10\x8D\x40\x8C\x24\x39\x6E\x73\x73\x38\x01\x96",
+                               array( 'compression' => 'lossless', 'width' => 386, 'height' => 395 ) ),
+                       array( "\x52\x49\x46\x46\xE0\x42\x00\x00\x57\x45\x42\x50\x56\x50\x38\x58\x0A\x00\x00\x00\x10\x00\x00\x00\x81\x01\x00\x8A\x01\x00\x41\x4C\x50\x48\x56\x10",
+                               array( 'compression' => 'unknown', 'animated' => false, 'transparency' => true, 'width' => 386, 'height' => 395 ) ),
+                       array( "\x52\x49\x46\x46\x70\x61\x02\x00\x57\x45\x42\x50\x56\x50\x38\x4C\x63\x61\x02\x00\x2F\x1F\xC3\x95\x10\x8D\xC8\x72\xDB\xC8\x92\x24\xD8\x91\xD9\x91",
+                               array( 'compression' => 'lossless', 'width' => 800, 'height' => 600 ) ),
+                       array( "\x52\x49\x46\x46\x1C\x1D\x01\x00\x57\x45\x42\x50\x56\x50\x38\x58\x0A\x00\x00\x00\x10\x00\x00\x00\x1F\x03\x00\x57\x02\x00\x41\x4C\x50\x48\x25\x8B",
+                               array( 'compression' => 'unknown', 'animated' => false, 'transparency' => true, 'width' => 800, 'height' => 600 ) ),
+                       array( "\x52\x49\x46\x46\xFA\xC5\x00\x00\x57\x45\x42\x50\x56\x50\x38\x4C\xEE\xC5\x00\x00\x2F\xA4\x81\x28\x10\x8D\x40\x68\x24\xC9\x91\xA4\xAE\xF3\x97\x75",
+                               array( 'compression' => 'lossless', 'width' => 421, 'height' => 163 ) ),
+                       array( "\x52\x49\x46\x46\xF6\x5D\x00\x00\x57\x45\x42\x50\x56\x50\x38\x58\x0A\x00\x00\x00\x10\x00\x00\x00\xA4\x01\x00\xA2\x00\x00\x41\x4C\x50\x48\x38\x1A",
+                               array( 'compression' => 'unknown', 'animated' => false, 'transparency' => true, 'width' => 421, 'height' => 163 ) ),
+                       array( "\x52\x49\x46\x46\xC4\x96\x01\x00\x57\x45\x42\x50\x56\x50\x38\x4C\xB8\x96\x01\x00\x2F\x2B\xC1\x4A\x10\x11\x87\x6D\xDB\x48\x12\xFC\x60\xB0\x83\x24",
+                               array( 'compression' => 'lossless', 'width' => 300, 'height' => 300 ) ),
+                       array( "\x52\x49\x46\x46\x0A\x11\x01\x00\x57\x45\x42\x50\x56\x50\x38\x58\x0A\x00\x00\x00\x10\x00\x00\x00\x2B\x01\x00\x2B\x01\x00\x41\x4C\x50\x48\x67\x6E",
+                               array( 'compression' => 'unknown', 'animated' => false, 'transparency' => true, 'width' => 300, 'height' => 300 ) ),
+
+                       // Lossy files from https://developers.google.com/speed/webp/gallery1
+                       array( "\x52\x49\x46\x46\x68\x76\x00\x00\x57\x45\x42\x50\x56\x50\x38\x20\x5C\x76\x00\x00\xD2\xBE\x01\x9D\x01\x2A\x26\x02\x70\x01\x3E\xD5\x4E\x97\x43\xA2",
+                               array( 'compression' => 'lossy', 'width' => 550, 'height' => 368 ) ),
+                       array( "\x52\x49\x46\x46\xB0\xEC\x00\x00\x57\x45\x42\x50\x56\x50\x38\x20\xA4\xEC\x00\x00\xB2\x4B\x02\x9D\x01\x2A\x26\x02\x94\x01\x3E\xD1\x50\x96\x46\x26",
+                               array( 'compression' => 'lossy', 'width' => 550, 'height' => 404 ) ),
+                       array( "\x52\x49\x46\x46\x7A\x19\x03\x00\x57\x45\x42\x50\x56\x50\x38\x20\x6E\x19\x03\x00\xB2\xF8\x09\x9D\x01\x2A\x00\x05\xD0\x02\x3E\xAD\x46\x99\x4A\xA5",
+                               array( 'compression' => 'lossy', 'width' => 1280, 'height' => 720 ) ),
+                       array( "\x52\x49\x46\x46\x44\xB3\x02\x00\x57\x45\x42\x50\x56\x50\x38\x20\x38\xB3\x02\x00\x52\x57\x06\x9D\x01\x2A\x00\x04\x04\x03\x3E\xA5\x44\x96\x49\x26",
+                               array( 'compression' => 'lossy', 'width' => 1024, 'height' => 772) ),
+                       array( "\x52\x49\x46\x46\x02\x43\x01\x00\x57\x45\x42\x50\x56\x50\x38\x20\xF6\x42\x01\x00\x12\xC0\x05\x9D\x01\x2A\x00\x04\xF0\x02\x3E\x79\x34\x93\x47\xA4",
+                               array( 'compression' => 'lossy', 'width' => 1024, 'height' => 752) ),
+
+                       // Animated file from https://groups.google.com/a/chromium.org/d/topic/blink-dev/Y8tRC4mdQz8/discussion
+                       array( "\x52\x49\x46\x46\xD0\x0B\x02\x00\x57\x45\x42\x50\x56\x50\x38\x58\x0A\x00\x00\x00\x12\x00\x00\x00\x3F\x01\x00\x3F\x01\x00\x41\x4E",
+                               array( 'compression' => 'unknown', 'animated' => true, 'transparency' => true, 'width' => 320, 'height' => 320 ) ),
+
+                       // Error cases
+                       array( '', false ),
+                       array( '                                    ', false ),
+                       array( 'RIFF                                ', false ),
+                       array( 'RIFF1234WEBP                        ', false ),
+                       array( 'RIFF1234WEBPVP8                     ', false ),
+                       array( 'RIFF1234WEBPVP8L                    ', false ),
+               );
+       }
+
+       /**
+        * @dataProvider provideTestWithFileExtractMetaData
+        */
+       public function testWithFileExtractMetaData( $filename, $expectedResult ) {
+               $this->assertEquals( $expectedResult, WebPHandler::extractMetadata( $filename ) );
+       }
+       public function provideTestWithFileExtractMetaData() {
+               return array(
+                               array( __DIR__ . '/../../data/media/2_webp_ll.webp',
+                                       array( 'compression' => 'lossless', 'width' => 386, 'height' => 395 ) ),
+                               array( __DIR__ . '/../../data/media/2_webp_a.webp',
+                                       array( 'compression' => 'lossy', 'animated' => false, 'transparency' => true, 'width' => 386, 'height' => 395 ) ),
+               );
+       }
+
+       /**
+        * @dataProvider provideTestGetImageSize
+        */
+       public function testGetImageSize( $path, $expectedResult ) {
+               $handler = new WebPHandler();
+               $this->assertEquals( $expectedResult, $handler->getImageSize( null, $path ) );
+       }
+       public function provideTestGetImageSize() {
+               return array(
+                       // Public domain files from https://developers.google.com/speed/webp/gallery2
+                       array( __DIR__ . '/../../data/media/2_webp_a.webp', array( 386, 395 ) ),
+                       array( __DIR__ . '/../../data/media/2_webp_ll.webp', array( 386, 395 ) ),
+                       array( __DIR__ . '/../../data/media/webp_animated.webp', array( 300, 225 ) ),
+
+                       // Error cases
+                       array( __FILE__, false ),
+               );
+       }
+
+       /**
+        * Tests the WebP MIME detection. This should really be a separate test, but sticking it
+        * here for now.
+        *
+        * @dataProvider provideTestGetMimeType
+        */
+       public function testGuessMimeType( $path ) {
+               $mime = MimeMagic::singleton();
+               $this->assertEquals( 'image/webp', $mime->guessMimeType( $path, false ) );
+       }
+       public function provideTestGetMimeType() {
+               return array(
+                               // Public domain files from https://developers.google.com/speed/webp/gallery2
+                               array( __DIR__ . '/../../data/media/2_webp_a.webp' ),
+                               array( __DIR__ . '/../../data/media/2_webp_ll.webp' ),
+                               array( __DIR__ . '/../../data/media/webp_animated.webp' ),
+               );
+       }
+}
+
+/* Python code to extract a header and convert to PHP format:
+ * print '"%s"' % ''.join( '\\x%02X' % ord(c) for c in urllib.urlopen(url).read(36) )
+ */
diff --git a/tests/phpunit/includes/objectcache/ReplicatedBagOStuffTest.php b/tests/phpunit/includes/objectcache/ReplicatedBagOStuffTest.php
new file mode 100644 (file)
index 0000000..a419f5b
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+class ReplicatedBagOStuffTest extends MediaWikiTestCase {
+       /** @var HashBagOStuff */
+       private $writeCache;
+       /** @var HashBagOStuff */
+       private $readCache;
+       /** @var ReplicatedBagOStuff */
+       private $cache;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->writeCache = new HashBagOStuff();
+               $this->readCache = new HashBagOStuff();
+               $this->cache = new ReplicatedBagOStuff( array(
+                       'writeFactory' => $this->writeCache,
+                       'readFactory' => $this->readCache,
+               ) );
+       }
+
+       /**
+        * @covers ReplicatedBagOStuff::set
+        */
+       public function testSet() {
+               $key = wfRandomString();
+               $value = wfRandomString();
+               $this->cache->set( $key, $value );
+
+               // Write to master.
+               $this->assertEquals( $this->writeCache->get( $key ), $value );
+               // Don't write to slave. Replication is deferred to backend.
+               $this->assertEquals( $this->readCache->get( $key ), false );
+       }
+
+       /**
+        * @covers ReplicatedBagOStuff::get
+        */
+       public function testGet() {
+               $key = wfRandomString();
+
+               $write = wfRandomString();
+               $this->writeCache->set( $key, $write );
+               $read = wfRandomString();
+               $this->readCache->set( $key, $read );
+
+               // Read from slave.
+               $this->assertEquals( $this->cache->get( $key ), $read );
+       }
+
+       /**
+        * @covers ReplicatedBagOStuff::get
+        */
+       public function testGetAbsent() {
+               $key = wfRandomString();
+               $value = wfRandomString();
+               $this->writeCache->set( $key, $value );
+
+               // Don't read from master. No failover if value is absent.
+               $this->assertEquals( $this->cache->get( $key ), false );
+       }
+}
index 3e284c8..10f64be 100644 (file)
@@ -66,9 +66,9 @@ class WANObjectCacheTest extends MediaWikiTestCase {
 
        public function testSetOver() {
                $key = wfRandomString();
-               for ( $i=0; $i<3; ++$i ) {
+               for ( $i = 0; $i < 3; ++$i ) {
                        $value = wfRandomString();
-                       $this->cache->set($key, $value, 3);
+                       $this->cache->set( $key, $value, 3 );
 
                        $this->assertEquals( $this->cache->get( $key ), $value );
                }
@@ -229,8 +229,10 @@ class WANObjectCacheTest extends MediaWikiTestCase {
        public function testTouchKeys() {
                $key = wfRandomString();
 
+               $priorTime = microtime( true );
+               usleep( 1 );
                $t0 = $this->cache->getCheckKeyTime( $key );
-               $this->assertFalse( $t0, 'Check key time is false' );
+               $this->assertGreaterThanOrEqual( $priorTime, $t0, 'Check key auto-created' );
 
                $priorTime = microtime( true );
                usleep( 1 );
@@ -249,4 +251,4 @@ class WANObjectCacheTest extends MediaWikiTestCase {
                $t4 = $this->cache->getCheckKeyTime( $key );
                $this->assertEquals( $t3, $t4, 'Check key time did not change' );
        }
-}
\ No newline at end of file
+}
diff --git a/tests/phpunit/includes/password/PasswordPolicyChecksTest.php b/tests/phpunit/includes/password/PasswordPolicyChecksTest.php
new file mode 100644 (file)
index 0000000..af34282
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+/**
+ * Testing password-policy check functions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class PasswordPolicyChecksTest extends MediaWikiTestCase {
+
+       /**
+        * @covers PasswordPolicyChecks::checkMinimalPasswordLength
+        */
+       public function testCheckMinimalPasswordLength() {
+               $statusOK = PasswordPolicyChecks::checkMinimalPasswordLength(
+                       3, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertTrue( $statusOK->isGood(), 'Password is longer than minimal policy' );
+               $statusShort = PasswordPolicyChecks::checkMinimalPasswordLength(
+                       10, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertFalse(
+                       $statusShort->isGood(),
+                       'Password is shorter than minimal policy'
+               );
+               $this->assertTrue(
+                       $statusShort->isOk(),
+                       'Password is shorter than minimal policy, not fatal'
+               );
+       }
+
+       /**
+        * @covers PasswordPolicyChecks::checkMinimumPasswordLengthToLogin
+        */
+       public function testCheckMinimumPasswordLengthToLogin() {
+               $statusOK = PasswordPolicyChecks::checkMinimumPasswordLengthToLogin(
+                       3, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertTrue( $statusOK->isGood(), 'Password is longer than minimal policy' );
+               $statusShort = PasswordPolicyChecks::checkMinimumPasswordLengthToLogin(
+                       10, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertFalse(
+                       $statusShort->isGood(),
+                       'Password is shorter than minimum login policy'
+               );
+               $this->assertFalse(
+                       $statusShort->isOk(),
+                       'Password is shorter than minimum login policy, fatal'
+               );
+       }
+
+       /**
+        * @covers PasswordPolicyChecks::checkMaximalPasswordLength
+        */
+       public function testCheckMaximalPasswordLength() {
+               $statusOK = PasswordPolicyChecks::checkMaximalPasswordLength(
+                       100, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertTrue( $statusOK->isGood(), 'Password is shorter than maximal policy' );
+               $statusLong = PasswordPolicyChecks::checkMaximalPasswordLength(
+                       4, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertFalse( $statusLong->isGood(),
+                       'Password is longer than maximal policy'
+               );
+               $this->assertFalse( $statusLong->isOk(),
+                       'Password is longer than maximal policy, fatal'
+               );
+       }
+
+       /**
+        * @covers PasswordPolicyChecks::checkPasswordCannotMatchUsername
+        */
+       public function testCheckPasswordCannotMatchUsername() {
+               $statusOK = PasswordPolicyChecks::checkPasswordCannotMatchUsername(
+                       1, // policy value
+                       User::newFromName( 'user' ), // User
+                       'password'  // password
+               );
+               $this->assertTrue( $statusOK->isGood(), 'Password does not match username' );
+               $statusLong = PasswordPolicyChecks::checkPasswordCannotMatchUsername(
+                       1, // policy value
+                       User::newFromName( 'user' ), // User
+                       'user'  // password
+               );
+               $this->assertFalse( $statusLong->isGood(), 'Password matches username' );
+               $this->assertTrue( $statusLong->isOk(), 'Password matches username, not fatal' );
+       }
+
+       /**
+        * @covers PasswordPolicyChecks::checkPasswordCannotMatchBlacklist
+        */
+       public function testCheckPasswordCannotMatchBlacklist() {
+               $statusOK = PasswordPolicyChecks::checkPasswordCannotMatchBlacklist(
+                       true, // policy value
+                       User::newFromName( 'Username' ), // User
+                       'AUniquePassword'  // password
+               );
+               $this->assertTrue( $statusOK->isGood(), 'Password is not on blacklist' );
+               $statusLong = PasswordPolicyChecks::checkPasswordCannotMatchBlacklist(
+                       true, // policy value
+                       User::newFromName( 'Useruser1' ), // User
+                       'Passpass1'  // password
+               );
+               $this->assertFalse( $statusLong->isGood(), 'Password matches blacklist' );
+               $this->assertTrue( $statusLong->isOk(), 'Password matches blacklist, not fatal' );
+       }
+
+}
diff --git a/tests/phpunit/includes/password/UserPasswordPolicyTest.php b/tests/phpunit/includes/password/UserPasswordPolicyTest.php
new file mode 100644 (file)
index 0000000..ce4e30a
--- /dev/null
@@ -0,0 +1,234 @@
+<?php
+/**
+ * Testing for password-policy enforcement, based on a user's groups.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 UserPasswordPolicyTest extends MediaWikiTestCase {
+
+       protected $policies = array(
+               'checkuser' => array(
+                       'MinimalPasswordLength' => 10,
+                       'MinimumPasswordLengthToLogin' => 6,
+                       'PasswordCannotMatchUsername' => true,
+               ),
+               'sysop' => array(
+                       'MinimalPasswordLength' => 8,
+                       'MinimumPasswordLengthToLogin' => 1,
+                       'PasswordCannotMatchUsername' => true,
+               ),
+               'default' => array(
+                       'MinimalPasswordLength' => 4,
+                       'MinimumPasswordLengthToLogin' => 1,
+                       'PasswordCannotMatchBlacklist' => true,
+                       'MaximalPasswordLength' => 4096,
+               ),
+       );
+
+       protected $checks = array(
+               'MinimalPasswordLength' => 'PasswordPolicyChecks::checkMinimalPasswordLength',
+               'MinimumPasswordLengthToLogin' => 'PasswordPolicyChecks::checkMinimumPasswordLengthToLogin',
+               'PasswordCannotMatchUsername' => 'PasswordPolicyChecks::checkPasswordCannotMatchUsername',
+               'PasswordCannotMatchBlacklist' => 'PasswordPolicyChecks::checkPasswordCannotMatchBlacklist',
+               'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength',
+       );
+
+       private function getUserPasswordPolicy() {
+               return new UserPasswordPolicy( $this->policies, $this->checks );
+       }
+
+       /**
+        * @covers UserPasswordPolicy::getPoliciesForUser
+        */
+       public function testGetPoliciesForUser() {
+
+               $upp = $this->getUserPasswordPolicy();
+
+               $user = User::newFromName( 'TestUserPolicy' );
+               $user->addGroup( 'sysop' );
+
+               $this->assertArrayEquals(
+                       array(
+                               'MinimalPasswordLength' => 8,
+                               'MinimumPasswordLengthToLogin' => 1,
+                               'PasswordCannotMatchUsername' => 1,
+                               'PasswordCannotMatchBlacklist' => true,
+                               'MaximalPasswordLength' => 4096,
+                       ),
+                       $upp->getPoliciesForUser( $user )
+               );
+       }
+
+       /**
+        * @covers UserPasswordPolicy::getPoliciesForGroups
+        */
+       public function testGetPoliciesForGroups() {
+               $effective = UserPasswordPolicy::getPoliciesForGroups(
+                       $this->policies,
+                       array( 'user', 'checkuser' ),
+                       $this->policies['default']
+               );
+
+               $this->assertArrayEquals(
+                       array(
+                               'MinimalPasswordLength' => 10,
+                               'MinimumPasswordLengthToLogin' => 6,
+                               'PasswordCannotMatchUsername' => true,
+                               'PasswordCannotMatchBlacklist' => true,
+                               'MaximalPasswordLength' => 4096,
+                       ),
+                       $effective
+               );
+       }
+
+       /**
+        * @dataProvider provideCheckUserPassword
+        * @covers UserPasswordPolicy::checkUserPassword
+        */
+       public function testCheckUserPassword( $username, $groups, $password, $valid, $ok, $msg ) {
+
+               $upp = $this->getUserPasswordPolicy();
+
+               $user = User::newFromName( $username );
+               foreach ( $groups as $group ) {
+                       $user->addGroup( $group );
+               }
+
+               $status = $upp->checkUserPassword( $user, $password );
+               $this->assertSame( $valid, $status->isGood(), $msg . ' - password valid' );
+               $this->assertSame( $ok, $status->isOk(), $msg . ' - can login' );
+       }
+
+       public function provideCheckUserPassword() {
+               return array(
+                       array(
+                               'PassPolicyUser',
+                               array(),
+                               '',
+                               false,
+                               false,
+                               'No groups, default policy, password too short to login'
+                       ),
+                       array(
+                               'PassPolicyUser',
+                               array( 'user' ),
+                               'aaa',
+                               false,
+                               true,
+                               'Default policy, short password'
+                       ),
+                       array(
+                               'PassPolicyUser',
+                               array( 'sysop' ),
+                               'abcdabcdabcd',
+                               true,
+                               true,
+                               'Sysop with good password'
+                       ),
+                       array(
+                               'PassPolicyUser',
+                               array( 'sysop' ),
+                               'abcd',
+                               false,
+                               true,
+                               'Sysop with short password'
+                       ),
+                       array(
+                               'PassPolicyUser',
+                               array( 'sysop', 'checkuser' ),
+                               'abcdabcd',
+                               false,
+                               true,
+                               'Checkuser with short password'
+                       ),
+                       array(
+                               'PassPolicyUser',
+                               array( 'sysop', 'checkuser' ),
+                               'abcd',
+                               false,
+                               false,
+                               'Checkuser with too short password to login'
+                       ),
+                       array(
+                               'Useruser',
+                               array( 'user' ),
+                               'Passpass',
+                               false,
+                               true,
+                               'Username & password on blacklist'
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMaxOfPolicies
+        * @covers UserPasswordPolicy::maxOfPolicies
+        */
+       public function testMaxOfPolicies( $p1, $p2, $max, $msg ) {
+               $this->assertArrayEquals(
+                       $max,
+                       UserPasswordPolicy::maxOfPolicies( $p1, $p2 ),
+                       $msg
+               );
+       }
+
+       public function provideMaxOfPolicies() {
+               return array(
+                       array(
+                               array( 'MinimalPasswordLength' => 8 ), //p1
+                               array( 'MinimalPasswordLength' => 2 ), //p2
+                               array( 'MinimalPasswordLength' => 8 ), //max
+                               'Basic max in p1'
+                       ),
+                       array(
+                               array( 'MinimalPasswordLength' => 2 ), //p1
+                               array( 'MinimalPasswordLength' => 8 ), //p2
+                               array( 'MinimalPasswordLength' => 8 ), //max
+                               'Basic max in p2'
+                       ),
+                       array(
+                               array( 'MinimalPasswordLength' => 8 ), //p1
+                               array(
+                                       'MinimalPasswordLength' => 2,
+                                       'PasswordCannotMatchUsername' => 1,
+                               ), //p2
+                               array(
+                                       'MinimalPasswordLength' => 8,
+                                       'PasswordCannotMatchUsername' => 1,
+                               ), //max
+                               'Missing items in p1'
+                       ),
+                       array(
+                               array(
+                                       'MinimalPasswordLength' => 8,
+                                       'PasswordCannotMatchUsername' => 1,
+                               ), //p1
+                               array(
+                                       'MinimalPasswordLength' => 2,
+                               ), //p2
+                               array(
+                                       'MinimalPasswordLength' => 8,
+                                       'PasswordCannotMatchUsername' => 1,
+                               ), //max
+                               'Missing items in p2'
+                       ),
+               );
+       }
+
+}
index 2df5568..a79c9a8 100644 (file)
@@ -14,7 +14,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
         *
         * @var array
         */
-       static $default = array(
+       public static $default = array(
                'name' => 'FooBar',
        );
 
diff --git a/tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php b/tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php
new file mode 100644 (file)
index 0000000..0d11f62
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class DerivativeResourceLoaderContextTest extends PHPUnit_Framework_TestCase {
+
+       protected static function getResourceLoaderContext() {
+               $resourceLoader = new ResourceLoader();
+               $request = new FauxRequest( array(
+                               'lang' => 'zh',
+                               'modules' => 'test.context',
+                               'only' => 'scripts',
+                               'skin' => 'fallback',
+                               'target' => 'test',
+               ) );
+               return new ResourceLoaderContext( $resourceLoader, $request );
+       }
+
+       public function testGet() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $this->assertEquals( $derived->getLanguage(), 'zh' );
+               $this->assertEquals( $derived->getModules(), array( 'test.context' ) );
+               $this->assertEquals( $derived->getOnly(), 'scripts' );
+               $this->assertEquals( $derived->getSkin(), 'fallback' );
+               $this->assertEquals( $derived->getHash(), 'zh|ltr|fallback||||||scripts|' );
+       }
+
+       public function testSetLanguage() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setLanguage( 'nl' );
+               $this->assertEquals( $derived->getLanguage(), 'nl' );
+
+               $derived->setLanguage( 'he' );
+               $this->assertEquals( $derived->getDirection(), 'rtl' );
+       }
+
+       public function testSetModules() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setModules( array( 'test.override' ) );
+               $this->assertEquals( $derived->getModules(), array( 'test.override' ) );
+       }
+
+       public function testSetOnly() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setOnly( 'styles' );
+               $this->assertEquals( $derived->getOnly(), 'styles' );
+
+               $derived->setOnly( null );
+               $this->assertEquals( $derived->getOnly(), null );
+       }
+
+       public function testSetSkin() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setSkin( 'override' );
+               $this->assertEquals( $derived->getSkin(), 'override' );
+       }
+
+       public function testGetHash() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setLanguage( 'nl' );
+               // Assert that subclass is able to clear parent class "hash" member
+               $this->assertEquals( $derived->getHash(), 'nl|ltr|fallback||||||scripts|' );
+       }
+
+}
index 358d2a1..9d97b28 100644 (file)
@@ -158,7 +158,7 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
         * @covers ResourceLoaderFileModule::getStyles
         * @covers ResourceLoaderFileModule::getStyleFiles
         */
-       public function testMixedCssAnnotations(  ) {
+       public function testMixedCssAnnotations() {
                $basePath = __DIR__ . '/../../data/css';
                $testModule = new ResourceLoaderFileModule( array(
                        'localBasePath' => $basePath,
index 72a2d6a..490f5c6 100644 (file)
@@ -23,7 +23,7 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ]
 ] );',
                        ) ),
@@ -40,17 +40,17 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.group.foo",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-foo"
     ],
     [
         "test.group.bar",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-bar"
     ]
@@ -68,7 +68,7 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ]
 ] );'
                        ) ),
@@ -90,7 +90,7 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         null,
         "example"
@@ -126,11 +126,11 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.x.core",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.x.polyfill",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         null,
         null,
@@ -138,7 +138,7 @@ mw.loader.addSource( {
     ],
     [
         "test.y.polyfill",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         null,
         null,
@@ -146,7 +146,7 @@ mw.loader.addSource( {
     ],
     [
         "test.z.foo",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             0,
             1,
@@ -222,36 +222,36 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.x.core",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.x.util",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             1
         ]
     ],
     [
         "test.x.foo",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             1
         ]
     ],
     [
         "test.x.bar",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             2
         ]
     ],
     [
         "test.x.quux",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             3,
             4,
@@ -260,25 +260,25 @@ mw.loader.addSource( {
     ],
     [
         "test.group.foo.1",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-foo"
     ],
     [
         "test.group.foo.2",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-foo"
     ],
     [
         "test.group.bar.1",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-bar"
     ],
     [
         "test.group.bar.2",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-bar",
         "example"
@@ -344,8 +344,8 @@ mw.loader.addSource( {
                $this->assertEquals(
 'mw.loader.addSource({"local":"/w/load.php"});'
 . 'mw.loader.register(['
-. '["test.blank","XyCC+PSK"],'
-. '["test.min","XyCC+PSK",[0],null,null,'
+. '["test.blank","wvTifjse"],'
+. '["test.min","wvTifjse",[0],null,null,'
 . '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
 . ']]);',
                        $module->getModuleRegistrations( $context ),
@@ -367,11 +367,11 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.min",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             0
         ],
index ca7307e..cc20e7f 100644 (file)
@@ -16,7 +16,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                                },
                        ),
                        'wgResourceLoaderLESSImportPaths' => array(
-                               dirname( dirname( __DIR__  ) ) . '/data/less/common',
+                               dirname( dirname( __DIR__ ) ) . '/data/less/common',
                        ),
                        'wgResourceLoaderLESSVars' => array(
                                'foo'  => '2px',
index 7974ee9..8cefec7 100644 (file)
@@ -109,39 +109,27 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                        array( array(), 'test1', true ),
                        // 'site' module with a non-empty page
                        array(
-                               array(
-                                       'MediaWiki:Common.js' => array(
-                                               'timestamp' => 123456789,
-                                               'length' => 1234
-                                       )
-                               ), 'site', false,
+                               array( 'MediaWiki:Common.js' => array( 'rev_sha1' => 'dmh6qn', 'rev_len' => 1234 ) ),
+                               'site',
+                               false,
                        ),
                        // 'site' module with an empty page
                        array(
-                               array(
-                                       'MediaWiki:Monobook.js' => array(
-                                               'timestamp' => 987654321,
-                                               'length' => 0,
-                                       ),
-                               ), 'site', false,
+                               array( 'MediaWiki:Foo.js' => array( 'rev_sha1' => 'phoi', 'rev_len' => 0 ) ),
+                               'site',
+                               false,
                        ),
                        // 'user' module with a non-empty page
                        array(
-                               array(
-                                       'User:FooBar/common.js' => array(
-                                               'timestamp' => 246813579,
-                                               'length' => 25,
-                                       ),
-                               ), 'user', false,
+                               array( 'User:Example/common.js' => array( 'rev_sha1' => 'j7ssba', 'rev_len' => 25 ) ),
+                               'user',
+                               false,
                        ),
                        // 'user' module with an empty page
                        array(
-                               array(
-                                       'User:FooBar/monobook.js' => array(
-                                               'timestamp' => 1357924680,
-                                               'length' => 0,
-                                       ),
-                               ), 'user', true,
+                               array( 'User:Example/foo.js' => array( 'rev_sha1' => 'phoi', 'rev_len' => 0 ) ),
+                               'user',
+                               true,
                        ),
                );
        }
index 49a9633..bebc093 100644 (file)
@@ -32,7 +32,7 @@ class HashSiteStoreTest extends MediaWikiTestCase {
        public function testGetSites() {
                $expectedSites = array();
 
-               foreach( TestSites::getSites() as $testSite ) {
+               foreach ( TestSites::getSites() as $testSite ) {
                        $siteId = $testSite->getGlobalId();
                        $expectedSites[$siteId] = $testSite;
                }
index 19dd0aa..7be19ef 100644 (file)
@@ -53,7 +53,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase {
                $exporter->exportSites( array( $foo, $acme ) );
 
                fseek( $tmp, 0 );
-               $xml = fread( $tmp, 16*1024 );
+               $xml = fread( $tmp, 16 * 1024 );
 
                $this->assertContains( '<sites ', $xml );
                $this->assertContains( '<site>', $xml );
@@ -133,7 +133,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase {
                $exporter->exportSites( $sites );
 
                fseek( $tmp, 0 );
-               $xml = fread( $tmp, 16*1024 );
+               $xml = fread( $tmp, 16 * 1024 );
 
                $actualSites = new SiteList();
                $store = $this->newSiteStore( $actualSites );
index 64b195d..b11b1a9 100644 (file)
@@ -141,12 +141,12 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
        /**
         * @dataProvider provideImportFromXML
         */
-       public function testImportFromXML( $xml, array $expectedSites, $errorCount = 0 )  {
+       public function testImportFromXML( $xml, array $expectedSites, $errorCount = 0 ) {
                $importer = $this->newSiteImporter( $expectedSites, $errorCount );
                $importer->importFromXML( $xml );
        }
 
-       public function testImportFromXML_malformed()  {
+       public function testImportFromXML_malformed() {
                $this->setExpectedException( 'Exception' );
 
                $store = $this->getMock( 'SiteStore' );
@@ -154,7 +154,7 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
                $importer->importFromXML( 'THIS IS NOT XML' );
        }
 
-       public function testImportFromFile()  {
+       public function testImportFromFile() {
                $foo = Site::newForType( Site::TYPE_UNKNOWN );
                $foo->setGlobalId( 'Foo' );
 
diff --git a/tests/phpunit/includes/specials/SpecialBlankPageTest.php b/tests/phpunit/includes/specials/SpecialBlankPageTest.php
new file mode 100644 (file)
index 0000000..1d4f5e5
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @licence GNU GPL v2+
+ * @author Adam Shorland
+ *
+ * @covers SpecialBlankpage
+ */
+class SpecialBlankPageTest extends SpecialPageTestBase {
+
+       /**
+        * Returns a new instance of the special page under test.
+        *
+        * @return SpecialPage
+        */
+       protected function newSpecialPage() {
+               return new SpecialBlankpage();
+       }
+
+       public function testHasWikiMsg() {
+               list( $html, ) = $this->executeSpecialPage();
+               $this->assertContains( wfMessage( 'intentionallyblankpage' )->text(), $html );
+       }
+
+}
diff --git a/tests/phpunit/includes/specials/SpecialPageTestBase.php b/tests/phpunit/includes/specials/SpecialPageTestBase.php
new file mode 100644 (file)
index 0000000..9c7b0f0
--- /dev/null
@@ -0,0 +1,165 @@
+<?php
+
+/**
+ * Base class for testing special pages.
+ *
+ * @since 1.26
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Daniel Kinzler
+ * @author Adam Shorland
+ * @author Thiemo Mättig
+ */
+abstract class SpecialPageTestBase extends MediaWikiTestCase {
+
+       private $obLevel;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->obLevel = ob_get_level();
+       }
+
+       protected function tearDown() {
+               $obLevel = ob_get_level();
+
+               while ( ob_get_level() > $this->obLevel ) {
+                       ob_end_clean();
+               }
+
+               if ( $obLevel !== $this->obLevel ) {
+                       $this->fail(
+                               "Test changed output buffer level: was {$this->obLevel} before test, but $obLevel after test."
+                       );
+               }
+
+               parent::tearDown();
+       }
+
+       /**
+        * Returns a new instance of the special page under test.
+        *
+        * @return SpecialPage
+        */
+       abstract protected function newSpecialPage();
+
+       /**
+        * @param string $subPage The subpage parameter to call the page with
+        * @param WebRequest|null $request Web request that may contain URL parameters, etc
+        * @param Language|string|null $language The language which should be used in the context
+        * @param User|null $user The user which should be used in the context of this special page
+        *
+        * @throws Exception
+        * @return array( string, WebResponse ) A two-elements array containing the HTML output
+        * generated by the special page as well as the response object.
+        */
+       protected function executeSpecialPage(
+               $subPage = '',
+               WebRequest $request = null,
+               $language = null,
+               User $user = null
+       ) {
+               $context = $this->newContext( $request, $language, $user );
+
+               $output = new OutputPage( $context );
+               $context->setOutput( $output );
+
+               $page = $this->newSpecialPage();
+               $page->setContext( $context );
+               $output->setTitle( $page->getPageTitle() );
+
+               $html = $this->getHTMLFromSpecialPage( $page, $subPage );
+               $response = $context->getRequest()->response();
+
+               if ( $response instanceof FauxResponse ) {
+                       $code = $response->getStatusCode();
+
+                       if ( $code > 0 ) {
+                               $response->header( 'Status: ' . $code . ' ' . HttpStatus::getMessage( $code ) );
+                       }
+               }
+
+               return array( $html, $response );
+       }
+
+       /**
+        * @param WebRequest|null $request
+        * @param Language|string|null $language
+        * @param User|null $user
+        *
+        * @return DerivativeContext
+        */
+       private function newContext(
+               WebRequest $request = null,
+               $language = null,
+               User $user = null
+       ) {
+               $context = new DerivativeContext( RequestContext::getMain() );
+
+               $context->setRequest( $request ?: new FauxRequest() );
+
+               if ( $language !== null ) {
+                       $context->setLanguage( $language );
+               }
+
+               if ( $user !== null ) {
+                       $context->setUser( $user );
+               }
+
+               $this->setEditTokenFromUser( $context );
+
+               return $context;
+       }
+
+       /**
+        * If we are trying to edit and no token is set, supply one.
+        *
+        * @param DerivativeContext $context
+        */
+       private function setEditTokenFromUser( DerivativeContext $context ) {
+               $request = $context->getRequest();
+
+               // Edits via GET are a security issue and should not succeed. On the other hand, not all
+               // POST requests are edits, but should ignore unused parameters.
+               if ( !$request->getCheck( 'wpEditToken' ) && $request->wasPosted() ) {
+                       $request->setVal( 'wpEditToken', $context->getUser()->getEditToken() );
+               }
+       }
+
+       /**
+        * @param SpecialPage $page
+        * @param string $subPage
+        *
+        * @throws Exception
+        * @return string HTML
+        */
+       private function getHTMLFromSpecialPage( SpecialPage $page, $subPage ) {
+               ob_start();
+
+               try {
+                       $page->execute( $subPage );
+
+                       $output = $page->getOutput();
+
+                       if ( $output->getRedirect() !== '' ) {
+                               $output->output();
+                               $html = ob_get_contents();
+                       } elseif ( $output->isDisabled() ) {
+                               $html = ob_get_contents();
+                       } else {
+                               $html = $output->getHTML();
+                       }
+               } catch ( Exception $ex ) {
+                       ob_end_clean();
+
+                       // Re-throw exception after "finally" handling because PHP 5.3 doesn't have "finally".
+                       throw $ex;
+               }
+
+               ob_end_clean();
+
+               return $html;
+       }
+
+}
index 83489c6..5482b97 100644 (file)
@@ -136,7 +136,7 @@ class SpecialSearchTest extends MediaWikiTestCase {
 
                # Compare :-]
                $this->assertRegExp(
-                       '/' . preg_quote( $term ) . '/',
+                       '/' . preg_quote( $term, '/' ) . '/',
                        $pageTitle,
                        "Search term '{$term}' should not be expanded in Special:Search <title>"
                );
index 599d2a3..10b7e28 100644 (file)
@@ -59,7 +59,7 @@ class ForeignTitleTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedText, $title->getText() );
        }
 
-       public function testUnknownNamespaceCheck( ) {
+       public function testUnknownNamespaceCheck() {
                $title = new ForeignTitle( null, 'this', 'that' );
 
                $this->assertEquals( false, $title->isNamespaceIdKnown() );
@@ -67,7 +67,7 @@ class ForeignTitleTest extends MediaWikiTestCase {
                $this->assertEquals( 'that', $title->getText() );
        }
 
-       public function testUnknownNamespaceError( ) {
+       public function testUnknownNamespaceError() {
                $this->setExpectedException( 'MWException' );
                $title = new ForeignTitle( null, 'this', 'that' );
                $title->getNamespaceId();
index cd0d0b1..1e5f9d0 100644 (file)
@@ -158,7 +158,7 @@ class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
                                function ( TitleValue $title ) {
                                        return str_replace( '_', ' ', "$title" );
                                }
-                       ));
+                       ) );
 
                $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
                $actual = $renderer->renderWikitextLink( $title, $text );
index acc9dfc..04b8f48 100644 (file)
@@ -130,7 +130,7 @@ class IPTest extends PHPUnit_Framework_TestCase {
                        array( ':', 'A colon is not an IP' ),
                        array( '124.24.52', 'IPv4 not enough quads' ),
                        array( '24.324.52.13', 'IPv4 out of range' ),
-                       array( '.24.52.13', 'IPv4 starts with period' ),                
+                       array( '.24.52.13', 'IPv4 starts with period' ),
                );
        }
 
@@ -347,16 +347,31 @@ class IPTest extends PHPUnit_Framework_TestCase {
 
        /**
         * @covers IP::isPublic
+        * @dataProvider provideIsPublic
         */
-       public function testPrivateIPs() {
-               $private = array( 'fc00::3', 'fc00::ff', '::1', '10.0.0.1', '172.16.0.1', '192.168.0.1' );
-               foreach ( $private as $p ) {
-                       $this->assertFalse( IP::isPublic( $p ), "$p is not a public IP address" );
-               }
-               $public = array( '2001:5c0:1000:a::133', 'fc::3', '00FC::' );
-               foreach ( $public as $p ) {
-                       $this->assertTrue( IP::isPublic( $p ), "$p is a public IP address" );
-               }
+       public function testIsPublic( $expected, $input ) {
+               $result = IP::isPublic( $input );
+               $this->assertEquals( $expected, $result );
+       }
+
+       /**
+        * Provider for IP::testIsPublic()
+        */
+       public static function provideIsPublic() {
+               return array(
+                       array( false, 'fc00::3' ), # RFC 4193 (local)
+                       array( false, 'fc00::ff' ), # RFC 4193 (local)
+                       array( false, '127.1.2.3' ), # loopback
+                       array( false, '::1' ), # loopback
+                       array( false, 'fe80::1' ), # link-local
+                       array( false, '169.254.1.1' ), # link-local
+                       array( false, '10.0.0.1' ), # RFC 1918 (private)
+                       array( false, '172.16.0.1' ), # RFC 1918 (private)
+                       array( false, '192.168.0.1' ), # RFC 1918 (private)
+                       array( true, '2001:5c0:1000:a::133' ), # public
+                       array( true, 'fc::3' ), # public
+                       array( true, '00FC::' ) # public
+               );
        }
 
        // Private wrapper used to test CIDR Parsing.
index faa30c3..ade8fc4 100644 (file)
@@ -1528,6 +1528,31 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
+       /**
+        * @covers Language::embedBidi()
+        */
+       public function testEmbedBidi() {
+               $lre = "\xE2\x80\xAA"; // U+202A LEFT-TO-RIGHT EMBEDDING
+               $rle = "\xE2\x80\xAB"; // U+202B RIGHT-TO-LEFT EMBEDDING
+               $pdf = "\xE2\x80\xAC"; // U+202C POP DIRECTIONAL FORMATTING
+               $lang = $this->getLang();
+               $this->assertEquals(
+                       '123',
+                       $lang->embedBidi( '123' ),
+                       'embedBidi with neutral argument'
+               );
+               $this->assertEquals(
+                       $lre . 'Ben_(WMF)' . $pdf,
+                       $lang->embedBidi( 'Ben_(WMF)' ),
+                       'embedBidi with LTR argument'
+               );
+               $this->assertEquals(
+                       $rle . 'יהודי (מנוחין)' . $pdf,
+                       $lang->embedBidi( 'יהודי (מנוחין)' ),
+                       'embedBidi with RTL argument'
+               );
+       }
+
        /**
         * @covers Language::translateBlockExpiry()
         * @dataProvider provideTranslateBlockExpiry
index 3fa56d7..71e0583 100644 (file)
@@ -18,7 +18,7 @@ class LanguageArqTest extends LanguageClassesTestCase {
 
        public static function provideNumber() {
                return array(
-                       array( '1.234.567', '1234567'),
+                       array( '1.234.567', '1234567' ),
                        array( '-12,89', -12.89 ),
                        );
        }
index 7fc9997..c216864 100644 (file)
@@ -418,7 +418,10 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
        }
 
        /**
+        * Broken per T70653.
+        *
         * @group large
+        * @group Broken
         */
        function testCheckpointPlain() {
                $this->checkpointHelper();
@@ -633,7 +636,7 @@ class TextPassDumperDatabaselessTest extends MediaWikiLangTestCase {
         */
        function testBufferSizeSetting( $expected, $size, $msg ) {
                $dumper = new TextPassDumperAccessor( array( "--buffersize=" . $size ) );
-               $this->assertEquals( $expected, $dumper->getBufferSize(), $msg);
+               $this->assertEquals( $expected, $dumper->getBufferSize(), $msg );
        }
 
        /**
diff --git a/tests/phpunit/mocks/MockWebRequest.php b/tests/phpunit/mocks/MockWebRequest.php
new file mode 100644 (file)
index 0000000..3ac5bfb
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * A mock WebRequest.
+ *
+ * If the code under test accesses the response via the request (see
+ * WebRequest#response), then you might be able to use this mock to simplify
+ * your tests.
+ */
+class MockWebRequest extends WebRequest
+{
+       /**
+        * @var WebResponse
+        */
+       protected $response;
+
+       public function __construct( WebResponse $response ) {
+               parent::__construct();
+
+               $this->response = $response;
+       }
+
+       public function response() {
+               return $this->response;
+       }
+}
index d18ab73..efde4c0 100755 (executable)
@@ -215,15 +215,23 @@ if ( version_compare( PHP_VERSION, '5.4.0', '<' ) ) {
 
 $ok = false;
 
-foreach ( array(
-       stream_resolve_include_path( 'phpunit.phar' ),
-       'PHPUnit/Runner/Version.php',
-       'PHPUnit/Autoload.php'
-) as $includePath ) {
-       @include_once $includePath;
-       if ( class_exists( 'PHPUnit_TextUI_Command' ) ) {
-               $ok = true;
-               break;
+if ( class_exists( 'PHPUnit_TextUI_Command' ) ) {
+       echo "PHPUnit already present\n";
+       $ok = true;
+} else {
+       foreach ( array(
+                               stream_resolve_include_path( 'phpunit.phar' ),
+                               'PHPUnit/Runner/Version.php',
+                               'PHPUnit/Autoload.php'
+                       ) as $includePath ) {
+               // @codingStandardsIgnoreStart
+               @include_once $includePath;
+               // @codingStandardsIgnoreEnd
+               if ( class_exists( 'PHPUnit_TextUI_Command' ) ) {
+                       $ok = true;
+                       echo "Using PHPUnit from $includePath\n";
+                       break;
+               }
        }
 }
 
index cde6547..8674329 100644 (file)
@@ -58,9 +58,9 @@ class AutoLoaderTest extends MediaWikiTestCase {
                                continue;
                        }
 
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $contents = file_get_contents( $filePath );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
 
                        if ( $contents === false ) {
                                $actual[$class] = "[couldn't read file '$filePath']";
index 51d31aa..ccf5393 100644 (file)
@@ -19,11 +19,11 @@ class AvailableRightsTest extends PHPUnit_Framework_TestCase {
 
                $rights = User::getAllRights();
 
-               foreach( $wgGroupPermissions as $permissions ) {
+               foreach ( $wgGroupPermissions as $permissions ) {
                        $rights = array_merge( $rights, array_keys( $permissions ) );
                }
 
-               foreach( $wgRevokePermissions as $permissions ) {
+               foreach ( $wgRevokePermissions as $permissions ) {
                        $rights = array_merge( $rights, array_keys( $permissions ) );
                }
 
index 9178bdb..2c92e30 100644 (file)
@@ -47,6 +47,9 @@ class ResourcesTest extends MediaWikiTestCase {
        /**
         * Verify that nothing explicitly depends on the 'jquery' and 'mediawiki' modules.
         * They are always loaded, depending on them is unsupported and leads to unexpected behaviour.
+        * TODO Modules can dynamically choose dependencies based on context. This method does not
+        * test such dependencies. The same goes for testMissingDependencies() and
+        * testUnsatisfiableDependencies().
         */
        public function testIllegalDependencies() {
                $data = self::getAllModules();
@@ -57,7 +60,7 @@ class ResourcesTest extends MediaWikiTestCase {
                        foreach ( $illegalDeps as $illegalDep ) {
                                $this->assertNotContains(
                                        $illegalDep,
-                                       $module->getDependencies(),
+                                       $module->getDependencies( $data['context'] ),
                                        "Module '$moduleName' must not depend on '$illegalDep'"
                                );
                        }
@@ -73,7 +76,7 @@ class ResourcesTest extends MediaWikiTestCase {
 
                /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
-                       foreach ( $module->getDependencies() as $dep ) {
+                       foreach ( $module->getDependencies( $data['context'] ) as $dep ) {
                                $this->assertContains(
                                        $dep,
                                        $validDeps,
@@ -97,7 +100,7 @@ class ResourcesTest extends MediaWikiTestCase {
                /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
                        $moduleTargets = $module->getTargets();
-                       foreach ( $module->getDependencies() as $dep ) {
+                       foreach ( $module->getDependencies( $data['context'] ) as $dep ) {
                                if ( !isset( $data['modules'][$dep] ) ) {
                                        // Missing dependencies reported by testMissingDependencies
                                        continue;
index 17b8b63..97eddee 100644 (file)
@@ -8,14 +8,14 @@ return array(
 
        'test.sinonjs' => array(
                'scripts' => array(
-                       'resources/lib/sinonjs/sinon-1.10.3.js',
+                       'resources/lib/sinonjs/sinon-1.15.4.js',
                        // We want tests to work in IE, but can't include this as it
                        // will break the placeholders in Sinon because the hack it uses
                        // to hijack IE globals relies on running in the global scope
                        // and in ResourceLoader this won't be running in the global scope.
                        // Including it results (among other things) in sandboxed timers
                        // being broken due to Date inheritance being undefined.
-                       // 'resources/lib/sinonjs/sinon-ie-1.10.3.js',
+                       // 'resources/lib/sinonjs/sinon-ie-1.15.4.js',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -66,6 +66,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
                        '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.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
@@ -108,6 +109,7 @@ return array(
                        'mediawiki.api.watch',
                        'mediawiki.jqueryMsg',
                        'mediawiki.messagePoster',
+                       'mediawiki.RegExp',
                        'mediawiki.Title',
                        'mediawiki.toc',
                        'mediawiki.Uri',
index 7c3d699..b828357 100644 (file)
                                        }
                                },
                                teardown: function () {
-                                       this.sandbox.verifyAndRestore();
-
                                        if ( localEnv.teardown ) {
                                                localEnv.teardown.call( this );
                                        }
+
+                                       this.sandbox.verifyAndRestore();
                                }
                        } );
                };
index 795c2bb..911e9d0 100644 (file)
@@ -1,5 +1,14 @@
 ( function ( $ ) {
-       QUnit.module( 'jquery.mwExtension', QUnit.newMwEnvironment() );
+       QUnit.module( 'jquery.mwExtension', QUnit.newMwEnvironment( {
+               // This entire module is deprecated.
+               // Surpress deprecation warnings in test output.
+               setup: function () {
+                       this.suppressWarnings();
+               },
+               teardown: function () {
+                       this.restoreWarnings();
+               }
+       }) );
 
        QUnit.test( 'String functions', 7, function ( assert ) {
                assert.equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
index 97a3ae1..00d4a08 100644 (file)
@@ -32,7 +32,7 @@
                        mw.language.months = this.liveMonths;
                },
                config: {
-                       wgContentLanguage: 'en',
+                       wgPageContentLanguage: 'en',
                        /* default date format of the content language */
                        wgDefaultDateFormat: 'dmy',
                        /* These two are important for numeric interpretations */
        parserTest( 'MDY Dates using dmy content language', 'date', simpleMDYDatesInDMY, function () {
                mw.config.set( {
                        'wgDefaultDateFormat': 'dmy',
-                       'wgContentLanguage': 'de'
+                       'wgPageContentLanguage': 'de'
                } );
        } );
 
index f63aa27..acd98a6 100644 (file)
                        wgDefaultDateFormat: 'dmy',
                        wgSeparatorTransformTable: ['', ''],
                        wgDigitTransformTable: ['', ''],
-                       wgContentLanguage: 'en'
+                       wgPageContentLanguage: 'en'
                }
        } ) );
 
                ],
                function ( $table ) {
                        mw.config.set( 'wgDefaultDateFormat', 'dmy' );
-                       mw.config.set( 'wgContentLanguage', 'de' );
+                       mw.config.set( 'wgPageContentLanguage', 'de' );
 
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click();
index 4f199bd..de79198 100644 (file)
@@ -2,14 +2,39 @@
        QUnit.module( 'mediawiki.api', 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();
                }
        } ) );
 
+       function sequence( responses ) {
+               var i = 0;
+               return function ( request ) {
+                       var response = responses[i];
+                       if ( response ) {
+                               i++;
+                               request.respond.apply( request, response );
+                       }
+               };
+       }
+
+       function sequenceBodies( status, headers, bodies ) {
+               jQuery.each( bodies, function ( i, body ) {
+                       bodies[i] = [ status, headers, body ];
+               } );
+               return sequence( bodies );
+       }
+
        QUnit.test( 'Basic functionality', function ( assert ) {
                QUnit.expect( 2 );
-
                var api = new mw.Api();
 
+               this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '[]' ] );
+
                api.get( {} )
                        .done( function ( data ) {
                                assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
                        .done( function ( data ) {
                                assert.deepEqual( data, [], 'Simple POST request' );
                        } );
-
-               this.server.respond( function ( request ) {
-                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
-               } );
        } );
 
        QUnit.test( 'API error', function ( assert ) {
                QUnit.expect( 1 );
-
                var api = new mw.Api();
 
+               this.server.respond( [ 200, { 'Content-Type': 'application/json' },
+                       '{ "error": { "code": "unknown_action" } }'
+               ] );
+
                api.get( { action: 'doesntexist' } )
                        .fail( function ( errorCode ) {
                                assert.equal( errorCode, 'unknown_action', 'API error should reject the deferred' );
                        } );
-
-               this.server.respond( function ( request ) {
-                       request.respond( 200, { 'Content-Type': 'application/json' },
-                               '{ "error": { "code": "unknown_action" } }'
-                       );
-               } );
        } );
 
        QUnit.test( 'FormData support', function ( assert ) {
                QUnit.expect( 2 );
-
                var api = new mw.Api();
 
-               api.post( { action: 'test' }, { contentType: 'multipart/form-data' } );
-
                this.server.respond( function ( request ) {
                        if ( window.FormData ) {
                                assert.ok( !request.url.match( /action=/ ), 'Request has no query string' );
                        }
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
+
+               api.post( { action: 'test' }, { contentType: 'multipart/form-data' } );
        } );
 
        QUnit.test( 'Converting arrays to pipe-separated', function ( assert ) {
                QUnit.expect( 1 );
-
                var api = new mw.Api();
-               api.get( { test: [ 'foo', 'bar', 'baz' ] } );
 
                this.server.respond( function ( request ) {
                        assert.ok( request.url.match( /test=foo%7Cbar%7Cbaz/ ), 'Pipe-separated value was submitted' );
                        request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
                } );
+
+               api.get( { test: [ 'foo', 'bar', 'baz' ] } );
        } );
 
-       QUnit.test( 'getToken( pre-populated )', function ( assert ) {
+       QUnit.test( 'getToken() - cached', function ( assert ) {
                QUnit.expect( 2 );
-
                var api = new mw.Api();
 
                // Get editToken for local wiki, this should not make
-               // a request as it should be retrieved from user.tokens.
-               // This means that this test must run before the #badToken test below.
+               // a request as it should be retrieved from mw.user.tokens.
                api.getToken( 'edit' )
                        .done( function ( token ) {
                                assert.ok( token.length, 'Got a token' );
                assert.equal( this.server.requests.length, 0, 'Requests made' );
        } );
 
-       QUnit.test( 'badToken()', function ( assert ) {
-               QUnit.expect( 2 );
-
+       QUnit.test( 'getToken() - uncached', function ( assert ) {
+               QUnit.expect( 3 );
                var api = new mw.Api();
 
-               // Clear the default cached token
-               api.badToken( 'edit' );
-
-               api.getToken( 'edit' )
-                       .done( function ( token ) {
-                               assert.equal( token, '0123abc', 'Got a non-cached token' );
-                       } )
-                       .fail( function ( err ) {
-                               assert.equal( '', err, 'API error' );
-                       } );
-
-               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "edittoken": "0123abc" } }'
-               );
-
-               assert.equal( this.server.requests.length, 1, 'Requests made' );
-       } );
-
-       QUnit.test( 'getToken()', function ( assert ) {
-               QUnit.expect( 5 );
-
-               var test = this,
-                       api = new mw.Api();
+               this.server.respondWith( /type=testuncached/, [ 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testuncachedtoken": "good" } }'
+               ] );
 
                // Get a token of a type that isn't prepopulated by user.tokens.
                // Could use "block" or "delete" here, but those could in theory
                // be added to user.tokens, use a fake one instead.
-               api.getToken( 'testaction' )
+               api.getToken( 'testuncached' )
                        .done( function ( token ) {
-                               assert.ok( token.length, 'Got testaction token' );
+                               assert.equal( token, 'good', 'The token' );
                        } )
                        .fail( function ( err ) {
                                assert.equal( err, '', 'API error' );
                        } );
-               api.getToken( 'testaction' )
+
+               api.getToken( 'testuncached' )
                        .done( function ( token ) {
-                               assert.ok( token.length, 'Got testaction token (cached)' );
+                               assert.equal( token, 'good', 'The cached token' );
                        } )
                        .fail( function ( err ) {
                                assert.equal( err, '', 'API error' );
                        } );
 
+               assert.equal( this.server.requests.length, 1, 'Requests made' );
+       } );
+
+       QUnit.test( 'getToken() - error', function ( assert ) {
+               QUnit.expect( 2 );
+               var api = new mw.Api();
+
+               this.server.respondWith( /type=testerror/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
+                       [
+                               '{ "error": { "code": "bite-me", "info": "Smite me, O Mighty Smiter" } }',
+                               '{ "tokens": { "testerrortoken": "good" } }'
+                       ]
+               ) );
+
                // Don't cache error (bug 65268)
-               api.getToken( 'testaction2' )
-                       .fail( function ( err ) {
-                               assert.equal( err, 'bite-me', 'Expected error' );
-                       } )
-                       .always( function () {
-                               // Make this request after the first one has finished.
-                               // If we make it simultaneously we still want it to share
-                               // the cache, but as soon as it is fulfilled as error we
-                               // reject it so that the next one tries fresh.
-                               api.getToken( 'testaction2' )
-                                       .done( function ( token ) {
-                                               assert.ok( token.length, 'Got testaction2 token (error was not be cached)' );
-                                       } )
-                                       .fail( function ( err ) {
-                                               assert.equal( err, '', 'API error' );
-                                       } );
-
-                               assert.equal( test.server.requests.length, 3, 'Requests made' );
-
-                               test.server.requests[2].respond( 200, { 'Content-Type': 'application/json' },
-                                       '{ "tokens": { "testaction2token": "0123abc" } }'
-                               );
+               api.getToken( 'testerror' ).fail( function ( err ) {
+                       assert.equal( err, 'bite-me', 'Expected error' );
+
+                       // Make this request after the first one has finished.
+                       // If we make it simultaneously we still want it to share
+                       // the cache, but as soon as it is fulfilled as error we
+                       // reject it so that the next one tries fresh.
+                       api.getToken( 'testerror' ).done( function ( token ) {
+                               assert.equal( token, 'good', 'The token' );
                        } );
+               } );
+       } );
 
-               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "testactiontoken": "0123abc" } }'
-               );
+       QUnit.test( 'badToken()', function ( assert ) {
+               QUnit.expect( 2 );
+               var api = new mw.Api(),
+                       test = this;
+
+               this.server.respondWith( /type=testbad/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
+                       [
+                               '{ "tokens": { "testbadtoken": "bad" } }',
+                               '{ "tokens": { "testbadtoken": "good" } }'
+                       ]
+               ) );
+
+               api.getToken( 'testbad' )
+                       .then( function () {
+                               api.badToken( 'testbad' );
+                               return api.getToken( 'testbad' );
+                       } )
+                       .then( function ( token ) {
+                               assert.equal( token, 'good', 'The token' );
+                               assert.equal( test.server.requests.length, 2, 'Requests made' );
+                       } );
 
-               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "error": { "code": "bite-me", "info": "Smite me, O Mighty Smiter" } }'
-               );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params )', function ( assert ) {
                QUnit.expect( 1 );
-
                var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
 
-               // - Requests token
-               // - Performs action=example
-               api.postWithToken( 'testsimpletoken', { action: 'example', key: 'foo' } )
+               this.server.respondWith( 'GET', /type=testpost/, [ 200, { 'Content-Type': 'application/json' },
+                       '{ "tokens": { "testposttoken": "good" } }'
+               ] );
+               this.server.respondWith( 'POST', /api/, function ( request ) {
+                       if ( request.requestBody.match( /token=good/ ) ) {
+                               request.respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "example": { "foo": "quux" } }'
+                               );
+                       }
+               } );
+
+               api.postWithToken( 'testpost', { action: 'example', key: 'foo' } )
                        .done( function ( data ) {
                                assert.deepEqual( data, { example: { foo: 'quux' } } );
                        } );
-
-               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "testsimpletokentoken": "a-bad-token" } }'
-               );
-
-               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "example": { "foo": "quux" } }'
-               );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params with assert )', function ( assert ) {
                QUnit.expect( 2 );
-
                var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
 
-               api.postWithToken( 'testasserttoken', { action: 'example', key: 'foo', assert: 'user' } )
+               this.server.respondWith( /assert=user/, [ 200, { 'Content-Type': 'application/json' },
+                       '{ "error": { "code": "assertuserfailed", "info": "Assertion failed" } }'
+               ] );
+
+               api.postWithToken( 'testassertpost', { action: 'example', key: 'foo', assert: 'user' } )
                        .fail( function ( errorCode ) {
                                assert.equal( errorCode, 'assertuserfailed', 'getToken fails assert' );
                        } );
 
-               assert.equal( this.server.requests.length, 1, 'Request for token made' );
-               this.server.respondWith( /assert=user/, function ( request ) {
-                       request.respond(
-                               200,
-                               { 'Content-Type': 'application/json' },
-                               '{ "error": { "code": "assertuserfailed", "info": "Assertion failed" } }'
-                       );
-               } );
-
-               this.server.respond();
+               assert.equal( this.server.requests.length, 1, 'Requests made' );
        } );
 
        QUnit.test( 'postWithToken( tokenType, params, ajaxOptions )', function ( assert ) {
                QUnit.expect( 3 );
-
                var api = new mw.Api();
 
+               this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '{ "example": "quux" }' ] );
+
                api.postWithToken(
                        'edit',
                        {
 
                assert.equal( this.server.requests.length, 2, 'Request made' );
                assert.equal( this.server.requests[0].requestHeaders['X-Foo'], 'Bar', 'Header sent' );
-
-               this.server.respond( function ( request ) {
-                       request.respond( 200, { 'Content-Type': 'application/json' }, '{ "example": "quux" }' );
-               } );
        } );
 
        QUnit.test( 'postWithToken() - badtoken', function ( assert ) {
                QUnit.expect( 1 );
-
                var api = new mw.Api();
 
-               // - Request: token
+               this.server.respondWith( /type=testbadtoken/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
+                       [
+                               '{ "tokens": { "testbadtokentoken": "bad" } }',
+                               '{ "tokens": { "testbadtokentoken": "good" } }'
+                       ]
+               ) );
+               this.server.respondWith( 'POST', /api/, function ( request ) {
+                       if ( request.requestBody.match( /token=bad/ ) ) {
+                               request.respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "error": { "code": "badtoken" } }'
+                               );
+                       }
+                       if ( request.requestBody.match( /token=good/ ) ) {
+                               request.respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "example": { "foo": "quux" } }'
+                               );
+                       }
+               } );
+
+               // - Request: new token -> bad
                // - Request: action=example -> badtoken error
-               // - Request: new token
-               // - Request: action=example
+               // - Request: new token -> good
+               // - Request: action=example -> success
                api.postWithToken( 'testbadtoken', { action: 'example', key: 'foo' } )
                        .done( function ( data ) {
                                assert.deepEqual( data, { example: { foo: 'quux' } } );
                        } );
-
-               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "testbadtokentoken": "a-bad-token" } }'
-               );
-
-               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "error": { "code": "badtoken" } }'
-               );
-
-               this.server.requests[2].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "testbadtokentoken": "a-good-token" } }'
-               );
-
-               this.server.requests[3].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "example": { "foo": "quux" } }'
-               );
-
        } );
 
        QUnit.test( 'postWithToken() - badtoken-cached', function ( assert ) {
                QUnit.expect( 2 );
+               var sequenceA,
+                       api = new mw.Api();
 
-               var api = new mw.Api();
+               this.server.respondWith( /type=testonce/, sequenceBodies( 200, { 'Content-Type': 'application/json' },
+                       [
+                               '{ "tokens": { "testoncetoken": "good-A" } }',
+                               '{ "tokens": { "testoncetoken": "good-B" } }'
+                       ]
+               ) );
+               sequenceA = sequenceBodies( 200, { 'Content-Type': 'application/json' },
+                       [
+                               '{ "example": { "value": "A" } }',
+                               '{ "error": { "code": "badtoken" } }'
+                       ]
+               );
+               this.server.respondWith( 'POST', /api/, function ( request ) {
+                       if ( request.requestBody.match( /token=good-A/ ) ) {
+                               sequenceA( request );
+                       } else if ( request.requestBody.match( /token=good-B/ ) ) {
+                               request.respond( 200, { 'Content-Type': 'application/json' },
+                                       '{ "example": { "value": "B" } }'
+                               );
+                       }
+               } );
 
-               // - Request: token
+               // - Request: new token -> A
                // - Request: action=example
-               api.postWithToken( 'testbadtokencache', { action: 'example', key: 'foo' } )
+               api.postWithToken( 'testonce', { action: 'example', key: 'foo' } )
                        .done( function ( data ) {
-                               assert.deepEqual( data, { example: { foo: 'quux' } } );
+                               assert.deepEqual( data, { example: { value: 'A' } } );
                        } );
 
-               // - Cache: Try previously cached token
-               // - Request: action=example -> badtoken error
-               // - Request: new token
-               // - Request: action=example
-               api.postWithToken( 'testbadtokencache', { action: 'example', key: 'bar' } )
+               // - Request: action=example w/ token A -> badtoken error
+               // - Request: new token -> B
+               // - Request: action=example w/ token B -> success
+               api.postWithToken( 'testonce', { action: 'example', key: 'bar' } )
                        .done( function ( data ) {
-                               assert.deepEqual( data, { example: { bar: 'quux' } } );
+                               assert.deepEqual( data, { example: { value: 'B' } } );
                        } );
-
-               this.server.requests[0].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "testbadtokencachetoken": "a-good-token-once" } }'
-               );
-
-               this.server.requests[1].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "example": { "foo": "quux" } }'
-               );
-
-               this.server.requests[2].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "error": { "code": "badtoken" } }'
-               );
-
-               this.server.requests[3].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "tokens": { "testbadtokencachetoken": "a-good-new-token" } }'
-               );
-
-               this.server.requests[4].respond( 200, { 'Content-Type': 'application/json' },
-                       '{ "example": { "bar": "quux" } }'
-               );
-
        } );
-
 }( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js
new file mode 100644 (file)
index 0000000..2388497
--- /dev/null
@@ -0,0 +1,38 @@
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.RegExp' );
+
+       QUnit.test( 'escape', 16, function ( assert ) {
+               var specials, normal;
+
+               specials = [
+                       '\\',
+                       '{',
+                       '}',
+                       '(',
+                       ')',
+                       '[',
+                       ']',
+                       '|',
+                       '.',
+                       '?',
+                       '*',
+                       '+',
+                       '-',
+                       '^',
+                       '$'
+               ];
+
+               normal = [
+                       'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+                       'abcdefghijklmnopqrstuvwxyz',
+                       '0123456789'
+               ].join( '' );
+
+               $.each( specials, function ( i, str ) {
+                       assert.propEqual( str.match( new RegExp( mw.RegExp.escape( str ) ) ), [ str ], 'Match ' + str );
+               } );
+
+               assert.equal( mw.RegExp.escape( normal ), normal, 'Alphanumerals are left alone' );
+       } );
+
+}( mediaWiki, jQuery ) );
index c0afe07..284f21a 100644 (file)
                }
        } );
 
-       QUnit.test( 'Basic parsing', 12, function ( assert ) {
+       QUnit.test( 'Basic parsing', 21, function ( assert ) {
                var title;
                title = new mw.Title( 'File:Foo_bar.JPG' );
 
                title = new mw.Title( 'Foo#bar' );
                assert.equal( title.getPrefixedText(), 'Foo' );
                assert.equal( title.getFragment(), 'bar' );
+
+               title = new mw.Title( '.foo' );
+               assert.equal( title.getPrefixedText(), '.foo' );
+               assert.equal( title.getName(), '' );
+               assert.equal( title.getNameText(), '' );
+               assert.equal( title.getExtension(), 'foo' );
+               assert.equal( title.getDotExtension(), '.foo' );
+               assert.equal( title.getMain(), '.foo' );
+               assert.equal( title.getMainText(), '.foo' );
+               assert.equal( title.getPrefixedDb(), '.foo' );
+               assert.equal( title.getPrefixedText(), '.foo' );
        } );
 
        QUnit.test( 'Transformation', 11, function ( assert ) {
index e43516b..89eb45f 100644 (file)
@@ -1,7 +1,7 @@
 ( function ( mw, $ ) {
        QUnit.module( 'mediawiki.toc', QUnit.newMwEnvironment( {
                setup: function () {
-                       // Prevent live cookies like mw_hidetoc=1 from interferring with the test
+                       // Prevent live cookies from interferring with the test
                        this.stub( $, 'cookie' ).returns( null );
                }
        } ) );
index 0b42af4..b73d2e3 100644 (file)
@@ -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'
                        'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l'
                );
 
-               assert.ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' );
+               assert.ok( tbRL && tbRL.nodeType, 'addPortletLink returns a DOM Node' );
 
                tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
                        'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org', 'm', tbRL );
index 6d3ac2f..16f458b 100644 (file)
@@ -695,7 +695,7 @@ class DelayedParserTest {
         * @throws MWException
         */
        public function unleash( &$parserTest ) {
-               if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest )     ) {
+               if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest ) ) {
                        throw new MWException( __METHOD__ . " must be passed an instance of ParserTest or "
                                . "NewParserTest classes\n" );
                }
index 051c39e..b530bb5 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -89,7 +89,6 @@ function wfThumbHandle404() {
 function wfStreamThumb( array $params ) {
        global $wgVaryOnXFP;
 
-
        $headers = array(); // HTTP headers to send
 
        $fileName = isset( $params['f'] ) ? $params['f'] : '';
@@ -204,7 +203,7 @@ function wfStreamThumb( array $params ) {
                if ( $redirectedLocation ) {
                        // File has been moved. Give redirect.
                        $response = RequestContext::getMain()->getRequest()->response();
-                       $response->header( "HTTP/1.1 302 " . HttpStatus::getMessage( 302 ) );
+                       $response->statusHeader( 302 );
                        $response->header( 'Location: ' . $redirectedLocation );
                        $response->header( 'Expires: ' .
                                gmdate( 'D, d M Y H:i:s', time() + 12 * 3600 ) . ' GMT' );
@@ -231,11 +230,11 @@ function wfStreamThumb( array $params ) {
                // Fix IE brokenness
                $imsString = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] );
                // Calculate time
-               wfSuppressWarnings();
+               MediaWiki\suppressWarnings();
                $imsUnix = strtotime( $imsString );
-               wfRestoreWarnings();
+               MediaWiki\restoreWarnings();
                if ( wfTimestamp( TS_UNIX, $img->getTimestamp() ) <= $imsUnix ) {
-                       header( 'HTTP/1.1 304 Not Modified' );
+                       HttpStatus::header( 304 );
                        return;
                }
        }
@@ -270,7 +269,7 @@ function wfStreamThumb( array $params ) {
                } elseif ( rawurldecode( $rel404 ) === $img->getThumbRel( $thumbName2 ) ) {
                        // Request for the "long" thumbnail name; redirect to canonical name
                        $response = RequestContext::getMain()->getRequest()->response();
-                       $response->header( "HTTP/1.1 301 " . HttpStatus::getMessage( 301 ) );
+                       $response->statusHeader( 301 );
                        $response->header( 'Location: ' .
                                wfExpandUrl( $img->getThumbUrl( $thumbName ), PROTO_CURRENT ) );
                        $response->header( 'Expires: ' .
@@ -554,14 +553,14 @@ function wfThumbError( $status, $msg ) {
        header( 'Cache-Control: no-cache' );
        header( 'Content-Type: text/html; charset=utf-8' );
        if ( $status == 400 ) {
-               header( 'HTTP/1.1 400 Bad request' );
+               HttpStatus::header( 400 );
        } elseif ( $status == 404 ) {
-               header( 'HTTP/1.1 404 Not found' );
+               HttpStatus::header( 404 );
        } elseif ( $status == 403 ) {
-               header( 'HTTP/1.1 403 Forbidden' );
+               HttpStatus::header( 403 );
                header( 'Vary: Cookie' );
        } else {
-               header( 'HTTP/1.1 500 Internal server error' );
+               HttpStatus::header( 500 );
        }
        if ( $wgShowHostnames ) {
                header( 'X-MW-Thumbnail-Renderer: ' . wfHostname() );
@@ -571,7 +570,7 @@ function wfThumbError( $status, $msg ) {
        } else {
                $debug = '';
        }
-       echo <<<EOT
+       $content = <<<EOT
 <!DOCTYPE html>
 <html><head>
 <meta charset="UTF-8" />
@@ -587,4 +586,6 @@ $debug
 </html>
 
 EOT;
+       header( 'Content-Length: ' . strlen( $content ) );
+       echo $content;
 }